Чтение аудиоданных MP3 или вычисление их контрольной суммы - PullRequest
1 голос
/ 21 декабря 2009

Существует ли библиотека 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 ]

3 голосов
/ 21 декабря 2009

Извлечение 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 голос
/ 21 декабря 2009

Не хранится ли тег ID3 в конце файла (ID3 v1) в 128-байтовом блоке или в блоке в начале файла (ID3v2.3 и v2.4)? ( id3.org )

Вы можете использовать метод audio_content из Mp3Info и прочитать столько данных из файла, хотя, вероятно, не намного сложнее самостоятельно посмотреть в файле и разобраться, где нет заголовков.

...