Получить длину mp3 в Stack Overflow

Итак, у меня есть несколько (большой) список песен в виде простого текста. Я написал парсер, который создает список структур, содержащих исполнителя, название и длину песен. У меня также есть огромная папка mp3-файлов, которые соответствуют моему списку, но имеют случайное название (например, 1b942ca9231291.mp3).
Я хочу создать список длин и имен файлов из папки, чтобы я мог переименовывать файлы в соответствии с эквивалентностью длин, предлагая пользователю при возникновении коллизий.
Я хотел бы сделать все это без использования ID3-ориентированных библиотек, пожалуйста, не предлагайте их.

1

Решение

К счастью для вас, разобрать формат MP3 довольно просто. Вам не нужно декодировать его, просто посмотрите на заголовок. MP3 не имеет ни одного заголовка, как большинство файлов, вместо этого один файл разделяется на множество кадров (пакетов) со своими собственными заголовками, которые можно определить без необходимости знать их точное местоположение и с возможностью чередовать их с некоторыми другими данными. (иногда упоминается как информация о боковой полосе, обычно это теги ID3, но это может быть что угодно). Вот почему MP3 подходит для потоковой передачи музыки, поэтому любой может подключиться к середине потока и начать воспроизведение (то же самое работает, если разделить файл MP3 на две половины, первый и второй файлы будут воспроизводиться без проблем, что-то, что например, формат WAV или PNG не будет поддерживаться).

Вам нужно выяснить битрейт в kBps и подсчитать размер кадров (структур, связанных с каждым заголовком) и просто разделить их. Для файлов CBR вы можете получить разумную оценку, просто разделив весь размер файла, что намного быстрее. Это помогает игнорировать теги ID3, особенно если они содержат громоздкие изображения обложек альбомов.

Вы можете проверить мой старый проверка музыки Программа, которая декодирует заголовки MP3 и проверяет наличие повреждений. Вам понадобится старая версия (не знаю какая) этого фреймворк построить это.

2

Другие решения


По вопросам рекламы [email protected]