使用javascript从mp3读取id3标记

使用javascript从mp3读取id3标记,javascript,audio,Javascript,Audio,我知道以前有人问过我这个问题,但我的情况有点不同。我正在制作一个chrome应用程序,这样我就可以访问它支持的所有最新JavaScript文件API,而不用担心兼容性。我真的很想自己做这件事。。我没有图书馆。教程或指南就可以了。毕竟,这真的有多困难 基本上,我有用户添加的mp3,我希望能够阅读最基本的信息,如艺术家和专辑(实际上,只有这两个,但其他不会造成任何伤害) 我相信我知道id3标签是什么,以及如何读取信息。我只需要看一次就行了。 正如@joekarl所指出的,这里有一些库可以为您做到这一

我知道以前有人问过我这个问题,但我的情况有点不同。我正在制作一个chrome应用程序,这样我就可以访问它支持的所有最新JavaScript文件API,而不用担心兼容性。我真的很想自己做这件事。。我没有图书馆。教程或指南就可以了。毕竟,这真的有多困难

基本上,我有用户添加的mp3,我希望能够阅读最基本的信息,如艺术家和专辑(实际上,只有这两个,但其他不会造成任何伤害)

我相信我知道id3标签是什么,以及如何读取信息。我只需要看一次就行了。
正如@joekarl所指出的,这里有一些库可以为您做到这一点。我看到了你的信息请求,所以你可以自己做,但这里有一个宝石从500多行从图书馆在:

var iLong=bBigEndian?

(()()(iByte1不再需要使用binaryajax.js或id3解析器库。在Chrome at中,您可以使用
FileReader
DataView
读取和提取ID3v1信息。只需几行:


这个库有很好的文档。我喜欢GitHub


美国石油学会 这将输出标准音乐元数据:

{ artist : ['Spor'],
  album : 'Nightlife, Vol 5.',
  albumartist : [ 'Andy C', 'Spor' ],
  title : 'Stronger',
  year : '2010',
  track : { no : 1, of : 44 },
  disk : { no : 1, of : 2 },
  picture : [ { format : 'jpg', data : <Buffer> } ]
}
{艺术家:['Spor'],
专辑:《夜生活》,第五卷,
专辑艺术家:['Andy C','Spor'],
标题:“更强”,
年份:“2010年”,
轨道:{no:1,of:44},
磁盘:{no:1,共:2},
图片:[{格式:'jpg',数据:}]
}

是的,我的(打包的)应用程序根本不使用任何ajax(事实上它是完全离线的),它使用文件系统api。我将查看您的链接以查看相关代码。非常感谢:)@rockerest在具有readTagsFromData的文件中,函数需要一个二进制数据作为输入变量,我将该文件作为文件输入或blob url。我如何进行转换?我真的不知道。最好的选择可能是图像的base64编码字符串表示,但我真的不知道如何达到这一点。如果你有像PHP这样的后端,您可能可以读取文件输入或blob,并将其转换为单一二进制格式,然后输入前端javascript。然而,这里有很多神奇之处,我不能透露很多信息。仅供参考,第一个链接(二进制Ajax)有一个函数(实际上是文件中的第一个)它返回二进制数据。你可能需要仔细研究一下,看看你是否可以使用它来满足你的需要。嗯,谢谢。我也在使用文件系统api,它有一个readAsBinaryString函数。我现在正在研究这个问题。是的。我只得到了这个答案。你可以看到另一个答案上的注释:D有没有提到api的答案,所以我选择了这个答案。但是现在有:)无论如何谢谢你的回答:虽然它对一首歌有效,但是如果我尝试添加多首歌(在循环中使用api),它读取一些精选的信息。其他的都是空白的。我没有办法想出任何模式。我已经尝试消除所有其他不必要的变量。我真的希望它能工作。如果你能帮忙,那就太好了。这似乎对Chrome v20不起作用。关于为什么和如何运行它,我想知道怎么做要使用本机数据视图对id3 v2.4执行此操作,那么mp3流(shout-/icecast)呢?如果音频元素可以提供元数据不是更好吗?特别是当它已经在缓冲流的时候。在计量连接的时代,单独播放和读取元数据流似乎有点愚蠢。当没有
createReadStream
可用时,如何在浏览器中初始化解析器?
var fs = require('fs');
var mm = require('musicmetadata');

//create a new parser from a node ReadStream
var parser = new mm(fs.createReadStream('sample.mp3'));

//listen for the metadata event
parser.on('metadata', function (result) {
  console.log(result);
});
{ artist : ['Spor'],
  album : 'Nightlife, Vol 5.',
  albumartist : [ 'Andy C', 'Spor' ],
  title : 'Stronger',
  year : '2010',
  track : { no : 1, of : 44 },
  disk : { no : 1, of : 2 },
  picture : [ { format : 'jpg', data : <Buffer> } ]
}