Python实现播放和录制声音的功能
Python语言已经无所不能了,今天就来分享一下,如何使用Python来录制和播放音频文件。
下面是一些可以播放和录制音频的Python第三方库:
- playsound,支持MP3和WAV,目前只支持简单的回放。
- simpleaudio,支持WAV,提供检查文件是否仍在播放的功能。
- winsound,支持WAV,只支持windows。
- python-sounddevice和pyaudio为PortAudio库提供绑定,以便跨平台回放WAV文件。
- pydub,需要pyaudio来播放音频,但是安装了ffmpeg之后,它允许您使用几行代码来播放各种音频格式。
一、播放音频文件
使用playsound库
1、安装
$pipinstallplaysound
2、使用播放音频
fromplaysoundimportplaysound
playsound('myfile.wav')
使用simpleaudio库
1、安装
$pipinstallsimpleaudio
2、使用播放音频
mportsimpleaudioassa filename='myfile.wav' wave_obj=sa.WaveObject.from_wave_file(filename) play_obj=wave_obj.play() play_obj.wait_done()#Waituntilsoundhasfinishedplaying
使用winsound库
如果您使用Windows,您可以使用内置的winsound模块来访问其基本的声音播放机制。播放WAV文件可以在几行代码:
importwinsound filename='myfile.wav' winsound.PlaySound(filename,winsound.SND_FILENAME)
使用python-sounddevice库
1、安装
$pipinstallsounddevice
2、使用播放音频
importsounddeviceassd importsoundfileassf filename='myfile.wav' #Extractdataandsamplingratefromfile data,fs=sf.read(filename,dtype='float32') sd.play(data,fs) status=sd.wait()#Waituntilfileisdoneplaying
使用pydub库
1、安装
$pipinstallpydub
2、使用播放音频
frompydubimportAudioSegment
frompydub.playbackimportplay
sound=AudioSegment.from_wav('myfile.wav')
play(sound)
默认情况下,pydub只支持播放wav格式音频。如果你想播放更多其他格式的音频文件。需要安装ffmpeg-python。
$pipinstallffmpeg-python
安装了ffmpeg后,播放MP3文件只需要在我们之前的代码中做一个小小的修改:
frompydubimportAudioSegment
frompydub.playbackimportplay
sound=AudioSegment.from_mp3('myfile.mp3')
play(sound)
使用pyaudio库
1、安装
$pipinstallpyaudio
2、使用播放音频
importpyaudio importwave filename='myfile.wav' chunk=1024 wf=wave.open(filename,'rb') p=pyaudio.PyAudio() stream=p.open(format=p.get_format_from_width(wf.getsampwidth()), channels=wf.getnchannels(), rate=wf.getframerate(), output=True) data=wf.readframes(chunk) whiledata!='': stream.write(data) data=wf.readframes(chunk) stream.close() p.terminate()
您可能已经注意到,使用pyaudio播放声音比使用前面看到的库播放声音要复杂一些。这意味着如果您只想在Python应用程序中播放声音效果,那么它可能不是您的首选。
但是,由于pyaudio提供了更低级的控制,因此可以获取和设置输入和输出设备的参数,并检查CPU负载和输入或输出延迟。
它还允许您在回调模式下播放和录制音频,在回调模式中,当需要回放新数据或记录可用数据时,将调用指定的回调函数。如果您的音频需要的不仅仅是简单的回放,那么这些选项使pyaudio成为一个合适的库。
既然您已经了解了如何使用许多不同的库来播放音频,现在就来看看如何使用Python自己录制音频。
二、录音
Python-sounddevice和pyaudio库提供了用Python录制音频的方法。
1、使用python-sounddevice录音
importsounddeviceassd
fromscipy.io.wavfileimportwrite
fs=44100#Samplerate
seconds=3#Durationofrecording
myrecording=sd.rec(int(seconds*fs),samplerate=fs,channels=2)
sd.wait()#Waituntilrecordingisfinished
write('output.wav',fs,myrecording)#SaveasWAVfile
2、使用pyaudio录音
importpyaudio
importwave
chunk=1024#Recordinchunksof1024samples
sample_format=pyaudio.paInt16#16bitspersample
channels=2
fs=44100#Recordat44100samplespersecond
seconds=3
filename="output.wav"
p=pyaudio.PyAudio()#CreateaninterfacetoPortAudio
print('Recording')
stream=p.open(format=sample_format,
channels=channels,
rate=fs,
frames_per_buffer=chunk,
input=True)
frames=[]#Initializearraytostoreframes
#Storedatainchunksfor3seconds
foriinrange(0,int(fs/chunk*seconds)):
data=stream.read(chunk)
frames.append(data)
#Stopandclosethestream
stream.stop_stream()
stream.close()
#TerminatethePortAudiointerface
p.terminate()
print('Finishedrecording')
#SavetherecordeddataasaWAVfile
wf=wave.open(filename,'wb')
wf.setnchannels(channels)
wf.setsampwidth(p.get_sample_size(sample_format))
wf.setframerate(fs)
wf.writeframes(b''.join(frames))
wf.close()
三、保存和格式转换
1、使用pydub保存音频
frompydubimportAudioSegment
sound=AudioSegment.from_wav('myfile.wav')
sound.export('myfile.mp3',format='mp3')
2、使用pydub完成格式转换
frompydubimportAudioSegment
sound=AudioSegment.from_wav('myfile.wav')
sound.export('myfile.mp3',format='mp3')
如果觉得内容还不错,分享给更多朋友,一起提升编程技能。
以上就是Python实现播放和录制声音的功能的详细内容,更多关于python播放和录制声音的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。