【RaspberryPi】チョー簡単に音声出力をUSBスピーカーに変更する

なんとなくのメモです。当然のことを書いているだけなので、あまり読む必要はないと思います。


週末に行われたオンラインのハッカソンで作成したものはRaspberryPiで音声再生するものでしたが、テレカン側はアプリが起動しているマイクデバイスのみを使用するため手元にあるRaspberryPiの音声出力がうまくマイクで拾えないこともあります。本来であればスピーカーを接続して、マイクで拾えればいいのですが、実は自宅にはライン接続のスピーカーがありませんでした。RaspberryPiのライン出力は音声の質が非常にアレなので、全てUSBスピーカーにしていたのですが、自宅開発では家族に嫌がられることもあり、イヤホンで開発していました。

発表の直前にこのことに気が付き、音のないデモでは全く伝わらないということが判明(音が一番の売りだった)したので、解決しなければと思いました。この時点でハッカソンの作業終了まで残り15分だった…

頭に思い浮かんだのは以下の3つの選択肢

  • ライン接続可能なスピーカーを作成する
  • USBスピーカーの設定を行う
  • イヤホンをPCをのマイクに近づけてなんとか音を拾う

この3つの選択肢で一番ラクな方法は最後のものでしたが、テストができないという弱点もあったので、最終手段として考えていました。スピーカーを作るというのも割と無理な感じもしますが、 オンラインハッカソンの開発場所が自宅だったこともあり、たまたま秋月電子で購入したダイナミックスピーカーがあったので、それが使えないかと試行錯誤しましたがうまく行かず。(発表後にテストしたらうまく行っていた→多分配線接触の問題だった模様)

ちなみに秋月電子のダイナミックスピーカーは100円なのでかなりおすすめ。コネクターもついているのでテスト駆動も楽ですよ。

akizukidenshi.com

第2の選択肢であるUSBスピーカーの設定に変えるのは時間的に難しいかな(このとき残り15分だった)という判断で、最終的には第3の選択肢をしようして発表を行いました。 イヤホンの音量を最大にして、カナル型のイヤホンから変えて、PCをのマイクにガムテープで貼り付けることで難を乗り越えることはできました。

参考:RaspberryPiでUSBスピーカーから音を鳴らす uepon.hatenadiary.com

ただ、これでは今後同様のことが発生した場合、結構きついのでライン出力からUSBスピーカーに素早く変更することができないかと思いました。 いろいろ考えましたが一番簡単なのは以下の方法でした。本当に楽だったw。

今回使用したのはbusterベースのRaspbianadafruit USB スピーカー(ADA-3369)を使用しています。 こちらのスピーカーも小さくて持ち運び便利です。公式サイトにRaspbianでの設定の仕方も書いてありますが、かなり昔のバージョンのRaspbianのものなので 現在のバージョンで使えるかはかなり微妙かもしれません。

f:id:ueponx:20200421003157p:plain

www.switch-science.com

【参考: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を選択します。

f:id:ueponx:20200420234507p:plain

これで反映されています。念の為確認するとちゃんとチェックの位置が変更されています。

f:id:ueponx:20200420234515p:plain

あとは適当な音声ファイルをクリックすれば、

f:id:ueponx:20200420234522p:plain

音声が再生されUSBスピーカーから音がでます。音声再生のアプリはvlcでした。

f:id:ueponx:20200420234525p:plain

音声レベルの変更は右上の【音声アイコン】を右クリックして、一番下に出てくる【Output Device Settings】をを選べば

f:id:ueponx:20200420234528p:plain

音声のレベル変更ができます。

f:id:ueponx:20200420234535p:plain

おわりに

大したことないのですが、通常はCLIで設定していることが多いので見落としがちですが、GUIを使用したほうが楽でしたということでした。

ただ、本来やりたかったことはテレカン環境でRaspberryPiの音声を取りたいということだったはずなので、本格的にやるならマイク+Mixer環境は必要かなと思います。 今後オンライン環境でのデモが増えるのであれば、購入を検討したほうがいいのでしょうかね。

/* -----codeの行番号----- */