Ответ 1
В итоге я использовал подпроцесс mpg123 для преобразования mp3 в wav, а затем я использую scipy.io.wavfile.read для чтения wav файла.
Что я хочу сделать, просто
mp3 = read_mp3(mp3_filename)
audio_left = mp3.audio_channels[0]
где audio_left будет содержать исходные аудио данные PCM.
Я смотрел Воспроизведение звука с помощью Python, но большинство предлагаемых модулей еще не переносится на Python 3. Если возможно, я бы хотел избежать установки полноценной библиотеки игр.
Я полный начинающий Python, поэтому я хотел бы начать использовать Python 3.
В итоге я использовал подпроцесс mpg123 для преобразования mp3 в wav, а затем я использую scipy.io.wavfile.read для чтения wav файла.
Чтобы было проще, я конвертировал бы с некоторыми инструментами mp3 в wav, либо:
$ ffmpeg -i foo.mp3 -vn -acodec pcm_s16le -ac 1 -ar 44100 -f wav foo.wav
or
$ mpg123 -w foo.wav foo.mp3
Затем прочитайте WAV с одной из WAV-библиотек python. Я бы рекомендовал PySoundFile, потому что он работает с большинством созданных WAV правильно и установлен без проблем (в отличие от scikits.audiolab
).
Примечание. Несмотря на то, что scipy.io.wavfile.read()
дал мне предупреждение WavFileWarning: Неизвестный формат байтов, он также правильно загрузил файл.
Я рассматриваю возможность использования FFmpeg в качестве подпроцесса. Существует оболочка Python, называемая pyffmpeg, но мне трудно установить ее в моей системе (OS X 10.7.3).
Вы также можете посмотреть здесь код для вызова FFmpeg в качестве подпроцесса из Python: https://github.com/albertz/learn-midi/blob/master/decode.py
Можно выполнить с помощью pydub:
import array
from pydub import AudioSegment
from pydub.utils import get_array_type
sound = AudioSegment.from_file(file=path_to_file)
left = sound.split_to_mono()[0]
bit_depth = left.sample_width * 8
array_type = get_array_type(bit_depth)
numeric_array = array.array(array_type, left._data)
Я считаю, что лучше всего сделать это и то, что также совместимо с Python 3.x:
https://pypi.python.org/pypi/mplayer.py/
Я очень рекомендую вам взглянуть на Дарвина М. Баутиста git или код google:
И вот пример из (как ему предоставлено):
from mplayer import Player, CmdPrefix
# Set default prefix for all Player instances
Player.cmd_prefix = CmdPrefix.PAUSING_KEEP
# Since autospawn is True by default, no need to call player.spawn() manually
player = Player()
# Play a file
player.loadfile('mp3_filename')
# Pause playback
player.pause()
# Get title from metadata
metadata = player.metadata or {}
print metadata.get('Title', '')
# Print the filename
print player.filename
# Seek +5 seconds
player.time_pos += 5
# Set to fullscreen
player.fullscreen = True
# Terminate MPlayer
player.quit()
Список поддерживаемых аудиокодеков:
Вы можете использовать librosa:
import librosa
y, sr = librosa.load('your_file.mp3')
Дополнительная информация: https://github.com/librosa/librosa