环境
Pycharm,Python3.x,pydub库(带介绍),ffmpeg(带介绍),simpleaudio库(带介绍)
探索之路(可略过)
一开始选的是用PyAudio,安装还要借用wheel,极其麻烦!
看PyAudio的说明文件看的也是一头雾水
这个是我首先经过PyAudio的说明文件改过来的
1 import pyaudio 2 import wave 3 from demo import pubdat 4 5 loadchunk=1024 6 wf=wave.open(pubdat.musicpath,"rb") 7 p=pyaudio.PyAudio() 8 stream = p.open(format=p.get_format_from_width(wf.getsampwidth()), 9 channels=wf.getnchannels(), 10 rate=wf.getframerate(), 11 output=True) 12 data = wf.readframes(loadchunk) 13 datas = [] 14 while len(data) > 0: 15 data = wf.readframes(loadchunk) 16 datas.append(data) 17 for d in range(len(datas)): 18 stream.write(d) 19 stream.stop_stream() 20 stream.close() 21 p.terminate()
运行的时候会有这样的错误提示:
百度上找,发现好像是说这个wave(甚至python大多数的库)只支持.wav格式的文件
但是我要播放的是.mp3格式的怎么办呢
唔。。。好像用PyAudio行不通啊。。。
之前也尝试过像playsound这样的方法,但是会出现这样的错误,不知道为什么,如果有大佬知道请教教我!
解决方案
因为这个wave(甚至python大多数的库)只支持.wav格式的文件,所以试着去搜了一下.wav转.mp3的代码,却意外地发现了一个pydub库(依赖于ffmpeg)(对音视频进行处理),有超级强大的功能,不仅支持.mp3转.wav,还支持各种格式的音视频互转!(参看这个的第二条,ffmpeg下载看这篇的中间下载及安装方法)
.wav转.mp3代码:
from pydub import AudioSegment #这里filepath填的是.mp3文件的名字(也可加上路径) def trans_mp3_to_wav(filepath): song = AudioSegment.from_mp3(filepath) song.export("now.wav", format="wav")
就这么简单!在项目文件夹里就出现了我们期盼已久的转换后的.wav文件!(音质也还不错,速度挺快的)
哇塞,我狂喜!!!
更贴心的是,在pydub官方的说明文件中(中文版的翻译看这里)很直接地这样推荐了一个简单又强大的库simpleaudio(真正用来播放的):
最简单的播放功能:
import simpleaudio as sa wave_obj = sa.WaveObject.from_wave_file(path_to_file) play_obj = wave_obj.play() play_obj.wait_done()
运行成功!
这。。。这拼在一起不就全了吗??就这么做到了啊!
完整代码(其实挺短的):
from pydub import AudioSegment import simpleaudio as sa def trans_mp3_to_wav(filepath): song = AudioSegment.from_mp3(filepath) song.export("此处填wav文件名称及路径", format="wav") trans_mp3_to_wav("原mp3文件名称及路径") wave_obj = sa.WaveObject.from_wave_file("此处填wav文件名称及路径") play_obj = wave_obj.play() play_obj.wait_done()
成功啦!