なんとなくのメモです。当然のことを書いているだけなので、あまり読む必要はないと思います。
週末に行われたオンラインのハッカソンで作成したものはRaspberryPi
で音声再生するものでしたが、テレカン側はアプリが起動しているマイクデバイスのみを使用するため手元にあるRaspberryPi
の音声出力がうまくマイクで拾えないこともあります。本来であればスピーカーを接続して、マイクで拾えればいいのですが、実は自宅にはライン接続のスピーカーがありませんでした。RaspberryPi
のライン出力は音声の質が非常にアレなので、全てUSBスピーカーにしていたのですが、自宅開発では家族に嫌がられることもあり、イヤホンで開発していました。
発表の直前にこのことに気が付き、音のないデモでは全く伝わらないということが判明(音が一番の売りだった)したので、解決しなければと思いました。この時点でハッカソンの作業終了まで残り15分だった…
頭に思い浮かんだのは以下の3つの選択肢
- ライン接続可能なスピーカーを作成する
- USBスピーカーの設定を行う
- イヤホンをPCをのマイクに近づけてなんとか音を拾う
この3つの選択肢で一番ラクな方法は最後のものでしたが、テストができないという弱点もあったので、最終手段として考えていました。スピーカーを作るというのも割と無理な感じもしますが、 オンラインハッカソンの開発場所が自宅だったこともあり、たまたま秋月電子で購入したダイナミックスピーカーがあったので、それが使えないかと試行錯誤しましたがうまく行かず。(発表後にテストしたらうまく行っていた→多分配線接触の問題だった模様)
ちなみに秋月電子のダイナミックスピーカーは100円なのでかなりおすすめ。コネクターもついているのでテスト駆動も楽ですよ。
第2の選択肢であるUSBスピーカーの設定に変えるのは時間的に難しいかな(このとき残り15分だった)という判断で、最終的には第3の選択肢をしようして発表を行いました。 イヤホンの音量を最大にして、カナル型のイヤホンから変えて、PCをのマイクにガムテープで貼り付けることで難を乗り越えることはできました。
参考:RaspberryPiでUSBスピーカーから音を鳴らす uepon.hatenadiary.com
ただ、これでは今後同様のことが発生した場合、結構きついのでライン出力からUSBスピーカーに素早く変更することができないかと思いました。 いろいろ考えましたが一番簡単なのは以下の方法でした。本当に楽だったw。
今回使用したのはbuster
ベースのRaspbian
、adafruit USB スピーカー(ADA-3369)を使用しています。
こちらのスピーカーも小さくて持ち運び便利です。公式サイトにRaspbianでの設定の仕方も書いてありますが、かなり昔のバージョンのRaspbian
のものなので
現在のバージョンで使えるかはかなり微妙かもしれません。
【参考:Raspbianのバージョン】
$ lsb_release -a No LSB modules are available. Distributor ID: Raspbian Description: Raspbian GNU/Linux 10 (buster) Release: 10 Codename: buster
チョー簡単に音声出力をUSBスピーカーに変更する
結論からいうと、コンソールで設定するとかなり面倒なのですが、X環境下から設定をするとデフォルトで設定が変更されます。設定後はコンソールからの音声も変更されるので超おすすめです。
まずは、USBスピーカーをRaspberryPiに接続します。認識はdmesg
コマンドで確認します。
$ dmesg |tail [ 403.597051] Under-voltage detected! (0x00050005) [ 403.619698] usb 1-1.2: New USB device found, idVendor=1908, idProduct=2070, bcdDevice= 1.00 [ 403.619715] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 403.619724] usb 1-1.2: Product: USB2.0 Device [ 403.619733] usb 1-1.2: Manufacturer: Generic [ 403.619743] usb 1-1.2: SerialNumber: 20130100ph0 [ 403.725818] usb 1-1.2: 1:1: cannot get freq at ep 0x2 [ 403.742859] usbcore: registered new interface driver snd-usb-audio [ 407.757048] Voltage normalised (0x00000000) [ 451.437023] Voltage normalised (0x00000000)
New USB device found
と出ているので正常に認識されています。
念の為、lsusb
コマンドでも確認してみると…
$ lsusb Bus 001 Device 004: ID 1908:2070 GEMBIRD Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
GEMBIRD
という名前で認識されているようです。alsaからの認識も確認しましょう。
$ aplay -l **** ハードウェアデバイス PLAYBACK のリスト **** カード 0: ALSA [bcm2835 ALSA], デバイス 0: bcm2835 ALSA [bcm2835 ALSA] サブデバイス: 7/7 サブデバイス #0: subdevice #0 サブデバイス #1: subdevice #1 サブデバイス #2: subdevice #2 サブデバイス #3: subdevice #3 サブデバイス #4: subdevice #4 サブデバイス #5: subdevice #5 サブデバイス #6: subdevice #6 カード 0: ALSA [bcm2835 ALSA], デバイス 1: bcm2835 IEC958/HDMI [bcm2835 IEC958/HDMI] サブデバイス: 1/1 サブデバイス #0: subdevice #0 カード 0: ALSA [bcm2835 ALSA], デバイス 2: bcm2835 IEC958/HDMI1 [bcm2835 IEC958/HDMI1] サブデバイス: 1/1 サブデバイス #0: subdevice #0 カード 1: vc4hdmi [vc4-hdmi], デバイス 0: MAI PCM vc4-hdmi-hifi-0 [MAI PCM vc4-hdmi-hifi-0] サブデバイス: 1/1 サブデバイス #0: subdevice #0 カード 2: Device [USB2.0 Device], デバイス 0: USB Audio [USB Audio] サブデバイス: 1/1 サブデバイス #0: subdevice #0
カード 2、デバイス 0として認識されています。あとは出力のデフォルトをUSBスピーカーにするだけです。
あとはX環境下で音声出力の設定を変えるだけです。簡単ではありますが、Raspbian
のバージョンによっては設定の場所が異なるようです。
X環境である必要があるので、モニタを接続するか、VNC接続するかリ、モートデスクトップ接続(Windowsのみ、sudo apt install xrdp
する必要はあり)なりをする必要はありますが、すぐに設定変更を完了できます。
画面の右上にある【音声アイコン】を右クリックして音声出力デバイスからUSB2.0 Device
を選択します。
これで反映されています。念の為確認するとちゃんとチェックの位置が変更されています。
あとは適当な音声ファイルをクリックすれば、
音声が再生されUSBスピーカーから音がでます。音声再生のアプリはvlc
でした。
音声レベルの変更は右上の【音声アイコン】を右クリックして、一番下に出てくる【Output Device Settings】をを選べば
音声のレベル変更ができます。
おわりに
大したことないのですが、通常はCLI
で設定していることが多いので見落としがちですが、GUIを使用したほうが楽でしたということでした。
ただ、本来やりたかったことはテレカン環境でRaspberryPi
の音声を取りたいということだったはずなので、本格的にやるならマイク+Mixer環境
は必要かなと思います。
今後オンライン環境でのデモが増えるのであれば、購入を検討したほうがいいのでしょうかね。