【问题标题】:Parsing id3 data from a local audio file within firefox addon从 firefox 插件中的本地音频文件解析 id3 数据
【发布时间】:2015-01-12 13:36:56
【问题描述】:

我正在使用SDK 开发一个Firefox addon,它使用require("sdk/io/file").list() 列出您计算机上的音频文件。
我使用上述方法构建了一个文件路径数组,并将此数组传递给附加到PanelcontentScript
然后Panel 循环遍历数组并显示找到的所有文件。

现在我正在尝试使用JavaScript-ID3-Reader,这样我就可以从每个文件中读取ID3 数据并将这些数据显示在每个文件旁边。
我一直在尝试this(读取本地文件),从contentScript 内部,例如..

var f = new File([""], "file:///home/user/audio.mp3");
ID3.loadTags("audio.mp3", function () {
        var tags = ID3.getAllTags("audio.mp3");
        console.log(tags.comment + " - " + tags.track + ", " + tags.lyrics);
}, {
        dataReader: FileAPIReader(f)
}); 

但我得到的输出是..

undefined - undefined, undefined

/home/user/audio.mp3 包含以下ID3 数据,与http://web.ist.utl.pt/antonio.afonso/www.aadsm.net/libraries/id3/ 一起找到..

Artist
    A Perfect Circle
Title
    Annihilation
Album
    eMOTIVe
Year
    2004
Comment
Genre
    Pop/Rock
Track
    1/12
Lyrics

这是我正在尝试的另一个测试..

function getID3 (file) {
        var url = file.name;
        console.log(url); // console.log: addon: /home/user/audio.mp3
        ID3.loadTags(url, function () {
                var tags = ID3.getAllTags(url);
                console.log(tags); // console.log: addon: {}
                console.log(tags.artist); // console.log: addon: null
        }, {
                dataReader: new FileAPIReader(file)
        });
}

var f = new File([""], "file:///home/rob/audio.mp3", {type : "audio/mpeg"});
getID3(f);

有人知道这可能有什么问题吗? /home/user/audio.mp3 确实存在于文件系统中。

【问题讨论】:

    标签: javascript firefox-addon firefox-addon-sdk id3


    【解决方案1】:

    此 JavaScript-ID3-Reader 库旨在在网站上下文中运行,仅适用于通过 httphttps afaict 获得的文件。

    您可能想找到一个可以在附加组件方面工作的库。

    【讨论】:

    • contentScripts 附加到Panels 不在网站上下文中运行?由于我在创建Panel 期间附加了库,因此我认为它可以访问本地文件,类似于contentURL<audio> src 上的Panel 可以访问本地文件。
    • contentScripts 在沙箱中运行,具有与网站本身几乎相同的权限(使用扩展主体)。它与常规的 <script> 导入几乎相同,但由于 xray 包装器的存在,它并不完全相同。一些脚本在这些条件下会中断。如果不会造成任何安全问题,您应该使用不同的脚本或尝试将其注入页面内容本身。
    【解决方案2】:

    您确定您的 audio.mp3 文件定义了这些 ID3 标签吗?尝试使用 console.log(tags) 列出您的 ID3 标签以查看所有标签,并尝试使用桌面媒体播放器打开它以查看信息是否显示。请注意,ID3 有几个不同的版本,因此您也可能使用了错误的版本。

    【讨论】:

    • 有一些数据,我运行了 lib 提供的测试,here,用于检查ID3 标签,结果为{"Track": "1/12", "Comment":"", "Lyrics": ""}。所以使用console.log(tags) 应该打印一些东西而不是{},对吧?
    猜你喜欢
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    相关资源
    最近更新 更多