用樹莓派實現會說話的湯姆貓
會說話的湯姆貓很多人都玩過,對著它說話,它就會用貓的音調重複你說的話。這篇文章就是介紹如何使用樹莓派來實現這個功能。
測試裝置:
樹莓派3B+
ReSpeaker 2-Mics Pi HAT(USB的麥克風應該也可以)
耳機/音箱(需要帶插頭的)
1、ReSpeaker硬體安裝
ReSpeaker是直接扣在樹莓派上的,將樹莓派的針腳全部插入到ReSpeaker中。
2、ReSpeaker驅動安裝
通過SSH連線到樹莓派後,首先更新包源,然後安裝git,下一步會使用git下載程式碼:
sudo apt-get update sudo apt-get upgrade sudo apt-get install git
從github獲取麥克風驅動原始碼:
git clone https://github.com/respeaker/seeed-voicecard.git
進入原始碼目錄,安裝驅動:
cd seeed-voicecard sudo ./install.sh reboot
安裝成功後需要重啟,然後分別執行aplay -l和arecord -l列出所有的聲音播放裝置和聲音錄製裝置:
pi@raspberrypi:~ $ aplay -l **** List of PLAYBACK Hardware Devices **** card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA] Subdevices: 7/7 Subdevice #0: subdevice #0 Subdevice #1: subdevice #1 Subdevice #2: subdevice #2 Subdevice #3: subdevice #3 Subdevice #4: subdevice #4 Subdevice #5: subdevice #5 Subdevice #6: subdevice #6 card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI] Subdevices: 1/1 Subdevice #0: subdevice #0 card 1: seeed2micvoicec [seeed-2mic-voicecard], device 0: bcm2835-i2s-wm8960-hifi wm8960-hifi-0 [] Subdevices: 1/1 Subdevice #0: subdevice #0 pi@raspberrypi:~ $ arecord -l **** List of CAPTURE Hardware Devices **** card 1: seeed2micvoicec [seeed-2mic-voicecard], device 0: bcm2835-i2s-wm8960-hifi wm8960-hifi-0 [] Subdevices: 1/1 Subdevice #0: subdevice #0
如果都看到了card 1: seeed2micvoicec,則說明安裝成功。
3、ReSpeaker驅動安裝問題
如果安裝成功請跳過這一步。
我這裡第一次安裝沒有成功,報了一個錯誤:
Error! echo Your kernel headers for kernel 4.14.50-v7+ cannot be found at /lib/modules/4.14.50-v7+/build or /lib/modules/4.14.50-v7+/source.
大概意思是說找不到linux核心的標頭檔案,這個去目錄下找確實沒有,可能是由於官方映象升級核心時遺漏了些東西,最終按照這篇文章解決了:https://github.com/respeaker/seeed-voicecard/issues/83
大概步驟是:
(1)升級系統核心(如果沒安裝rpi-update,則需要先安裝):
sudo rpi-update
安裝成功後重啟。
(2)更新linux headers(如果沒安裝rpi-source,則需要先安裝):
sudo rpi-source --skip-gcc
(3)刪除老版本的linux headers:
刪除/lib/modules/資料夾下的老版本,比如我這裡安裝的最新版本是: 4.14.54-v7+,把非4.14.54開頭的資料夾刪掉就行了。
(4)重新安裝驅動:
sudo ./install.sh
安裝成功後重啟,再執行aplay -l和aarecord -l確認是否安裝成功。
4、測試ReSpeaker
執行錄音和播放命令:
arecord -f cd -Dhw:1 | aplay -Dhw:1
將揚聲器的插頭插入ReSpeaker的播放器介面。
現在說話,耳機中應該能夠聽到重複的聲音。
ReSpeaker上還支援APA102 LED,可以根據接收到的聲音有閃燈的效果。
這裡用到了pip,這是python的一個包安裝工具,需要先安裝:
wget https://bootstrap.pypa.io/get-pip.py python get-pip.py pip -V #檢視pip版本
然後安裝執行:
sudo pip install spidev git clone https://github.com/respeaker/mic_hat.git cd mic_hat python pixels.py
現在說話的時候等應該會閃。
5、安裝PyAudio
雖然aplay和arecord可以實現播放和錄音的功能,但是如果要實時檢測聲音的話需要用PyAudio(可能也有別的庫,這裡選一個常用的)。
因為我這裡用了python3,所以需要python3版本的PyAudio:
sudo apt-get install portaudio19-dev python-all-dev python3-all-dev pip3 install pyaudio
6、安裝SoundTouch
這個程式可以對音訊進行一些處理,我們這裡用來做變聲。
在Windows上可以直接下載:https://www.surina.net/soundtouch/download.html
在樹莓派上需要原始碼編譯安裝這個程式:
sudo wget https://gitlab.com/soundtouch/soundtouch/-/archive/soundtouch-2.0.0/soundtouch-soundtouch-2.0.0.tar.gz sudo tar -xvf soundtouch-soundtouch-2.0.0.tar.gz cd soundtouch-soundtouch-2.0.0 sudo apt-get install automake autoconf libtool build-essential ./bootstrap ./configure make make install
安裝之後會在/usr/local/lib中生成類庫檔案,但是這個目錄下的檔案不能自動發現,建議將這個目錄增加到/etc/ld.so.conf中:
include ld.so.conf.d/*.conf /usr/local/lib #增加的行
然後執行 ldconfig 載入配置。
7、執行湯姆貓程式
這是一個用python3寫的程式,先安裝幾個依賴庫:
sudo pip3 install numpy
然後在/home/pi下建立一個目錄tomcat:
cd /home/pi mkdir tomcat cd tomcat
然後建立 tomcat.py,這個是會說話的湯姆貓的主程式。其中大概的流程是:
持續監控麥克風聲音,如果達到某個閾值就開始錄製聲音,如果聲音低於某個閾值就結束錄音,然後儲存聲音,然後變聲,然後播放;播放完畢後,繼續監控麥克風聲音。
現在上傳這個檔案到tomcat目錄中就可以運行了。
chmod +x ./tomcat.py ./tomcat.py
現在說句話試試,你應該能夠聽到湯姆貓美妙的回聲了(記得連上耳機或音箱哦