使用Python播放mp3格式音频(全过程讲解,简单实用易上手,这一篇就足够了!)

时间:2024-03-05 21:14:05

环境

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()

成功啦!