安裝庫
安裝 ALSA 的錄音應用軟體
sudo apt-get -y install alsa-utils pulseaudio
lsusb
指令檢視一下USB裝置:
(2)通過[sudo apt-get update]進行源更新。(無外網時可以跳過,如果後面指令執行時出現問題,請傳回此步并執行此步和(3)步)
(3)通過[sudo apt-get upgrade]進行包更新。(無外網時可以跳過)
(4)通過[sudo modprobe snd_bcm2835]載入聲霸卡驅動。
(5)通過[arecord -d 10 -D plughw:1,0 test.wav]進行錄音測試。(預設儲存在/home/test.wav)(指令說明:arecord -d 錄制時間(s)-D 裝置 名稱)
USB聲霸卡的使用
arecord -l
可以列出所有錄音裝置
直接執行Linux自帶的錄音指令,錄制一段5秒的聲音進行測試
arecord -D "plughw:1,0" -f S16_LE -r 16000 -d 5 -t wav test.wav
其中
hw:1,0
表示
card 1 , device 0
,即我們的USB聲霸卡,arecord 其他的參數如下:
如果聲音過小,輸入指令
alsamixer
,來對音量進行調整,按下
F6
,選擇USB聲霸卡,
alsamixer
選擇F6
然後按下
F5
,将錄音和播音裝置都展示出來,因為我的USB聲霸卡隻支援錄音,是以播音的音量無法調整,我們将錄音的音量按上鍵調高
注意這個聲音最好調成0,不然會有嚴重的電流刺啦聲音
然後使用
aplay
指令來播放,也可以輕按兩下使用樹莓派自帶的媒體軟體播放。
aplay -D "plughw:0,0" test.wav
如果錄音有問題,可能是缺少一些錄音軟體
sudo apt-get install alsa-utils ulseaudio
語音播放
樹莓派支援 3.5mm 接口音頻輸出和 HDMI 音頻輸出,可以通過 config 界面來進行配置
如下圖所示,輸入
sudo raspi-config
聲音輸出模式配置
(1)選擇進入第 7 項 - Advanced Options
(2)選擇 Audio,單擊回車
配置聲音輸出模式
0 - 自動選擇
1 - 3.5mm 音頻接口輸出
2 - HDMI 輸出,這種方式一般是在顯示器有喇叭的情況下,使用顯示器自帶的喇叭播放音頻
選擇播放模式後,使用 TAB 鍵切換到 OK,然後單擊回車确認,就完成了音頻輸出模式配置
退出配置界面後,SSH終端會顯示模式配置成功
插上耳機到輸出孔,看是否有聲音,沒有的話,把輸出改成3.5mm
測試例程
'''
功能:
1錄音儲存wmv
2上傳百度語音識别傳回結果
'''
#樹莓派4B 使用USB免驅動麥克風儲存錄音
import json
import subprocess
vioce_path="voice.wav"
def getvoice(vioce_path):
print('開始語音輸入,5秒内說出目标點 紅色 綠色 藍色,之後保持安靜!')
#arecord -l可以列出所有錄音裝置 檢視闆卡号和驅動号
#vioce_path="voice.wav"
Audio_drivce="plughw:2,0"#USB面驅動麥克風 闆卡2 驅動0
vioce_time="5" #錄制5秒語音
msg="arecord -D "+Audio_drivce+" -f S16_LE -r 16000 -d "+vioce_time+" -t wav "+vioce_path
result=subprocess.call(msg, shell=True)#執行 同級目錄儲存檔案
#print("錄音結束")
#getvoice()
from aip import AipSpeech
def usevoice(vioce_path):
print('開始語音識别,請等待。。。')
""" 修改成你的百度 APPID AK SK """
APP_ID = '23159731'
API_KEY = 'DIQ9g1OKcI4dIyU0xeFoTyK3'
SECRET_KEY = 'P9zittbiFGpkmGsMMqGd74tbyG3bcOhp'
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
# 讀取檔案
def get_file_content(file_path):
with open(file_path, 'rb') as fp:
return fp.read()
vioce_file=get_file_content(vioce_path)
'''
1536 國語(支援簡單的英文識别) 無标點
1537 國語(純中文識别) 有标點
1737 英語 有标點
'''
# 識别本地檔案
Recresult = client.asr(vioce_file, 'wav', 16000, {
'dev_pid': 1537, # 預設1537(國語 輸入法模型),dev_pid參數見本節開頭的表格
})
jsonRec=json.loads(json.dumps(Recresult))
#print(jsonRec)
#for i in jsonRec:
# print(i)
VoiceRuselt=jsonRec["result"][0]
print("識别結果為: "+VoiceRuselt)
if VoiceRuselt=="紅色。": #傳回結果預設加了句号
print('到達紅色區域停止')
return "red"
elif VoiceRuselt=="藍色。":
print('到達藍色區域停止')
return "blue"
elif VoiceRuselt=="綠色。":
print('到達綠色區域停止')
return "green"
else:
print('沒有比對結果,請重新識别')
return "black"
'''
#1錄音 5秒
getvoice(vioce_path)
#2對錄音結果識别 vioceresult儲存結果
vioceresult=usevoice(vioce_path)
print(vioceresult)
'''
三、PyAudio安裝即配置
如果需要使用python程式控制錄音
安裝
pip install pyaudio
pip install tqdm
sudo apt-get install libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0 pulseaudio
sudo apt-get install libatlas-base-dev alsa-utils alsa-tools alsa-tools-gui alsamixergui -y