環境
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()
成功啦!
