基于Python實(shí)現(xiàn)錄音功能的示例代碼
今天我們來介紹一個(gè)好玩且實(shí)用的東西,我們使用python來實(shí)現(xiàn)一個(gè)錄音的功能,廢話不多說,讓我們直接開始。
安裝
使用 PIP 安裝 PvRecorder:
pip3 install pvrecorder
查找可用的麥克風(fēng)
一臺(tái)計(jì)算機(jī)可以有多個(gè)麥克風(fēng), 例如,筆記本電腦有一個(gè)內(nèi)置麥克風(fēng),可能還連接了一個(gè)耳機(jī), 第一步是找到我們要錄音的麥克風(fēng)。
from pvrecorder import PvRecorder
for index, device in enumerate(PvRecorder.get_audio_devices()):
print(f"[{index}] {device}")
在 Dell XPS 筆記本電腦上運(yùn)行上面的代碼可以得到:
[0] Monitor of sof-hda-dsp HDMI3/DP3 Output
[1] Monitor of sof-hda-dsp HDMI2/DP2 Output
[2] Monitor of sof-hda-dsp HDMI1/DP1 Output
[3] Monitor of sof-hda-dsp Speaker + Headphones
[4] sof-hda-dsp Headset Mono Microphone + Headphones Stereo Microphone
[5] sof-hda-dsp Digital Microphone
記下目標(biāo)麥克風(fēng)的索引,我們將其傳遞給 PvRecorder 的構(gòu)造函數(shù), 不確定時(shí),可以將 -1 傳遞給構(gòu)造函數(shù)以使用默認(rèn)麥克風(fēng)。
錄制音頻
首先,創(chuàng)建一個(gè) PvRecoder 實(shí)例, 你需要提供一個(gè) device_index(見上文)和一個(gè) frame_length。frame_length 是你希望在每次讀取時(shí)接收的音頻樣本數(shù), 我們將其設(shè)置為 512(16 kHz 音頻的 32 毫秒), 然后調(diào)用 .start() 開始錄制,錄制完成后,繼續(xù)循環(huán)調(diào)用 .read() 以接收音頻,調(diào)用 .stop() 停止記錄,然后調(diào)用 .delete() 以在完成后釋放資源。
recorder = PvRecorder(device_index=-1, frame_length=512)
try:
recorder.start()
while True:
frame = recorder.read()
# Do something ...
except KeyboardInterrupt:
recorder.stop()
finally:
recorder.delete()
將音頻保存到文件
你可以使用上面的代碼片段中增加自己的邏輯做任何我們想做的事情, 無論你是要檢測(cè)喚醒詞、識(shí)別語(yǔ)音命令、將語(yǔ)音轉(zhuǎn)錄為文本、為搜索索引音頻等,還是將其保存到文件中, 比如我們要保存到文件中,可以使用下面的代碼, 這段代碼顯示了如何將音頻保存為 WAVE 文件格式。
from pvrecorder import PvRecorder
import wave
import struct
recorder = PvRecorder(device_index=-1, frame_length=512)
audio = []
try:
recorder.start()
while True:
frame = recorder.read()
audio.extend(frame)
except KeyboardInterrupt:
recorder.stop()
with wave.open('audiotest', 'w') as f:
f.setparams((1, 2, 16000, 512, "NONE", "NONE"))
f.writeframes(struct.pack("h" * len(audio), *audio))
finally:
recorder.delete()
到此這篇關(guān)于基于Python實(shí)現(xiàn)錄音功能的示例代碼的文章就介紹到這了,更多相關(guān)Python錄音內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python 中如何實(shí)現(xiàn)參數(shù)化測(cè)試的方法示例
這篇文章主要介紹了Python 中如何實(shí)現(xiàn)參數(shù)化測(cè)試的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
pandas 實(shí)現(xiàn)將重復(fù)表格去重,并重新轉(zhuǎn)換為表格的方法
下面小編就為大家分享一篇pandas 實(shí)現(xiàn)將重復(fù)表格去重,并重新轉(zhuǎn)換為表格的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-04-04
python使用scapy掃描內(nèi)網(wǎng)IP或端口的方法實(shí)現(xiàn)
Scapy是一個(gè)Python程序,使用戶能夠發(fā)送,嗅探和剖析并偽造網(wǎng)絡(luò)數(shù)據(jù)包,本文主要介紹了python使用scapy掃描內(nèi)網(wǎng)IP或端口的方法實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10
Python利用字典和列表實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Python如何利用字典和列表實(shí)現(xiàn)一個(gè)簡(jiǎn)易的學(xué)生信息管理系統(tǒng),文中詳細(xì)注釋,方便理解,需要的可以參考一下2022-06-06
python實(shí)現(xiàn)對(duì)doc,txt,xls文檔的讀寫操作
這篇文章主要介紹了python實(shí)現(xiàn)對(duì)doc,txt,xls文檔的讀寫操作,正如標(biāo)題所見,文章包括三個(gè)部分python實(shí)現(xiàn)對(duì)doc文檔的讀取、python實(shí)現(xiàn)對(duì)txt文檔的讀取和python實(shí)現(xiàn)對(duì)xls表格的讀取,需要的朋友可以參考一下2022-04-04
使用python向MongoDB插入時(shí)間字段的操作
這篇文章主要介紹了使用python向MongoDB插入時(shí)間字段的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05
使用Python的Turtle繪制哆啦A夢(mèng)實(shí)例
今天小編就為大家分享一篇使用Python的Turtle繪制哆啦A夢(mèng)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-11-11
python獲取命令行輸入?yún)?shù)列表的實(shí)例代碼
今天小編就為大家分享一篇python獲取命令行輸入?yún)?shù)列表的實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-06-06

