Javascript 从mp3 id3v2标签中识别歌曲信息

Javascript 从mp3 id3v2标签中识别歌曲信息,javascript,mp3,id3,Javascript,Mp3,Id3,我已经有mp3二进制数据了,我只是想知道如何从中提取信息。v1很简单,最后128个字符就完成了。但是v2的长度是可变的。文档说标签大小将在标题中,但我在我测试的任何歌曲中都找不到它 但无论如何,我只是想提取专辑和艺术家信息。。jsut这两个,使用javascript。为了简单起见,我在一个变量中有一首Taylor swift歌曲的前2000字节(下面是歌曲的实际二进制数据): 现在我可以很容易地找到专辑和艺术家的名字(最后两行)。我还可以很容易地找到数据以js开头的地方。只需找到TALB和TPE

我已经有mp3二进制数据了,我只是想知道如何从中提取信息。v1很简单,最后128个字符就完成了。但是v2的长度是可变的。文档说标签大小将在标题中,但我在我测试的任何歌曲中都找不到它

但无论如何,我只是想提取专辑和艺术家信息。。jsut这两个,使用javascript。为了简单起见,我在一个变量中有一首Taylor swift歌曲的前2000字节(下面是歌曲的实际二进制数据):

现在我可以很容易地找到专辑和艺术家的名字(最后两行)。我还可以很容易地找到数据以js开头的地方。只需找到
TALB
TPE1
。简单。但我怎么知道数据的终点呢。。?它们在其他歌曲中可能相邻,也可能不相邻。它们可能是也可能不是大写。所有其他库如何确定数据的终点

此外,正如文档所示,开头没有“大小”


编辑有人能帮我吗?我真的需要这个

试试看,它好像做了你需要的。

试试看,它好像做了你需要的。

你显示的二进制样本缺少一些数据。ID3 2.4版标记帧头的长度为10字节,由以下字段组成:

  • ID—4个字节(例如TIT2)

  • 大小--4字节(在版本>=2.4时同步是安全的)

  • 标志——2字节

size字段告诉您该特定帧中有多少字节的数据。同样,实际的标记头也是10个字节:

  • ID—3个字节(始终为ID3)

  • 版本--2字节(主要版本和修订版。例如,0x04 0x00表示2.4.0标记版本)

  • 标志——1字节

  • 大小--4字节(在版本>=2.3时是同步安全的)

见:

脚本拥有二进制数据后,可以解析这些大小字段以确定完整标记的大小以及每个帧的大小。一旦你达到这一点,你会遇到同步安全的整数


请参阅:

您显示的二进制示例缺少一些数据。ID3 2.4版标记帧头的长度为10字节,由以下字段组成:

  • ID—4个字节(例如TIT2)

  • 大小--4字节(在版本>=2.4时同步是安全的)

  • 标志——2字节

size字段告诉您该特定帧中有多少字节的数据。同样,实际的标记头也是10个字节:

  • ID—3个字节(始终为ID3)

  • 版本--2字节(主要版本和修订版。例如,0x04 0x00表示2.4.0标记版本)

  • 标志——1字节

  • 大小--4字节(在版本>=2.3时是同步安全的)

见:

脚本拥有二进制数据后,可以解析这些大小字段以确定完整标记的大小以及每个帧的大小。一旦你达到这一点,你会遇到同步安全的整数


请看:

这里的人就是喜欢图书馆。。对吧?P但我只差一步就可以完成整个库只需(字面上)两行代码就能完成的任务了。:)另外,这个库只读取v1标记,引用作者的话,
也许我以后会尝试添加对v2标记的支持。
这里的人就是喜欢库。。对吧?P但我只差一步就可以完成整个库只需(字面上)两行代码就能完成的任务了。:)另外,该库只读取v1标签,引用作者的话,
也许我以后会尝试添加对v2标签的支持。
是!我也这么想,但那是实际的结果。我从输出屏幕本身粘贴了它。令我惊讶的是,我尝试了很多来自不同专辑的歌曲,但没有一首歌的标题是10字节。。也许这是规范规定的,但歌曲通常不遵循?而且据我从您的回答和文档中了解,每个标签框(如艺术家姓名、专辑名称等)都是预定义的标识符,在标题中说明。。正确的?这是标题
其他标题信息[某些“预定义标识符”]其他标题信息
和标签正文
[该“预定义标识符”]帧信息
我是否正确?是。每个框架都是特定类型的。例如,ID为TPE1的帧通常表示艺术家。有相当多的框架类型。请参阅:。如果您使用的是Linux或OS X,Bulk ID3将准确显示您的标记所包含的内容。请参阅:。请记住,它目前是一个阿尔法。此外,复制和粘贴不一定提供所有数据,因为许多值不可打印。你需要一个好的十六进制编辑器来查看实际数据。谢谢你的参考链接。你能告诉我一个好的javascript十六进制编辑器吗。我目前正在使用文件系统API的
readAsBinaryString
来获取二进制数据。。chrome的开发面板正好显示了上面所示的内容。另外,如果这是一个不可打印字符的问题,那么必须至少有一些字符(比如页眉长度,它是一个数字,因此是可打印的),有很多好的十六进制编辑器可用。选择哪一个取决于您使用的操作系统。我用祝福。是的!我也这么想,但那是实际的结果。我从输出屏幕本身粘贴了它。令我惊讶的是,我尝试了很多来自不同专辑的歌曲,但没有一首歌的标题是10字节。。也许这是规范规定的,但歌曲通常不遵循?而且据我从您的回答和文档中了解,每个标签框(如艺术家姓名、专辑名称等)都是预定义的标识符,在标题中说明。。正确的?这是标题
其他标题信息[某些“预定义标识符”]其他标题信息
和标记体
[该“预定义标识符”]帧信息
ID3!vTYER2010TIT2
Last KissMCDI¬E+96+4484+918B+E800+12F4B+1A636+1EC24+23A8E+2905F+2F7DD+33868+3914B+3D931+44555+4A27BTRCK13TCON(2)CountryPRIVPeakValue¡PRIVAverageLevel{ TPE2
Taylor SwiftPRIV)WM/MediaClassSecondaryIDPRIV'WM/MediaClassPrimaryID¼}`Ñ#ãâK¡H¤*(DPRIVWM/ProviderAMGPRIVWM/WMContentIDÇ1t>êDëþëPRIV"WM/WMCollectionID   ¨F}âH"Y#7 ÈPRIV'WM/WMCollectionGroupID  ¨F}âH"Y#7 ÈTPUBBig MachinePRIVWM/UniqueFileIdentifierAMGa_id=R  2026672;AMGp_id=P   816977;AMGt_id=T 22057912TALB
Speak NowTPE1
Taylor SwiftTLEN369120ÿûà@üK