Python实现播放和录制声音的功能
Python语言已经无所不能了,今天就来分享一下,如何使用Python来录制和播放音频文件。
下面是一些可以播放和录制音频的Python第三方库:
playsound,支持MP3和WAV,目前只支持简单的回放。 simpleaudio,支持WAV,提供检查文件是否仍在播放的功能。 winsound,支持WAV,只支持windows。 python-sounddevice和pyaudio为PortAudio库提供绑定,以便跨平台回放WAV文件。 pydub,需要pyaudio来播放音频,但是安装了ffmpeg之后,它允许您使用几行代码来播放各种音频格式。一、播放音频文件
使用playsound库
1、安装
$ pip install playsound
2、使用播放音频
from playsound import playsoundplaysound(’myfile.wav’)
使用simpleaudio库
1、安装
$ pip install simpleaudio
2、使用播放音频
mport simpleaudio as safilename = ’myfile.wav’wave_obj = sa.WaveObject.from_wave_file(filename)play_obj = wave_obj.play()play_obj.wait_done() # Wait until sound has finished playing
使用winsound库
如果您使用Windows,您可以使用内置的winsound模块来访问其基本的声音播放机制。播放WAV文件可以在几行代码:
import winsoundfilename = ’myfile.wav’winsound.PlaySound(filename, winsound.SND_FILENAME)
使用python-sounddevice库
1、安装
$ pip install sounddevice
2、使用播放音频
import sounddevice as sdimport soundfile as sffilename = ’myfile.wav’# Extract data and sampling rate from filedata, fs = sf.read(filename, dtype=’float32’) sd.play(data, fs)status = sd.wait() # Wait until file is done playing
使用pydub库
1、安装
$ pip install pydub
2、使用播放音频
from pydub import AudioSegmentfrom pydub.playback import playsound = AudioSegment.from_wav(’myfile.wav’)play(sound)
默认情况下,pydub只支持播放wav格式音频。如果你想播放更多其他格式的音频文件。需要安装ffmpeg-python。
$ pip install ffmpeg-python
安装了ffmpeg后,播放MP3文件只需要在我们之前的代码中做一个小小的修改:
from pydub import AudioSegmentfrom pydub.playback import playsound = AudioSegment.from_mp3(’myfile.mp3’)play(sound)
使用pyaudio库
1、安装
$ pip install pyaudio
2、使用播放音频
import pyaudioimport wavefilename = ’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)while data != ’’: stream.write(data) data = wf.readframes(chunk)stream.close()p.terminate()
您可能已经注意到,使用pyaudio播放声音比使用前面看到的库播放声音要复杂一些。这意味着如果您只想在Python应用程序中播放声音效果,那么它可能不是您的首选。
但是,由于pyaudio提供了更低级的控制,因此可以获取和设置输入和输出设备的参数,并检查CPU负载和输入或输出延迟。
它还允许您在回调模式下播放和录制音频,在回调模式中,当需要回放新数据或记录可用数据时,将调用指定的回调函数。如果您的音频需要的不仅仅是简单的回放,那么这些选项使pyaudio成为一个合适的库。
既然您已经了解了如何使用许多不同的库来播放音频,现在就来看看如何使用Python自己录制音频。
二、录音
Python -sounddevice和pyaudio库提供了用Python录制音频的方法。
1 、使用python-sounddevice录音
import sounddevice as sdfrom scipy.io.wavfile import writefs = 44100 # Sample rateseconds = 3 # Duration of recordingmyrecording = sd.rec(int(seconds * fs), samplerate=fs, channels=2)sd.wait() # Wait until recording is finishedwrite(’output.wav’, fs, myrecording) # Save as WAV file
2、使用pyaudio录音
import pyaudioimport wavechunk = 1024 # Record in chunks of 1024 samplessample_format = pyaudio.paInt16 # 16 bits per samplechannels = 2fs = 44100 # Record at 44100 samples per secondseconds = 3filename = 'output.wav'p = pyaudio.PyAudio() # Create an interface to PortAudioprint(’Recording’)stream = p.open(format=sample_format, channels=channels, rate=fs, frames_per_buffer=chunk, input=True)frames = [] # Initialize array to store frames# Store data in chunks for 3 secondsfor i in range(0, int(fs / chunk * seconds)): data = stream.read(chunk) frames.append(data)# Stop and close the stream stream.stop_stream()stream.close()# Terminate the PortAudio interfacep.terminate()print(’Finished recording’)# Save the recorded data as a WAV filewf = 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保存音频
from pydub import AudioSegmentsound = AudioSegment.from_wav(’myfile.wav’)sound.export(’myfile.mp3’, format=’mp3’)
2、使用pydub完成格式转换
from pydub import AudioSegmentsound = AudioSegment.from_wav(’myfile.wav’)sound.export(’myfile.mp3’, format=’mp3’)
如果觉得内容还不错,分享给更多朋友,一起提升编程技能。
以上就是Python实现播放和录制声音的功能的详细内容,更多关于python 播放和录制声音的资料请关注好吧啦网其它相关文章!
相关文章:
1. 在Asp.net core项目中使用WebSocket2. 将properties文件的配置设置为整个Web应用的全局变量实现方法3. JavaScript实现组件化和模块化方法详解4. ASP.NET MVC使用异步Action的方法5. python3.8.1+selenium实现登录滑块验证功能6. 利用FastReport传递图片参数在报表上展示签名信息的实现方法7. Python制作一个随机抽奖小工具的实现8. 使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例9. SpringMVC+Jquery实现Ajax功能10. matplotlib如何设置坐标轴刻度的个数及标签的方法总结