chakokuのブログ(rev4)

日々のごった煮ブログです

Pi Zeroで音を鳴らす

Pi Zeroによるアプリケーションとして、勝手にググってきて何かを勝手に喋ってるシステムの構築を目指しているので、音声再生の手段が必要。PiZeroでもOSレベルでは他のラスパイと同じと思われ、ネット上に公開されている先人の音声再生に関する情報に従い設定を行う。
USBポートがそもそも足りないので、USBハブを購入。商品名:「iBUFFALO タブレットスマホUSB2.0 4ポートハブ 変換コネクター付き ブラック BSH4UMB04BK」。このタイプは、mircoBで結合できるので変換コネクタが不要。

音声再生手段は以前BeagleBoneで使っていた、SoundBlaster Play!を流用する(Linuxの音声再生で安定した動作が可能)。USBハブをPi Zeroにさして、無線LANと、SoundBlasterをさす。そしてブート

aplayコマンドを打ってOSがデバイスを認識しているか確認(これ以降はすべてルート権限で実行しています。ユーザ権限でデバイス使えるかどうかしっかり確認していないので、まずはルートで確認)

root@raspberrypi:~# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
  Subdevices: 8/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
  Subdevice #7: subdevice #7
card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: U0x41e0x30d3 [USB Device 0x41e:0x30d3], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

USBAudioと表示される、Card:1、Device:0がSoundBlasterと思われる。

本来は、/proc/asound/cardsを見るべきか。こっちが大元の情報だろう多分。

$ cat /proc/asound/cards
 0 [ALSA           ]: bcm2835 - bcm2835 ALSA
                      bcm2835 ALSA
 1 [U0x41e0x30d3   ]: USB-Audio - USB Device 0x41e:0x30d3
                      USB Device 0x41e:0x30d3 at usb-20980000.usb-1.2, full speed


併せて録音デバイスも確認

root@raspberrypi:~# arecord -l
**** List of CAPTURE Hardware Devices ****
card 1: U0x41e0x30d3 [USB Device 0x41e:0x30d3], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

以下のコマンドでWAVファイルが再生できるのを確認(wgetSonyのPCMサンプル音源を取得、aplayで再生)

cd /tmp
wget http://www.sony.jp/ic-recorder/sound-compare/pcm/wav/band/middletempo/PCM-D50.wav
aplay -D plughw:1,0 PCM-D50.wav

ハイレゾ音源データ(flac形式)を再生するには、VLCを使うのがいいようだ。
以下で録音もできるはずだが。。テスト未実施

arecord -D plughw:1,0 -f cd test.wav

VLCを入れてみる
あまり考えず(調査せず)、VLCをパッケージでインストール

 sudo apt-get install vlc

file:/etc/asound.confを以下の内容で設定。asound.confが必須なのかどうか分かりませんが、cvlcでコマンド引数をいろいろ試したけどどうやっても音が出なかったので、ラズパイフォーラムのコメントに従ってみた。

pcm.!default {
        type hw
        card 1
}

ctl.!default {
        type hw
        card 1
}

上記設定で、card 1にしているのは、aplay -lでSoundBlasterがcard 1になっているから

ハイレゾ音源をSonyのサイトからDLして、cvlc(Command Live版 VLC)を起動。cvlc起動時、いろいろエラーが出たがハイレゾ音源のサンプルは再生できた。

wget http://helpguide.sony.net/high-res/sample1/v1/data/Sample_BeeMoved_96kHz24bit.flac.zip
unzip Sample_BeeMoved_96kHz24bit.flac.zip
cvlc Sample_BeeMoved_96kHz24bit.flac

Shureの密閉型ヘッドフォンで聴くと確かに音の抜けが良いようには思う。だけど本格的なオーディオセットではないので、音の情報量が多いのかどうかは不明。

■参考URL
ラズパイフォーラム;VLCで音が出ないQA(asound.confが必要とのコメントあり)
https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=11605

Sonyハイレゾ音源サンプルサイト
http://helpguide.sony.net/high-res/sample1/v1/ja/

VLC CommandLine Wiki
https://wiki.videolan.org/Documentation:Command_line

http://kogelog.com/2014/09/23/20140923-02/