CSDN廣告郵件太多了,郵箱已經(jīng)屏蔽了CSDN,留言請轉(zhuǎn)SegmentFault:https://segmentfault.com/a/1190000013854294 有的時候我們想讓樹莓派能夠錄音,以實現(xiàn)語音控制等功能。所以今天我們總結(jié)一下用在樹莓派上使用Python錄音的過程。 準(zhǔn)備硬件樹莓派上自帶的3.5mm接口只能作為語音輸出口,不能接麥克風(fēng)。所以我們需要另外購買USB聲卡,某寶上5元左右就能買到,當(dāng)然你還需要一個麥克風(fēng)。總費用應(yīng)該在20元以內(nèi)。 檢查硬件是否正常使用arecord -l可以列出所有錄音設(shè)備,一般輸出如下: arecord -l
同樣地,aplay -l可以列出所有播放設(shè)備,輸出中也能找到形如 我們可以直接在命令行執(zhí)行Linux自帶的錄音/播放命令,測試硬件是否正常: arecord -D hw:1,0 -t wav -c 1 -r 44100 -f S16_LE test.wav aplay -D hw:0,0 test.wav
*****如果你發(fā)現(xiàn)錄制的音頻內(nèi)沒有聲音,只有細(xì)微的雜音,但 安裝pyaudio在Python中執(zhí)行錄音命令需要pyaudio模塊,直接用pip命令安裝: pip install pyaudio 如果你使用pip命令下載速度很慢,或許修改pip源可以幫到你。 *****如果你使用了virtualenv,一般會發(fā)現(xiàn)pyaudio安裝失敗。這種情況下你需要安裝APT中的PortAudio開發(fā)頭文件,然后安裝PyAudio: sudo apt-get install portaudio19-dev pip install pyaudio 使用Python錄音該例程修改自官方主頁例程PyAudio。 import pyaudioimport waveimport osimport sys CHUNK = 512FORMAT = pyaudio.paInt16 CHANNELS = 1RATE = 44100RECORD_SECONDS = 5WAVE_OUTPUT_FILENAME = 'output.wav'p = pyaudio.PyAudio()stream = p.open(format=FORMAT,channels=CHANNELS,rate=RATE,input=True,frames_per_buffer=CHUNK)print('recording...')frames = []for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):data = stream.read(CHUNK)frames.append(data)print('done')stream.stop_stream()stream.close()p.terminate()wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')wf.setnchannels(CHANNELS)wf.setsampwidth(p.get_sample_size(FORMAT))wf.setframerate(RATE)wf.writeframes(b''.join(frames))wf.close() 執(zhí)行后會錄制一段5秒的音頻,輸出為同目錄下的output.wav文件。 python3 rec.py * 隱藏錯誤消息一般情況下,在樹莓派上執(zhí)行上述Python代碼后,你會看到非常多的ALSA報錯和JACK報錯:
但你會發(fā)現(xiàn)其實能夠正常地錄音。如果你不想看到這些錯誤消息,可以在代碼中加入下述命令隱藏錯誤: os.close(sys.stderr.fileno()) 小結(jié)使用Python錄音很簡單,你還可以在GPIO口上接入一個按鈕,修改例程,實現(xiàn)按下按鈕自動開始錄音的功能。下一步的目標(biāo)是把Python錄音和Cloud Speech API語音識別結(jié)合起來。 感謝你閱讀文章! |
|