Создать кривую громкости из mp3 - PullRequest
2 голосов
/ 13 февраля 2012

Я пытаюсь создать что-то в python, которое может анализировать загруженный mp3 и генерировать необходимые данные для построения графика формы волны. Все, что я нашел, намного сложнее, чем мне нужно. В конечном итоге я пытаюсь создать что-то похожее на SoundCloud.

Я изучал numpy и fft's, но все это кажется более сложным, чем мне нужно. Какой лучший подход к этому? Я создам реальную графику, используя canvas, так что не беспокойтесь об этой ее части, мне просто нужны данные для построения.

Ответы [ 2 ]

1 голос
/ 13 февраля 2012

Я предлагаю вам использовать Pygame, если вы не хотите разбираться с внутренней работой формата файлов mp3.

Pygame - это мультимедийная библиотека, которая может открывать распространенные форматы аудиофайлов - включая .mp3 и.ogg as "Sound" объекты - если у вас есть Numpy, вы можете просматривать несжатый (и, следовательно, после FFT-преобразования) звук, используя вызов pygame.sndarray.array - который возвращает объект массива numpy с образцами звука.

Я обнаружил небольшую хитрость - не забудьте вызвать pygame.mixer.init с теми же параметрами (для частоты, размера битовой выборки и n.of каналов), что и у вашего файла .mp3, или с вызовомsndarray.array может вызвать исключение.

Проверьте документацию по http://www.pygame.org/docs/

1 голос
/ 13 февраля 2012

Файл MP3 - это закодированная версия сигнала. Прежде чем вы сможете работать с осциллограммой, вы должны сначала декодировать данные MP3 в осциллограмму PCM. Как только у вас есть данные PCM, каждая выборка представляет амплитуду сигнала в данный момент времени. Если предположить, что декодер MP3 выводит 16-битные значения со знаком, ваши амплитуды будут в диапазоне от -16384 до +16383. Если вы нормализуете выборки путем деления каждой из них на 16384, тогда выборки формы сигнала будут в диапазоне +/- 1,0.

Проблема действительно заключается в декодировании MP3 в PCM. Насколько я знаю, нет родного Python декодера. Однако вы можете использовать LAME, вызываемый из python в качестве подпроцесса, или, немного потрудившись, связать библиотеку LAME напрямую с Python с помощью чего-то вроде SWIG. Не тривиальная задача.

Построение этих данных становится для читателя упражнением.

...