成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

Sanchi / 4057人閱讀

摘要:有的時(shí)候我們想讓樹莓派能夠錄音,以實(shí)現(xiàn)語音控制等功能。所以今天我們總結(jié)一下用在樹莓派上使用錄音的過程。準(zhǔn)備硬件樹莓派上自帶的接口只能作為語音輸出口,不能接麥克風(fēng)。

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

準(zhǔn)備硬件

樹莓派上自帶的3.5mm接口只能作為語音輸出口,不能接麥克風(fēng)。所以我們需要另外購買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自帶的錄音/播放命令,測試硬件是否正常:

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)修改。另外,錄音過程需要手動(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)沒有聲音,只有細(xì)微的雜音,但 arecord -laplay -l 列出的設(shè)備中確實(shí)有USB聲卡。那么你可以嘗試著把麥克風(fēng)接口拔出來一些,只插進(jìn)去2/3,或許能夠解決你的問題。筆者不是很明白其中的緣由,如果你有什么想法懇請(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錄音

該例程修改自官方主頁例程PyAudio。

import pyaudio
import wave
import os
import sys

CHUNK = 512
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
RECORD_SECONDS = 5
WAVE_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錄音很簡單,你還可以在GPIO口上接入一個(gè)按鈕,修改例程,實(shí)現(xiàn)按下按鈕自動(dòng)開始錄音的功能。下一步的目標(biāo)是把Python錄音和Cloud Speech API語音識(shí)別結(jié)合起來。

感謝你閱讀文章!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/44654.html

相關(guān)文章

  • 分享 | 撞壞遙控車后,有個(gè)技術(shù)大牛爸爸是種怎樣的體驗(yàn)

    摘要:在我已經(jīng)制作完成一輛可以運(yùn)行的遙控車時(shí),公司發(fā)布了一個(gè)自駕車項(xiàng)目,來展示自動(dòng)駕駛汽車的工作原理。需要注意的是,這里用的都是語言而非,其主要原因有兩個(gè)一方面,近來似乎已成為運(yùn)用機(jī)器學(xué)習(xí)技術(shù)時(shí)實(shí)際使用的語言。 最近,Mapbox 的 Android 工程師 Antonio 使用計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)技術(shù),為他的女兒 Violeta 重新制作了一臺(tái)遙控車。接下來我們看看 Antonio 是如何...

    ConardLi 評(píng)論0 收藏0
  • 樹莓安裝Docker

    摘要:因?yàn)闃漭墒羌軜?gòu)的,所以的安裝和使用也都有不同。反過來別的上的鏡像,也不能在樹莓派上運(yùn)行。有一個(gè)叫的倉庫制作了非常多樹莓派專用,可以參考下。樹莓派參考參考樹莓派安裝,最難的在于正確的選擇源和添加,才能找到版本適合的并下載。 因?yàn)闃漭墒茿RM架構(gòu)的,所以Docker的安裝和使用也都有不同。需要講的內(nèi)容比較多,這里單挑出來。 樹莓派是基于ARM架構(gòu)的,和PC不同。所以即使樹莓派上能做一些...

    Shisui 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<