voip 音频采集时间_树莓派3 音频配置及其应用场景(录音、VoIP 电话等)(锁定重发)...
從網上看到一本關于樹莓派的電子書 Raspberry Pi for Secret Agents,利用樹莓派打造“特工裝備”。
其中有一章講到音頻設備的配置和幾個相關的應用場景(比如錄音、監聽、搭建電話系統等),感覺比較有意思。
一、音頻系統簡單配置
1. ALSA
ALSA (Advanced Linux Sound Architecture) 是一個承載樹莓派上音頻系統的底層框架,為樹莓派及其外接的播放或錄制設備提供內核驅動程序。同時該框架也包含用于制作音頻應用的程序代碼,和一些方便的命令行實用程序。
在 ALSA 的定義里,系統中的每一個音頻設備都稱作“聲卡”。可以使用如下命令列出所有已連接的音頻設備:
$ cat /proc/asound/cards
0 [ALSA ]: bcm2835_alsa - bcm2835 ALSA
bcm2835 ALSA
可以看到此時系統中只有樹莓派默認的聲卡 0 bcm2835 ALSA。
2. 調節音量大小
可以使用 alsamixer 命令打開 AlsaMixer 實用程序,對音量等聲音系統參數進行調節:
alsamixer
界面中 View 選項后面的 Playback、Capture、All 分別對應播放、錄制和全部。
可以按鍵盤上的 TAB 鍵切換到對應的界面。按下 fn+F6 或 S 鍵切換聲卡設備(此時只有一個聲卡)
使用 ↑ ↓ 方向鍵調節音量,設置完成后按 ESC 鍵退出 AlsaMixer。
3. 切換音頻輸出
樹莓派提供兩種音頻輸出接口:3.5mm 模擬音頻接口和 HDMI。
可以通過 $sudo raspi-config 命令(選擇 Advanced Options - Audio)配置音頻輸出方向,使音頻輸出固定使用 3.5mm 接口或 HDMI:
raspi-config
類似的操作也可以直接通過 amixer 命令完成:
$ amixer cset numid=3 1 :指定音頻輸出接口為 3.5mm 耳機接口
$ amixer cset numid=3 2 :指定音頻輸出接口為 HDMI
$ amixer cset numid=3 1
numid=3,iface=MIXER,name='PCM Playback Route'
; type=INTEGER,access=rw------,values=1,min=0,max=2,step=0
: values=1
4. 播放測試
可以使用 $ speaker-test -c2 -t wav 命令測試音頻播放是否正常。
如一切順利,則會依次從左耳耳機(或音箱)聽到 Front Left,從右耳耳機聽到 Front Right 的女聲語音,直到按下 Ctrl + C 終止測試。
二、音頻錄制設備
1. USB聲卡
樹莓派提供的音頻接口是不支持語音輸入的。
使用 alsamixer 命令進入 AlsaMixer 程序,按下 TAB 鍵切換到 Caputre 界面,可以看到此設備無音頻采集控制的提示:
bcm2835 ALSA Capture
為了錄制音頻,需要使用外接的音頻輸入設備。可以從網上購買一個便攜式的 USB 免驅動聲卡。
USB聲卡及線控耳機
插入USB聲卡后,通過 $ cat /proc/asound/cards 命令查看當前系統檢測到的音頻設備:
$ cat /proc/asound/cards
0 [ALSA ]: bcm2835_alsa - bcm2835 ALSA
bcm2835 ALSA
1 [Device ]: USB-Audio - USB Audio Device
GeneralPlus USB Audio Device at usb-3f980000.usb-1.3, full speed
此時輸出信息中多了一個序號為 1 的聲卡設備 USB-Audio。
可以使用 $ speaker-test -D plughw:1 -c2 -t wav 測試 USB 聲卡的音頻播放是否正常(注意命令中的 -D plughw:1)。
使用 alsamixer -c1 命令調節新聲卡的具體參數。其中 -c1 選項用于指定編號為 1 的聲卡設備,即新插入的 USB 聲卡。
alsamixer -c1
按下 fn+F4 或 TAB 鍵將視圖切換到 Capture 界面,確保 Mic 上方有出現 CAPTURE 字樣(說明已開啟錄制功能,可以使用空格鍵切換開關狀態):
Capture
2. 麥克風測試
首先安裝 SoX 工具及其 mp3 格式支持:$sudo apt-get install sox libsox-fmt-mp3
SoX 是 Linux 系統上一個強大的音頻處理工具,詳細使用方法可以參考這篇文章:SoX — 音頻處理工具里的瑞士軍刀。
sox 命令的基本格式為 sox 。其中的 和 既可以是某個具體的音頻文件,也可以是某個特定的音頻設備。
所以可以簡單的理解為,sox 工具就是對音頻進行“傳導”:
從文件到設備即為播放 sox music.mp3
從設備到文件即為錄制 sox myrec.wav
從文件到文件即為轉碼 sox input.wav output.mp3
可以使用 $ sox -t alsa plughw:1 -t alsa plughw:1 命令對麥克風進行測試。
其中 -t alsa plughw:1 表示 ALSA 聲卡設備 1(即USB聲卡)。
上述命令表示既使用USB聲卡(麥克風) 作為音頻輸入,又用它(耳機)作為音頻輸出。
如一切正常,此時可以通過耳機聽到自己對著麥克風講話的聲音。
3. 切換默認的音頻設備
可以通過修改配置文件,將樹莓派默認用于播放和錄制的音頻設備(即樹莓派內置聲卡),改為當前插入的USB聲卡。
編輯 ~/.asoundrc 文件,改為如下內容:
pcm.!default {
type hw
card 1
}
ctl.!default {
type hw
card 1
}
其實就是將配置文件中的 card 0 改為 card 1。
此時可直接使用 $ sox -d -d 命令測試USB聲卡上連接的麥克風和耳機,無需再通過 -t alsa plughw:1 選項手動指定USB聲卡(-d 選項表示默認音頻設備,即已配置成默認的USB聲卡)。
4. 錄制與播放
默認音頻設備切換為USB聲卡后,可以使用以下命令錄制一段音頻并將其保存在 myrec.mp3 文件中:
$ sox -d myrec.mp3 或 $ rec myrec.mp3
播放前面錄制的音頻文件可使用如下命令:
$ sox myrec.mp3 -d 或 $ play myrec.mp3
如未能配置USB聲卡為默認音頻設備或配置不成功,也可以使用如下命令進行錄制與播放:
錄制:$ sox -t alsa plughw:1 myrec.mp3
播放:$ sox myrec.mp3 -t alsa plughw:1
錄制固定長度的音頻片段(如 30 分鐘)并保存在指定文件中:
$ sox -t alsa plughw:1 myrec.wav trim 0 00:30:00
持續錄制很長時間的音頻,保存在幾個不同的文件中,每隔一小時保存一次:
$ sox -t alsa plughw:1 myrec.wav trim 0 01:00:00 : newfile : restart
三、遠程監聽
可以通過樹莓派的 SSH 服務,在另一臺電腦上遠程收聽樹莓派通過USB聲卡收集到的音頻數據。
也就是說,用樹莓派的麥克風錄制周圍環境的聲音,同時在遠程的另一臺電腦上實時地(有短暫延遲)收聽錄制的內容,達到監聽的效果。
在電腦端(也需要安裝 sox 程序)執行如下命令即可:
$ ssh pi@[IP address] sox -t alsa plughw:1 -t sox - | sox -q -t sox - -d
sox
對于 Windows 系統,除安裝 SoX 工具外,還需要先下載完整版 PuTTY 工具,并確保這兩個工具的安裝路徑都已添加至 PATH 環境變量。
則可以使用如下命令通過樹莓派進行遠程監聽:
plink pi@[IP address] -pw [password] sox -t alsa plughw:1 -t sox - | sox -q -t sox - -t waveaudio default
可以使用如下命令,將遠程樹莓派收集到的音頻數據直接保存在本地文件中:
$ ssh pi@[IP address] sox -t alsa plughw:1 -t mp3 - > ~/Desktop/myrec.mp3
或 plink pi@[IP address] sox -t alsa plughw:1 -t mp3 - > D:\myrec.mp3 (Windows 系統)
使用如下命令,讓本地電腦作為音頻輸入源,將其麥克風收集到的音頻數據,通過 SSH 發送到遠程樹莓派上進行播放。
也就是將自己對著本地電腦講的話通過樹莓派進行遠程廣播:
$ sox -d -t sox - | ssh pi@[IP address] sox -q -t sox - -d
或 sox -t waveaudio default -t sox - | plink pi@[IP address] -pw [password] sox -q -t sox - -d (Windows 系統)
同樣的原理,也可以將本地磁盤上的音頻文件直接發送到遠程的樹莓派上進行播放:
$ cat ~/Desktop/media/audios/Faded.wav | ssh pi@[IP address] sox -t wav - -d
或 type D:\myrec.mp3 | plink pi@[IP address] -pw [password] sox -t mp3 - -d (Windows 系統)
四、藍牙耳機
樹莓派 3 代 B+ 自帶了 WIFI 和藍牙功能,可以直接通過藍牙連接音頻設備。
1. 使用 hciconfig 命令獲取藍牙模塊的相關信息:
$ hciconfig -a
hci0: Type: Primary Bus: UART
BD Address: B8:27:EB:C3:38:31 ACL MTU: 1021:8 SCO MTU: 64:1
UP RUNNING
RX bytes:4181 acl:136 sco:0 events:135 errors:0
TX bytes:5065 acl:128 sco:0 commands:60 errors:0
Features: 0xbf 0xfe 0xcf 0xfe 0xdb 0xff 0x7b 0x87
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
Link policy: RSWITCH SNIFF
Link mode: SLAVE ACCEPT
Name: 'raspberrypi'
Class: 0x480000
Service Classes: Capturing, Telephony
Device Class: Miscellaneous,
HCI Version: 4.2 (0x8) Revision: 0xfc
LMP Version: 4.2 (0x8) Subversion: 0x6119
Manufacturer: Broadcom Corporation (15)
2. 使用 hcitool scan 命令掃描附近可供連接的藍牙設備,并記下藍牙耳機對應的 MAC 地址
$ hcitool scan
Scanning ...
FC:58:FA:F4:67:33 A2
50:8F:4C:0D:31:3A Starky
3. 通過 MAC 地址與藍牙耳機進行配對
使用 bluetoothctl 命令進入藍牙控制臺,依次通過 power on 、agent on 、scan on 、pair 、trust 、connect 等命令連接藍牙設備。
注意此處連接藍牙使用的是藍牙設備的 MAC 地址。
$ bluetoothctl
[NEW] Controller B8:27:EB:C3:38:31 raspberrypi [default]
[NEW] Device 50:8F:4C:0D:31:3A Starky
...
[bluetooth]# power on
Changing power on succeeded
[bluetooth]# agent on
Agent registered
[bluetooth]# scan on
Discovery started
[bluetooth]# pair FC:58:FA:F4:67:33
Attempting to pair with FC:58:FA:F4:67:33
Pairing successful
[bluetooth]# trust FC:58:FA:F4:67:33
[CHG] Device FC:58:FA:F4:67:33 Trusted: yes
Changing FC:58:FA:F4:67:33 trust succeeded
[bluetooth]# connect FC:58:FA:F4:67:33
Attempting to connect to FC:58:FA:F4:67:33
[CHG] Device FC:58:FA:F4:67:33 Connected: yes
Connection successful
[A2]#
退出藍牙控制臺,使用 hcitool con 命令查看當前已連接的藍牙設備,確認連接成功:
$ hcitool con
Connections:
> ACL FC:58:FA:F4:67:33 handle 11 state 1 lm SLAVE AUTH ENCRYPT
4. 將音頻輸出設備切換為藍牙耳機
首先安裝 PulseAudio 軟件包:
$ sudo apt-get install pulseaudio pulseaudio-module-bluetooth
啟動 PulseAudio 守護進程:
$ pulseaudio --start
列出 PulseAudio 檢測到的音頻設備名稱:
$ pacmd list-sinks short | grep -e 'name:'
name:
name:
使用 pactl 命令將藍牙耳機作為默認的音頻設備:
$ pactl set-default-sink bluez_sink.FC_58_FA_F4_67_33.headset_head_unit
此時,即可直接使用 play 命令通過藍牙耳機播放音頻文件:
image.png
如果需要將音頻輸出切換回系統默認,運行如下命令即可:
$ pactl set-default-sink alsa_output.platform-soc_audio.analog-mono
或者自己對當前的音頻配置有點混亂了。。。可以使用如下命令重置:
$ sudo /etc/init.d/alsa-utils reset
5. 注意事項
經過測試,發現藍牙耳機連接后音質相差太大,播放速度明顯放緩,未確定是哪里的問題。
同時我的藍牙耳機開啟后會自動連接至樹莓派,如無法自動連接或者連接以后并沒有被 PulseAudio 檢測到,可以先使用 bluetoothctl 命令進入藍牙控制臺:
依次輸入 power off、power on 命令重啟藍牙,使用 connect 命令重新連接藍牙耳機(無需再配對和信任,直接連接)。
藍牙耳機為默認音頻設備后,之前配置 USB 聲卡為默認的操作不再生效(除非斷開藍牙或關閉藍牙耳機)。
可以在播放或錄制時通過 -t alsa plughw:1 選項手動指定 USB 聲卡。
如 $ sox -t alsa plughw:1 -d :使用 USB 聲卡作為音頻輸入源,再將采集到的音頻輸出到默認設備(藍牙耳機)
這一章的藍牙介紹只供參考,推薦使用 USB 聲卡進行音頻的錄制和播放。
五、配置 VoIP 服務器
VoIP 即 Voice over Internet Protocol ,就是將聲音信號經過壓縮與封包之后,以數據封包的形式在IP網絡間進行傳輸。通俗地說也就是互聯網電話或IP電話。
這里使用 Linux 平臺上的 SIP Witch 軟件作為 VoIP 系統的服務端。
1. 安裝 SIP Witch
$ sudo apt-get install sipwitch
2. 編輯配置文件
/etc/default/sipwtich :找到 PLUGINS 選項,刪除該行前面的注釋
/etc/sipwitch.conf :編輯文件內容,在 標簽下添加用戶注冊信息:
201
SecretSauce201
Agent 201
202
SecretSauce202
Agent 202
其中的 id 表示注冊用戶登錄時需要輸入的用戶名, 表示登錄時使用的密碼。
找到 標簽,并在其后添加如下一行配置,用于指定 VoIP 服務器的IP地址:
[Your Pi's IP address]
編輯完成后,重啟 sipwitch 服務:
$ sudo systemctl restart sipwitch
3. 客戶端配置
Windows 系統“軟電話”可使用 MicroSIP 軟件,Android 客戶端可使用 CSipSimple,Mac 客戶端有 Telephone。
使用 /etc/sipwitch.conf 文件中定義的用戶ID、密碼以及服務器地址完成用戶注冊,各客戶端之間即可直接撥打語音電話。
MicroSIP
參考資料
Raspberry Pi for Secret Agents - Third Edition
總結
以上是生活随笔為你收集整理的voip 音频采集时间_树莓派3 音频配置及其应用场景(录音、VoIP 电话等)(锁定重发)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小米ES Pro和X Pro对比有什么区
- 下一篇: 独家 | 机器学习解释模型:黑盒VS白盒