gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 18:02:04 26 4
gpt4 key购买 nike

是否有一个 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 对象时,您可以获得实际音频数据开始和结束的帧。

最佳答案

自行提取不带元数据的 mp3 文件相当容易。

ID3v1

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

ID3v2

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

标题具有以下形式

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 位表示页脚是否存在。尺寸是在没有页眉和页脚的情况下测量的。大小的每个字节始终设置最高位。所以实际的 32 位中只有 28 位表示大小。

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

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

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

关于ruby - 读取 MP3 音频数据,或计算其校验和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1939835/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com