阅读Python 3中的MP3

And*_*son 27 python audio mp3 python-3.x

我想做的只是简单

mp3 = read_mp3(mp3_filename)
audio_left = mp3.audio_channels[0]
Run Code Online (Sandbox Code Playgroud)

其中audio_left将包含原始PCM音频数据.

我正在看Python播放声音,但大多数建议的模块还没有移植到Python 3.如果可能的话,我想避免安装一个完全成熟的游戏开发库.

我是一个完整的Python初学者,所以我想开始使用Python 3.

Nir*_*Nir 15

你可以使用 librosa:

import librosa
y, sr = librosa.load('your_file.mp3')
Run Code Online (Sandbox Code Playgroud)

更多信息:https : //github.com/librosa/librosa


Wer*_*ght 12

为了更容易,我将一些工具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
Run Code Online (Sandbox Code Playgroud)

然后使用其中一个python WAV库读取WAV.我推荐PySoundFile,因为它适用于大多数生成的WAV并且安装没有问题(相反scikits.audiolab).

注意:即使scipy.io.wavfile.read()给了我一个"WavFileWarning:Unfamiliar format bytes"警告,它也正确地加载了文件.


com*_*314 7

我正在考虑使用FFmpeg作为子进程.有一个名为pyffmpeg的Python包装器,但我在系统上安装它时遇到了困难(OS X 10.7.3).

您可能还想查看此处的代码,将FFmpeg作为Python的子进程调用:https://github.com/albertz/learn-midi/blob/master/decode.py


Guy*_*oft 7

可以用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)
Run Code Online (Sandbox Code Playgroud)


And*_*son 5

我最终使用了mpg123子进程将mp3转换为wav,然后使用scipy.io.wavfile.read读取了wav文件。