日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

基于Python實(shí)現(xiàn)錄音功能的示例代碼_python

作者:Python數(shù)據(jù)開發(fā) ? 更新時(shí)間: 2023-04-10 編程語言

今天我們來介紹一個(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í)別語音命令、將語音轉(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()

原文鏈接:https://blog.csdn.net/m0_59596937/article/details/128909043

欄目分類
最近更新