小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

樹莓派學(xué)習(xí)手記——使用Python錄音

 xvdo 2021-11-12

CSDN廣告郵件太多了,郵箱已經(jīng)屏蔽了CSDN,留言請(qǐng)轉(zhuǎn)SegmentFault:https://segmentfault.com/a/1190000013854294

有的時(shí)候我們想讓樹莓派能夠錄音,以實(shí)現(xiàn)語(yǔ)音控制等功能。所以今天我們總結(jié)一下用在樹莓派上使用Python錄音的過(guò)程。

準(zhǔn)備硬件

樹莓派上自帶的3.5mm接口只能作為語(yǔ)音輸出口,不能接麥克風(fēng)。所以我們需要另外購(gòu)買USB聲卡,某寶上5元左右就能買到,當(dāng)然你還需要一個(gè)麥克風(fēng)??傎M(fèi)用應(yīng)該在20元以內(nèi)。

檢查硬件是否正常

使用arecord -l可以列出所有錄音設(shè)備,一般輸出如下:

arecord -l

**** List of CAPTURE Hardware Devices ****
card 1: Device [USB Audio Device], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0

同樣地,aplay -l可以列出所有播放設(shè)備,輸出中也能找到形如 Device [USB Audio Device] 的設(shè)備。

我們可以直接在命令行執(zhí)行Linux自帶的錄音/播放命令,測(cè)試硬件是否正常:

arecord -D hw:1,0 -t wav -c 1 -r 44100 -f S16_LE test.wav
aplay -D hw:0,0 test.wav

arecord 是錄音命令,其中 hw:1,0 表示 card 1: Device [USB Audio Device], device 0: USB Audio [USB Audio]card 1 , device 0 ,如果你的USB聲卡錄音設(shè)備不是 card 1 , device 0 ,還請(qǐng)進(jìn)行相應(yīng)修改。另外,錄音過(guò)程需要手動(dòng)按 ctrl + c 結(jié)束。

aplay 是播放命令,其中 hw:0,0 表示樹莓派板載音頻接口,如果你把耳機(jī)插在USB聲卡接口,還請(qǐng)進(jìn)行相應(yīng)修改,如改成 hw:1,0 。

*****如果你發(fā)現(xiàn)錄制的音頻內(nèi)沒(méi)有聲音,只有細(xì)微的雜音,但 arecord -laplay -l 列出的設(shè)備中確實(shí)有USB聲卡。那么你可以嘗試著把麥克風(fēng)接口拔出來(lái)一些,只插進(jìn)去2/3,或許能夠解決你的問(wèn)題。筆者不是很明白其中的緣由,如果你有什么想法懇請(qǐng)留言告知。

安裝pyaudio

在Python中執(zhí)行錄音命令需要pyaudio模塊,直接用pip命令安裝:

pip install pyaudio

如果你使用pip命令下載速度很慢,或許修改pip源可以幫到你。

*****如果你使用了virtualenv,一般會(huì)發(fā)現(xiàn)pyaudio安裝失敗。這種情況下你需要安裝APT中的PortAudio開發(fā)頭文件,然后安裝PyAudio:

sudo apt-get install portaudio19-dev
pip install pyaudio

使用Python錄音

該例程修改自官方主頁(yè)例程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í)行后會(huì)錄制一段5秒的音頻,輸出為同目錄下的output.wav文件。

python3 rec.py

* 隱藏錯(cuò)誤消息

一般情況下,在樹莓派上執(zhí)行上述Python代碼后,你會(huì)看到非常多的ALSA報(bào)錯(cuò)和JACK報(bào)錯(cuò):

ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition 'cards.bcm2835.pcm.front.0:CARD=0’

connect(2) call to /tmp/jack-1000/default/jack_0 failed (err=No such file or directory)
attempt to connect to server failed

但你會(huì)發(fā)現(xiàn)其實(shí)能夠正常地錄音。如果你不想看到這些錯(cuò)誤消息,可以在代碼中加入下述命令隱藏錯(cuò)誤:

os.close(sys.stderr.fileno())

小結(jié)

使用Python錄音很簡(jiǎn)單,你還可以在GPIO口上接入一個(gè)按鈕,修改例程,實(shí)現(xiàn)按下按鈕自動(dòng)開始錄音的功能。下一步的目標(biāo)是把Python錄音和Cloud Speech API語(yǔ)音識(shí)別結(jié)合起來(lái)。

感謝你閱讀文章!

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多