基于Python實(shí)現(xiàn)錄音功能的示例代碼
今天我們來(lái)介紹一個(gè)好玩且實(shí)用的東西,我們使用python來(lái)實(shí)現(xiàn)一個(gè)錄音的功能,廢話不多說(shuō),讓我們直接開始。
安裝
使用 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(見(jiàn)上文)和一個(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()
將音頻保存到文件
你可以使用上面的代碼片段中增加自己的邏輯做任何我們想做的事情, 無(wú)論你是要檢測(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 Sanic框架實(shí)現(xiàn)文件上傳功能
Sanic是一個(gè)Python 3.5+的異步Web框架,它的設(shè)計(jì)理念與Flask相似,但采用了更高效的異步I/O處理,在處理文件上傳時(shí),Sanic同樣提供了方便、高效的方法,本教程將結(jié)合實(shí)際案例,詳細(xì)介紹如何在Sanic框架中實(shí)現(xiàn)文件上傳的功能,需要的朋友可以參考下2024-08-08
python+opencv實(shí)現(xiàn)的簡(jiǎn)單人臉識(shí)別代碼示例
這篇文章主要介紹了圖像識(shí)別 python+opencv的簡(jiǎn)單人臉識(shí)別,具有一定參考價(jià)值,需要的朋友可以參考下。2017-11-11
python基于itchat實(shí)現(xiàn)微信群消息同步機(jī)器人
本篇文章主要介紹了python基于itchat實(shí)現(xiàn)微信群消息同步機(jī)器人,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02
Python中使用OpenCV庫(kù)來(lái)進(jìn)行簡(jiǎn)單的氣象學(xué)遙感影像計(jì)算
這篇文章主要介紹了Python中使用OpenCV庫(kù)來(lái)進(jìn)行簡(jiǎn)單的氣象學(xué)圖像計(jì)算的例子,文中是用來(lái)進(jìn)行光譜輻射定標(biāo)、大氣校正和計(jì)算反射率,需要的朋友可以參考下2016-02-02
深入淺析Python中l(wèi)ist的復(fù)制及深拷貝與淺拷貝
這篇文章主要介紹了Python中l(wèi)ist的復(fù)制及深拷貝與淺拷貝及區(qū)別解析 ,需要的朋友可以參考下2018-09-09
淺談Python peewee 使用經(jīng)驗(yàn)
這篇文章主要介紹了淺談Python peewee 使用經(jīng)驗(yàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10
python可視化數(shù)據(jù)分析pyecharts初步嘗試
這篇文章主要為大家介紹了python可視化數(shù)據(jù)分析pyecharts初步嘗試,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04
Python手繪可視化工具cutecharts使用實(shí)例
這篇文章主要介紹了Python手繪可視化工具cutecharts使用實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
python畫一個(gè)圣誕樹實(shí)現(xiàn)示例
這篇文章主要為大家介紹了使用python畫一個(gè)圣誕樹實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05

