2013-07-23 3 views
1

Я пытаюсь написать код, который будет извлекать данные амплитуды из mp3 в зависимости от времени. Я написал грубую версию на MATLAB некоторое время назад, используя эту функцию: http://labrosa.ee.columbia.edu/matlab/mp3read.html Однако у меня возникли проблемы с поиском эквивалента Python.Чтение данных амплитуды из mp3

Я провел много исследований, и до сих пор я понял, что мне нужно использовать что-то вроде mpg321 для преобразования .mp3 в .wav. Я не мог понять, как это сделать.

Следующим шагом будет чтение данных из файла .wav, с которым я также не имел никакого успеха. Кто-нибудь сделал что-то подобное или мог бы рекомендовать некоторые библиотеки, чтобы помочь с этим? Благодаря!

ответ

1

Вы можете использовать subprocess модуль для вызова mpg123:

import subprocess 
import sys 

inname = 'foo.mp3' 
outname = 'out.wav' 
try: 
    subprocess.check_call(['mpg123', '-w', outname, inname]) 
except CalledProcessError as e: 
    print e 
    sys.exit(1) 

Для чтения файлов WAV, вы должны использовать модуль волны, как это:

import wave 
import numpy as np 

wr = wave.open('input.wav', 'r') 
sz = 44100 # Read and process 1 second at a time. 
da = np.fromstring(wr.readframes(sz), dtype=np.int16) 
wr.close() 
left, right = da[0::2], da[1::2] 

После этого left и right содержат образцы тех же каналов.

Вы можете найти более подробный пример here.

+0

Хороший код, но закройте файл! : D 'wr.close()' – tamasgal

+0

Не могли бы вы рассказать об использовании 'subprocess' для вызова' mpg123'? Благодарю. –

1

Вот проект в чистом питоне, где вы можете декодировать MP3-файл примерно в 10 раз медленнее, чем в реальном времени: http://portalfire.wordpress.com/category/pymp3/

Остальное делается математикой Фурье и т.д .:

How to analyse frequency of wave file

и имеют посмотрите на модуль питона wave:

http://docs.python.org/2/library/wave.html

1

Библиотека Pymedia кажется стабильной и имеет дело с тем, что вам нужно.

Смежные вопросы