读取MP3音频数据或计算其校验和

时间:2009-12-21 12:26:09

标签: ruby audio mp3 checksum

是否有一个Ruby库可以让我计算MP3文件的音频数据的校验和(减去元数据)或允许我读取MP3的音频数据来自己计算校验和?


我正在寻找类似的东西:

mp3 = Mp3Lib::MP3.new('/path/to/song.mp3')
mp3.audio.sha1sum # => the sha1 checksum of _only_ the audio, minus the metadata

我找到了Mp3Info,但似乎有点单调乏味。初始化Mp3Info对象时,您可以获取实际音频数据开始和结束的帧。

2 个答案:

答案 0 :(得分:3)

在没有元数据的情况下提取mp3文件非常容易。

的ID3v1

元数据是文件的最后128个字节。元数据始终以3字节“TAG”开头(如果存在)。只需忽略最后128字节。

的ID3v2

元数据可以存储在文件的开头或结尾。大多数实现只支持开头。 ID3v2有一个存储大小的标题。标头始终在元数据的开头处被激活。有一个可选的页脚,它是元数据末尾标题的副本。如果元数据位于文件末尾,则需要页脚。

标题具有以下形式

ID3v2/file identifier      "ID3"
ID3v2 version              $04 00
ID3v2 flags                %abcd0000
ID3v2 size             4 * %0xxxxxxx

页脚具有以下形式

ID3v2/file identifier      "3DI"
ID3v2 version              $04 00
ID3v2 flags                %abcd0000
ID3v2 size             4 * %0xxxxxxx

d位说,页脚存在。尺寸是在没有页眉和页脚的情况下测量的。大小的每个字节始终是最高位集。因此,只有28个实际的32位表示大小。

只计算,文件的哪一部分不是元数据,并将其用于散列。

请注意,如果ID3v1和ID3v2都位于文件末尾,则ID3v1位于IDv2后面

规范可在http://www.id3.org/id3v2.4.0-structure找到。

答案 1 :(得分:1)

ID3标签是不是存储在128字节块中的文件末尾(ID3 v1),还是存储在文件开头的块中(ID3v2.3和v2.4)? (id3.org

您可以使用Mp3Info中的audio_content方法,并从文件中读取那么多数据,但是自己查看文件并找出标题不在哪里可能并不复杂。