Python實(shí)現(xiàn)播放和錄制聲音的功能
Python語(yǔ)言已經(jīng)無(wú)所不能了,今天就來(lái)分享一下,如何使用Python來(lái)錄制和播放音頻文件。
下面是一些可以播放和錄制音頻的Python第三方庫(kù):
- playsound,支持MP3和WAV,目前只支持簡(jiǎn)單的回放。
- simpleaudio,支持WAV,提供檢查文件是否仍在播放的功能。
- winsound,支持WAV,只支持windows。
- python-sounddevice和pyaudio為PortAudio庫(kù)提供綁定,以便跨平臺(tái)回放WAV文件。
- pydub,需要pyaudio來(lái)播放音頻,但是安裝了ffmpeg之后,它允許您使用幾行代碼來(lái)播放各種音頻格式。
一、播放音頻文件
使用playsound庫(kù)
1、安裝
$ pip install playsound
2、使用播放音頻
from playsound import playsound playsound('myfile.wav')
使用simpleaudio庫(kù)
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庫(kù)
如果您使用Windows,您可以使用內(nèi)置的winsound模塊來(lái)訪問(wèn)其基本的聲音播放機(jī)制。播放WAV文件可以在幾行代碼:
import winsound filename = 'myfile.wav' winsound.PlaySound(filename, winsound.SND_FILENAME)
使用python-sounddevice庫(kù)
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庫(kù)
1、安裝
$ pip install pydub
2、使用播放音頻
from pydub import AudioSegment from pydub.playback import play sound = AudioSegment.from_wav('myfile.wav') play(sound)
默認(rèn)情況下,pydub只支持播放wav格式音頻。如果你想播放更多其他格式的音頻文件。需要安裝ffmpeg-python。
$ pip install ffmpeg-python
安裝了ffmpeg后,播放MP3文件只需要在我們之前的代碼中做一個(gè)小小的修改:
from pydub import AudioSegment from pydub.playback import play sound = AudioSegment.from_mp3('myfile.mp3') play(sound)
使用pyaudio庫(kù)
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()
您可能已經(jīng)注意到,使用pyaudio播放聲音比使用前面看到的庫(kù)播放聲音要復(fù)雜一些。這意味著如果您只想在Python應(yīng)用程序中播放聲音效果,那么它可能不是您的首選。
但是,由于pyaudio提供了更低級(jí)的控制,因此可以獲取和設(shè)置輸入和輸出設(shè)備的參數(shù),并檢查CPU負(fù)載和輸入或輸出延遲。
它還允許您在回調(diào)模式下播放和錄制音頻,在回調(diào)模式中,當(dāng)需要回放新數(shù)據(jù)或記錄可用數(shù)據(jù)時(shí),將調(diào)用指定的回調(diào)函數(shù)。如果您的音頻需要的不僅僅是簡(jiǎn)單的回放,那么這些選項(xiàng)使pyaudio成為一個(gè)合適的庫(kù)。
既然您已經(jīng)了解了如何使用許多不同的庫(kù)來(lái)播放音頻,現(xiàn)在就來(lái)看看如何使用Python自己錄制音頻。
二、錄音
Python -sounddevice和pyaudio庫(kù)提供了用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()
三、保存和格式轉(zhuǎn)換
1、使用pydub保存音頻
from pydub import AudioSegment sound = AudioSegment.from_wav('myfile.wav') sound.export('myfile.mp3', format='mp3')
2、使用pydub完成格式轉(zhuǎn)換
from pydub import AudioSegment sound = AudioSegment.from_wav('myfile.wav') sound.export('myfile.mp3', format='mp3')
如果覺得內(nèi)容還不錯(cuò),分享給更多朋友,一起提升編程技能。
以上就是Python實(shí)現(xiàn)播放和錄制聲音的功能的詳細(xì)內(nèi)容,更多關(guān)于python 播放和錄制聲音的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- python實(shí)現(xiàn)錄制全屏和選擇區(qū)域錄屏功能
- python實(shí)現(xiàn)錄屏功能(親測(cè)好用)
- python實(shí)現(xiàn)的B站直播錄制工具
- python 偷懶技巧——使用 keyboard 錄制鍵盤事件
- Python實(shí)現(xiàn)屏幕錄制功能的代碼
- 使用Python來(lái)做一個(gè)屏幕錄制工具的操作代碼
- Python+opencv+pyaudio實(shí)現(xiàn)帶聲音屏幕錄制
- Python+OpenCV+pyQt5錄制雙目攝像頭視頻的實(shí)例
- python基于tkinter實(shí)現(xiàn)gif錄屏功能
相關(guān)文章
關(guān)于jupyter代碼自動(dòng)補(bǔ)全設(shè)置方式
這篇文章主要介紹了關(guān)于jupyter代碼自動(dòng)補(bǔ)全設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06Python的string模塊中的Template類字符串模板用法
通過(guò)string.Template我們可以為Python定制字符串的替換標(biāo)準(zhǔn),這里我們就來(lái)通過(guò)示例解析Python的string模塊中的Template類字符串模板用法:2016-06-06Pyinstaller打包.py生成.exe的方法和報(bào)錯(cuò)總結(jié)
今天小編就為大家分享一篇關(guān)于Pyinstaller打包.py生成.exe的方法和報(bào)錯(cuò)總結(jié),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-04-04python對(duì)網(wǎng)頁(yè)文本的格式化實(shí)例方法
在本篇文章里小編給大家整理是一篇關(guān)于python對(duì)網(wǎng)頁(yè)文本的格式化實(shí)例方法,有興趣的朋友們可以跟著學(xué)習(xí)參考下。2021-10-10python開發(fā)實(shí)時(shí)可視化儀表盤的示例
這篇文章主要介紹了python開發(fā)實(shí)時(shí)可視化儀表盤的示例,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-05-05Python調(diào)整PDF頁(yè)面尺寸大小的兩種方法
利用Python語(yǔ)言的高效性和靈活性,再結(jié)合Spire.PDF for Python 庫(kù)的強(qiáng)大功能,我們可以通過(guò)Python代碼輕松實(shí)現(xiàn)對(duì)PDF頁(yè)面的批量調(diào)整,在這篇文章中,我們將介紹兩種調(diào)整PDF頁(yè)面大小的方法,感興趣的朋友可以參考下2024-05-05