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 playsound playsound('myfile.wav')
使用simpleaudio庫
1、安裝
$ pip install simpleaudio
2、使用播放音訊
mport simpleaudio as sa filename = '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 winsound filename = 'myfile.wav' winsound.PlaySound(filename,winsound.SND_FILENAME)
使用python-sounddevice庫
1、安裝
$ pip install sounddevice
2、使用播放音訊
import sounddevice as sd import soundfile as sf filename = 'myfile.wav' # Extract data and sampling rate from file data,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 AudioSegment from pydub.playback import play sound = AudioSegment.from_wav('myfile.wav') play(sound)
預設情況下,pydub只支援播放wav格式音訊。如果你想播放更多其他格式的音訊檔案。需要安裝ffmpeg-python。
$ pip install ffmpeg-python
安裝了ffmpeg後,播放MP3檔案只需要在我們之前的程式碼中做一個小小的修改:
from pydub import AudioSegment from pydub.playback import play sound = AudioSegment.from_mp3('myfile.mp3') play(sound)
使用pyaudio庫
1、安裝
$ pip install pyaudio
2、使用播放音訊
import pyaudio import wave 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) 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 sd from scipy.io.wavfile import write fs = 44100 # Sample rate seconds = 3 # Duration of recording myrecording = sd.rec(int(seconds * fs),samplerate=fs,channels=2) sd.wait() # Wait until recording is finished write('output.wav',fs,myrecording) # Save as WAV file
2、使用pyaudio錄音
import pyaudio import wave chunk = 1024 # Record in chunks of 1024 samples sample_format = pyaudio.paInt16 # 16 bits per sample channels = 2 fs = 44100 # Record at 44100 samples per second seconds = 3 filename = "output.wav" p = pyaudio.PyAudio() # Create an interface to PortAudio print('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 seconds for 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 interface p.terminate() print('Finished recording') # Save the recorded data as a WAV file 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儲存音訊
from pydub import AudioSegment sound = AudioSegment.from_wav('myfile.wav') sound.export('myfile.mp3',format='mp3')
2、使用pydub完成格式轉換
from pydub import AudioSegment sound = AudioSegment.from_wav('myfile.wav') sound.export('myfile.mp3',format='mp3')
如果覺得內容還不錯,分享給更多朋友,一起提升程式設計技能。
以上就是Python實現播放和錄製聲音的功能的詳細內容,更多關於python 播放和錄製聲音的資料請關注我們其它相關文章!