網(wǎng)站首頁 編程語言 正文
今天我們來介紹一個(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
相關(guān)推薦
- 2022-11-15 C++構(gòu)造析構(gòu)賦值運(yùn)算函數(shù)應(yīng)用詳解_C 語言
- 2022-01-15 cURL error 60: SSL certificate problem: unable to
- 2022-05-02 Numpy中創(chuàng)建數(shù)組的9種方式小結(jié)_python
- 2022-11-23 Golang?官方依賴注入工具wire示例詳解_Golang
- 2022-04-17 <el-dropdown>按鈕點(diǎn)擊出來下拉菜單,點(diǎn)擊下拉菜單觸發(fā)事件
- 2022-11-08 go按行讀取文件的三種實(shí)現(xiàn)方式匯總_Golang
- 2023-03-29 基于WPF實(shí)現(xiàn)多選下拉控件的示例代碼_C#教程
- 2022-09-27 React?Native?中限制導(dǎo)入某些組件和模塊的方法_React
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支