阅读Python3中的MP3

阅读Python3中的MP3,python,audio,python-3.x,mp3,Python,Audio,Python 3.x,Mp3,我想做的只是 mp3 = read_mp3(mp3_filename) audio_left = mp3.audio_channels[0] 其中音频_左将包含原始PCM音频数据 我在看,但是大多数建议的模块还没有移植到Python3。如果可能的话,我想避免安装一个成熟的游戏开发库 我是一个完全的Python初学者,所以我想从使用Python 3开始。我最终使用mpg123子进程将mp3转换为wav,然后使用scipy.io.wavfile.read读取wav文件。我正在考虑使用FFmpeg作

我想做的只是

mp3 = read_mp3(mp3_filename)
audio_left = mp3.audio_channels[0]
其中音频_左将包含原始PCM音频数据

我在看,但是大多数建议的模块还没有移植到Python3。如果可能的话,我想避免安装一个成熟的游戏开发库


我是一个完全的Python初学者,所以我想从使用Python 3开始。

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

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


您可能还想在此处查看将FFmpeg作为Python的子进程调用的代码:

为了更方便,我使用一些工具将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,并且安装时不会出现问题(与
scikits.audiolab
相反)


注意:尽管
scipy.io.wavfile.read()
给了我一个“WavFileWarning:不熟悉的格式字节”警告,它还是正确地加载了文件。

我认为最好的方法是这样做,并且与Python 3.x兼容:

我强烈建议你看看达尔文M.鲍蒂斯塔的作品,或者:

下面是一个例子(由他提供):

支持的音频编解码器列表:

  • MPEG第1、2和3层(MP3)音频
  • AC3/A52、E-AC3、DTS(杜比数字)音频(软件或SP/DIF)
  • AAC(MPEG-4音频)
  • WMA(DivX音频)v1、v2
  • WMA 9(WMAv3)、Voxware audio、ACELP.net等(使用x86 DLL)
  • RealAudio:COOK、SIPRO、ATRAC3(使用真实库)
  • RealAudio:DNET和旧编解码器
  • QuickTime:Qclp、Q-Design QDMC/QDM2、MACE 3/6(使用QT库)、ALAC
  • Ogg Vorbis音频
  • 维梧音频(g723,维梧警报器)(使用x86 DLL)
  • alaw/ulaw,(ms)gsm、pcm、*adpcm和其他简单的旧音频格式

可以使用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)
你可以用librosa:

import librosa
y, sr = librosa.load('your_file.mp3')

更多信息:

用Python播放歌曲的代码

pip3 install python-vlc
下载PythonVLC包

代码-导入vlc

#plays the song for 10 seconds

import vlc
import time

song = 'zik.mp3'

playSong = vlc.MediaPlayer(song)
playSong.play()
time.sleep(10)
playSong.stop()

pip3安装播放声音

import playsound

song = 'path_to_the_.mp3_file'

playsound.playsound(song)

就这样

您是因为某些特殊原因才想要左声道,还是只想要音频general@Daenyth,我只想要一个单声道信号,所以如果我能有mp3.audio.toMono(),更好:)你可能想在这里看到:我删除了我的答案:我把
.mp3
误读为
.wav
。试试-librosa,一个流行的音乐和音频分析软件包。我在下面的回答中提供了一个简单的用法示例。你能给出一个解决问题的代码示例吗?也就是说,从输入文件中提取PCM数据以供进一步分析的代码?实际上,这看起来不满足“无子流程调用”要求。它只是包装了一个MPlayer进程,它查找的是
MPlayer
,我怀疑它在Windows上会非常脆弱。您的命令在我使用librosa 0.6.3时不起作用。不得不从librosa文档中执行
y,sr=librosa.load('your_file.mp3',sr=44100)
:默认情况下,librosa将信号重新采样到22050Hz。意思是
sr
参数是可选的。请注意,根据librosa的dependency SoundFile中提到的libsndfile中的错误,librosa不支持mp3文件的缓冲区内读取
import playsound

song = 'path_to_the_.mp3_file'

playsound.playsound(song)