1. 概要
Raspberry Pi 3BでGstreamer、WebRTCを使った色々なことをしているとき、マイクの音声を一緒に扱えないの?という話題が出たので試したり、失敗したときの記録。
2. 使用機器
- Raspberry Pi Zero WH
OSはBuster(Debian 10) - UVCカメラ: Buffalo BSW500M
- 適当なイヤホン
- マイクは手持ちがなかった(内蔵音源でごまかし)
3. 実験
話を持ち出した人いわく、Gstreamerで音は出なかったそうだ。
3.1. まずは試す
カメラの映像をRaspberry Pi 3Bで確認してみる。
サンプルデータ(カラーバー)を表示。VNC Viewer上である、SSHで接続したターミナルでやっても出ないので注意。
テスト映像「videotestsrc」が表示される。Gstreamerは正常動作していることがわかった。
gst-launch-1.0 videotestsrc ! autovideosink
次に音声版の「autoaudiosink」で試してみるが、イヤホンから音が聞こえてこない。単純には動かないようだ。
gst-launch-1.0 audiotestsrc ! autoaudiosink
3.2. そもそも音は出るのか?
実は音声出力ができない状態かもしれないので、音声テストとしてGstreamer以外を試してみる。
出た。イヤホンでピー音聞こえている。
speaker-test -t sine -f 600
これも出る。OSインストール時に勝手に入ったサンプル音源のようだ。
aplay -Dhw:1,0 /usr/share/sounds/alsa/Front_Center.wav
3.3 ハードウェア確認
いまさらだけど、音関係のデバイス確認。存在するし、認識もされている。
イヤホンだと1番ということになる。
pi@raspberrypi:~ $ aplay -l
**** ハードウェアデバイス PLAYBACK のリスト ****
カード 0: b1 [bcm2835 HDMI 1], デバイス 0: bcm2835 HDMI 1 [bcm2835 HDMI 1]
サブデバイス: 4/4
サブデバイス #0: subdevice #0
サブデバイス #1: subdevice #1
サブデバイス #2: subdevice #2
サブデバイス #3: subdevice #3
カード 1: Headphones [bcm2835 Headphones], デバイス 0: bcm2835 Headphones [bcm2835 Headphones]
サブデバイス: 4/4
サブデバイス #0: subdevice #0
サブデバイス #1: subdevice #1
サブデバイス #2: subdevice #2
サブデバイス #3: subdevice #3
4. ALSA
Gstreamer, Raspberry, audioあたりで調べていると、alsaが良く出てくる。
ということは、AudioはALSA(alsasink)で扱わないとダメっぽい? 「autoaudiosink」はオートではないのか?
Raspberry Pi OSのせいなのか、Gstreamerのせいなのか分からない。
4.1 改めて実験
ピー音というかポー音というかとにかく聞こえた。
gst-launch-1.0 audiotestsrc ! alsasink
デバイス指定しても聞こえる。0にすると繋いでないHDMI側にでるらしく聞こえない。
gst-launch-1.0 audiotestsrc ! alsasink device=hw:1