網站首頁 編程語言 正文
今天我們來介紹一個好玩且實用的東西,我們使用python來實現一個錄音的功能,廢話不多說,讓我們直接開始。
安裝
使用 PIP 安裝 PvRecorder:
pip3 install pvrecorder
查找可用的麥克風
一臺計算機可以有多個麥克風, 例如,筆記本電腦有一個內置麥克風,可能還連接了一個耳機, 第一步是找到我們要錄音的麥克風。
from pvrecorder import PvRecorder
for index, device in enumerate(PvRecorder.get_audio_devices()):
print(f"[{index}] {device}")
在 Dell XPS 筆記本電腦上運行上面的代碼可以得到:
[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 ?
記下目標麥克風的索引,我們將其傳遞給 PvRecorder 的構造函數, 不確定時,可以將 -1 傳遞給構造函數以使用默認麥克風。
錄制音頻
首先,創建一個 PvRecoder 實例, 你需要提供一個 device_index(見上文)和一個 frame_length。frame_length 是你希望在每次讀取時接收的音頻樣本數, 我們將其設置為 512(16 kHz 音頻的 32 毫秒), 然后調用 .start() 開始錄制,錄制完成后,繼續循環調用 .read() 以接收音頻,調用 .stop() 停止記錄,然后調用 .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()
將音頻保存到文件
你可以使用上面的代碼片段中增加自己的邏輯做任何我們想做的事情, 無論你是要檢測喚醒詞、識別語音命令、將語音轉錄為文本、為搜索索引音頻等,還是將其保存到文件中, 比如我們要保存到文件中,可以使用下面的代碼, 這段代碼顯示了如何將音頻保存為 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
相關推薦
- 2023-04-17 Linux命令學習之用戶切換su,sudo命令詳解_linux shell
- 2022-02-28 Error: A <Route> is only ever to be used as the ch
- 2022-11-02 React循環遍歷渲染數組和對象元素方式_React
- 2022-12-02 C語言鏈表案例學習之通訊錄的實現_C 語言
- 2022-02-21 windows11安裝docker desktop
- 2023-09-12 linux的root用戶,用戶組
- 2021-11-25 Linux命令unzip詳解_Linux
- 2022-02-22 Android對話框AlertDialog詳解_Android
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支