Raspberry Pi: スピーカーの接続

Takami Torao RPi3 Model B+ Raspbian 11 #RaspberryPi
  • このエントリーをはてなブックマークに追加

概要

Raspberry Pi をヘッドレス (画面やキーボードを接続しない) 機器として使用するとき、システムで何かエラーが起きていることを通知する手段が必要である。ネットワークと接続しているのであればメールや LINE Bot 等を使用できるが、そうでない場合は別に物理的な手段を用意しなければならない。Raspberry Pi にスピーカーを設置しておくことは有効な通知手段の一つである。

Table of Contents

  1. 概要
  2. 接続方法
    1. デフォルトのスピーカー設定
    2. USB スピーカー
    3. 3.5mm ジャック
  3. 通知
  4. 参照

接続方法

Raspberry Pi 本体はスピーカーを搭載していないが、3.5mm ジャック、HDMI、I²S、USB、Bluetooth などを使用してスピーカーと接続することができる。システムがオーディオデバイス (スピーカーまたはマイク) として認識しているデバイスは以下のコマンドで確認できる。

pi@pirite:~ $ cat /proc/asound/cards
 0 [Headphones     ]: bcm2835_headpho - bcm2835 Headphones
                      bcm2835 Headphones
 1 [UACDemoV10     ]: USB-Audio - UACDemoV1.0
                      Jieli Technology UACDemoV1.0 at usb-3f980000.usb-1.2, full speed
 2 [WEBCAM         ]: USB-Audio - C270 HD WEBCAM
                      C270 HD WEBCAM at usb-3f980000.usb-1.3, high speed
 3 [vc4hdmi        ]: vc4-hdmi - vc4-hdmi
                      vc4-hdmi

デフォルトのスピーカー設定

デフォルトでは自動で音声出力先を選択するが、自動認識に任せると実際にはスピーカーと接続していない HDMI を選択して目的のスピーカーから音が出ないことがしばしば起きる。使用するスピーカーが決まっているのであればデフォルトの音声出力を固定したほうが良いだろう。例えば上記の USB スピーカー UACDemoV10 をデフォルトとするのであれば、まず以下のコマンドでサウンドカード番号とデバイス番号を調べる。

pi@pirite:~ $ cat /proc/asound/UACDemoV10/pcm0p/info
card: 1
device: 0
subdevice: 0
stream: PLAYBACK
id: USB Audio
name: USB Audio
...

これで目的の USB スピーカーに card 1, device 0 が割り当てられていることがわかる。次に ALSA の設定ファイルでデフォルトのサウンドカード番号、デバイス番号を設定し再起動すると目的のスピーカーがデフォルトで使用されるようになる。

pi@pirite:~ $ sudo vim /usr/share/alsa/alsa.conf
...
defaults.ctl.card 1
defaults.pcm.card 1
defaults.pcm.device 0

USB スピーカー

USB スピーカーは Raspberry Pi に取り付ければすぐに認識される。lsusb コマンドを使用すれば USB 接続されているデバイスを確認することができる。

pi@pirite:~ $ lsusb
...
Bus 001 Device 004: ID 4c4a:4155 Jieli Technology UACDemoV1.0
...

特にバスパワータイプの USB スピーカーは電源ケーブルがなくて取り回しが良い。

3.5mm ジャック

Raspberry Pi はミニプラグ出力を持っている。もしこの出力端子を使っていないなら Fig 1 のようなミニプラグ出力のみで使用できるスピーカーをつなげる方法もある。充電や電池交換の必要がない代わりに音量が小さく音質も劣悪だが、それでもシステムで何かが起きていることに気づくには十分である。もちろん、より良い音質や大きな音量が必要であれば外部電源のアクティブスピーカーを使用すれば良い。

通知

システムからの通知を音で行うにはビープ音や通知音の音源を用意して再生してもよいが、apt でインストールできる espeak-ng を使って "何が起きたか" まで伝えられると便利である。espeak-ng-vja オプションを指定することで日本語 (ひらがな) の読み上げを行うことができる。

この場合、突然スピーカーが話し始めると内容を聞きのがしてしまいやすいため、すべてのスピーチの最初に "notice, " のような固定文言を挿入したり、アナウンス音 [1] を再生するなどして一呼吸おくと良い。オーディオファイルの再生には apt でインストール可能な aplay (WAV) や mpg321 (MP3) コマンドが使用できる。

pi@pirite:~$ sudo apt install -y espeak-ng
pi@pirite:~$ aplay announce.wav; espeak-ng "この、おしばいが、おきにめしたのなら、どうか、はくしゅかっさいを" -vja -x
Playing WAVE 'announce.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
k'ono
,os\iba'iga
,okin,imes\,itanon'ar`a
do'uka
h,akus\,ukassa'io
Fig 1. espeak-ng によるテキスト読み上げを USB スピーカーで再生。

参照

  1. 飛行機-ポーン・アナウンス・シートベルト脱着 by hitoshi | フリー効果音素材