ラズベリーパイにUSBスピーカーを接続して音を出す超簡単な方法(Raspbian Stretch Jessie GUI編)

2018年11月30日

どーも、まだ微妙にクシャミが出るまーくです。

ラズベリーパイにUSBスピーカーから音を出そうとした時に、ネットで調べるとコマンドラインで設定ファイルをいじるという記事がたくさんでてきますが、なかなか面倒に思っていました。

そんな中、つい先日ふとしたことで、USB接続したスピーカーから簡単に音を出せることがわかったので紹介したいと思います!

 

環境、使ったモノ

使用したハードウェアと再生ツール、オーディオファイルは以下の通りです。

ハードウェア

  • Rasberry Pi 3B、Raspberry Pi Zero W (Raspbian Jessie/Strech Desktop版)
  • USBスピーカー(SANWA SUPPLY、MM-SPU8BK)

再生ツール

  • aplay(デフォルト)
  • mpg321(追加インストール)
    [code]sudo apt-get install mpg321[/code]

オーディオファイル

魔王魂さんで公開されているオーディオファイル(チャイム01)を使用しました。

ファイルをダウンロードしてテスト用に短い名前にしておきました。
[code]wget https://maoudamashii.jokersounds.com/music/se/mp3/se_maoudamashii_chime01.mp3; cp se_maoudamashii_chime01.mp3 test.mp3[/code]

[code]wget https://maoudamashii.jokersounds.com/music/se/wav/se_maoudamashii_chime01.wav; cp se_maoudamashii_chime01.wav test.wav[/code]

 

事前確認

USBスピーカーを接続して、認識されていることを確認します。

ターミナルを開いて、

$ lsusb
 Bus 001 Device 004: ID 0d8c:0103 C-Media Electronics, Inc. CM102-A+/102S+ Audio Controller
 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.
 Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

用意したスピーカーは、「C-Media Electronics, Inc.」のオーディオコントローラとして認識されていました。

サウンドデバイスとしてどのように認識されているか確認します。

$ aplay -l
 **** ハードウェアデバイス PLAYBACK のリスト ****
 カード 0: ALSA [bcm2835 ALSA], デバイス 0: bcm2835 ALSA [bcm2835 ALSA]
 サブデバイス: 8/8
 サブデバイス #0: subdevice #0
 サブデバイス #1: subdevice #1
 サブデバイス #2: subdevice #2
 サブデバイス #3: subdevice #3
 サブデバイス #4: subdevice #4
 サブデバイス #5: subdevice #5
 サブデバイス #6: subdevice #6
 サブデバイス #7: subdevice #7
 カード 0: ALSA [bcm2835 ALSA], デバイス 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
 サブデバイス: 1/1
 サブデバイス #0: subdevice #0
 カード 1: MicroII [Audio Advantage MicroII], デバイス 0: USB Audio [USB Audio]
 サブデバイス: 1/1
 サブデバイス #0: subdevice #0

標準のヘッドホン、HDMIに加え、カード1「Audio Advantege MicroII」のデバイス0「USB Audio」として認識されていました。

 

Raspberry Pi 3B(Jessie、Strech) の場合

ヘッドホンとHDMI出力が標準で搭載されており、デフォルトではこちらが優先されてしまいます。

USBスピーカーを接続すると複数のサウンドデバイスとして認識されるので、
(1)その都度出力先を指定するか、
(2)デフォルトの出力先をUSBスピーカーに切り替える必要があります。
以下に、それぞれの方法を示します。

(1)再生時にコマンドで毎回出力先を設定する方法

事前確認で、カード1のデバイス0として認識されているので、オプションとして出力先を指定します。

WAVEファイルの場合は、
[code]aplay -D hw:1,0 test.wav[/code]

MP3ファイルの場合は、
[code]mpg321 -a hw:1,0 test.mp3[/code]

これだけで簡単に音を出すことができます。

モノラル音声で失敗する場合の対処法

ステレオスピーカーにモノラル音声をそのまま出力しようとすると以下のように再生できません。

[highlight_bash]$ aplay voice.wav
再生中 WAVE 'voice.wav’ : Signed 16 bit Little Endian, レート 48000 Hz, モノラル
aplay: set_params:1305: チャネル数が使用不可能[/highlight_bash]

そのような場合には、plugを追加することで再生できるようになります。

[highlight_bash]$ aplay -D plughw:1,0 voice.wav
再生中 WAVE 'voice.wav’ : Signed 16 bit Little Endian, レート 48000 Hz, モノラル[/highlight_bash]

 

(2)Audio Device Settings でデフォルトの出力先として指定する方法

毎回出力先を指定するのは面倒なので、GUIの設定ツールを使ってデフォルトをUSBスピーカーにしてしまいます。

ラズパイのメニューから、設定Audio Device Settings を起動します。

一番上の「サウンドカード」というドロップダウンメニューをクリックして、「Audio Advantege MicroII (Alsa mixer)」を選択します。

一番下に並ぶ3つのボタンの真ん中「Make Default」を押して、選択したサウンドカードの右端に「(Default)」と表示されたら、「OK」を押して完了です。

あとは、以下のように再生するだけです!
[code]aplay test.wav[/code]
[code]mpg321 test.mp3[/code]

 

Raspberry Pi Zero の場合

ラズパイ3と同様に確認してみます。

$ lsusb
 Bus 001 Device 002: ID 0d8c:0103 C-Media Electronics, Inc. CM102-A+/102S+ Audio Controller
 Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
$ aplay -l
 **** ハードウェアデバイス PLAYBACK のリスト ****
 カード 1: MicroII [Audio Advantage MicroII], デバイス 0: USB Audio [USB Audio]
 サブデバイス: 1/1
 サブデバイス #0: subdevice #0

ラズベリーパイZeroには標準の音声出力装置がなく、USBスピーカーだけが認識されているので、特に何も設定する事無く再生することができてしまいました!

[code]aplay test.wav[/code]
[code]mpg321 test.mp3[/code]

もし他のサウンドデバイスを追加している場合は、ラズパイ3Bと同様にAudio Device Settingsで設定すれば良いと思います。

 

まとめ

ラズベリーパイのDesktop環境であれば、Audio Device Settings を使う事で簡単にUSBスピーカーをデフォルトの出力先に設定してオーディオファイルを再生できるようになります。みなさんお試しあれ!

D005

Raspberry Pi

Posted by まーく