Raspberry Pi HDMI オーディオで MPD を鳴らす

10月に送って来た Raspberry Pi が、やっと使い物になりました。写真は純正のケースに収めたところ。カードサイズというウリでしたので、本物カードと並べてみました。

玉砕その1
最初に XBMC のディストロ、Raspbmc をインストールしてみました。いや、いいんですよ。ちゃんと動きました。YouTube でとってきたようなビデオが再生できました。プロジェクターで、120インチスクリーンにフルHDで再生。とても良かったです。問題は音楽再生。ちゃんとウチのライブラリーの flac が再生できました。でも音がねえ。だめです。鑑賞に堪えません。ボツ。それに SIGMA で撮った 4,704×3,136 ピクセルの写真を見ようとするとフリーズしてしまいました。

玉砕その2
それなら音楽再生に特化してみようと、既に我が家でも実績のある MPD に取り組んでみました。Raspberry Pi で動く汎用 Linux として軽そうな Arch Linux ARM を選んだのだが… だめ。MPD をインストールして稼働もできたのですが、Ether が猛烈にエラーを発して音がブチブチです。ハズレの個体でしょうか

さて、本題です。Arch Linux ARM がダメだったのであまり期待していなかったのですが、次に一番標準OSと思われる Raspbian “wheezy” に取り組んだらこれがうまくいったので報告致します。試したのは 2012-12-16 バージョン。実は Ubuntu と混同していたのですがそうではなく一種 Debian でした。インストールの手順自体は省略しますが基本ダウンロードした圧縮イメージを展開してSDカードにベタ書きするだけ。

ディスプレイ、キーボードを接続した状態で作業します。カードにイメージを書き込んで、初回起動時 Rpi-config という設定スクリプトが呼び出されます。ここで下記を設定します。こちらがより親切。

1. expand_rootfs メモリカードを全部使い切るようにこれを実行する。
2. change_timezone Tokyo 時間に合わせる。
3. memory_split GPUに割り当てるメモリは最小にする。
4. ssh あとのメンテに絶対必要。
5. boot_behaviour MPD に Desktop は要らない。Console を選ぼう。
5. update パッケジを最新のものに更新。

あとからでも sudo raspi-config でやり直しできますが、なぜか configure_keyboard はだめでした。

IPアドレスを固定にする。具体的には /etc/network/interfaces ファイルの iface eth0 行を編集します。当方の環境では、オリジナルとの差分下記の通り。オリジナルのファイルは別名で保存。ファイルの編集は nano が便利です。設定作業はどうせ root 権限が必要なので、よそ様のように毎回 sudo sudo とおまじないを唱えるのはアホらしくて、潔く root でログインしています。

# diff interfaces*
4,10c4
< iface eth0 inet static
<     address 192.168.1.5
<     netmask 255.255.255.0
<     broadcast 192.168.1.255
<     gateway 192.168.1.1
<     dns-nameservers 192.168.1.1
<     dns-search isibasi.com
---
> iface eth0 inet dhcp

/etc/hostname, /etc/hosts などはお好みで。

次に MPD をインストールする。
# apt-get update; apt-get install mpd
/etc/mpd.conf の編集。オリジナルとの差分下記の通り。bind_to_address  “localhost” は、コメントアウトしておかないとクライアントからリモートコントロールできません。

# diff /etc/mpd.conf*
82c82
< #bind_to_address              "localhost"
---
> bind_to_address               "localhost"
204,207c204,207
< #     format          "44100:16:2"    # optional
< #     mixer_device    "default"       # optional
< #     mixer_control   "PCM"           # optional
< #     mixer_index     "0"             # optional
---
>       format          "44100:16:2"    # optional
>       mixer_device    "default"       # optional
>       mixer_control   "PCM"           # optional
>       mixer_index     "0"             # optional

最初ヘッドフォンジャックより音を出して動作確認、OK。次にUSBオーディオです。hiFace はやはり ALSA に認識されず、 XMOS USB Audio 2.0 Reference Design の方は認識されました。でも動作は不安定で、無音時でもプチプチノイズが入り、音を鳴らしても当然濁って汚い。バスパワーでないセルフパワーのUSBアダプタ、家にあった EDIROL UA-5 に接続すると、今度はきれいに鳴りました。他所の情報では Raspberry Pi の電源ラインにはフューズが入っていて3~4Ωの抵抗があるとか。バスパワーUSBアダプタには給電が不安定と思われます。で、EDIROL UA-5 って、Raspberry Pi 本体よりずっとデカい。似つかわしくない大袈裟なシステムになってしまいます。

そもそも Raspberry Pi には HDMI というデジタル音声出力があるじゃないですか。HDMI で鳴らすのが Raspberry Pi を使う正しい作法と思います。HDMI 音声出力はデフォルトでは何デシベルか(失念しました)減弱されています。音圧が下がるだけでなく質的にも損なわれています。なのでこれを 0dB に矯正します。
# amixer set PCM 0dB
一度実行すると、次に起動したときも設定は保存されているようでした。
HDMI 出力ですからAVセンターにつなぐのですが、もう一つの問題はAVセンターの先に何かディスプレイがつながっていなと HDMI から音声が出力されないことです。HDMI は出力側と入力側が通信して解像度などを選ぶ規格なので、これは正しい動作ですね。でも MPD で音だけを出す場合、これは大きなお世話です。よって次はディスプレイをつながずに強制的に HDMI から出力する設定を行います。
まず、映像データに余計な帯域を割り当てない設定です。/boot/config.txt ファイルの下記の2行をコメントアウトします。ちなみにメモリカード上では / (ルート)ディレクトリは第2パーティション (ext4)、/boot ディレクトリは第1パーティション (Fat32) になっています。

hdmi_group=1
hdmi_mode=1

この設定で Raspberry Pi をAVセンターにつなぎ、AVセンターに HDMI ディスプレイをつないで正しく音と映像(といってもコンソール画面)が出ることを確認してください。この状態で下記を実行すると、HDMI 出力の状況が edid.dat というバイナリファイルに保存されます。

# tvservice -d edid.dat

これを /boot ディレクトリに保存します。再度 /boot/config.txt を編集します。

hdmi_force_hotplug=1 行をコメントアウト、
hdmi_edid_file=1 行を追加。

config.txt は殆どコメント行で、コメントでない行だけ剥ぎとってみると下記の通り。

# grep ^[^#] config.txt
hdmi_force_hotplug=1
hdmi_edid_file=1
hdmi_group=1
hdmi_mode=1
gpu_mem=16

重要なのは2行目の hdmi_edid_file=1 です。これで次回よりブート時 /boot/edid.dat を読み取って、ディスプレイがつながっていなくとも HDMI から強制的に出力してくれます。当初 hdmi_force_hotplug=1 と他のパラメータを組み合わせてみてもだめでした。最後の行は、GPUに最低の 16 MB のメモリを割り当てるという意味です。

これで無事に期待通りの動作でAVセンターにつないで MPD を鳴らすことができました。音はまあまあまともですが先のシステムよりは明らかに劣ります。もうひとつの問題点はクライアントソフトからシャットダウンはできないので通常電源ブチ切り。いつかファイルシステムが破壊される恐れがあるので、動作するようになったカードのイメージは dd して保存しておきました。

コメント

  1. angrod より:

    raspbian の新しいバージョン、2013-02-09-wheezy-raspbian が出ていたので追試しました。edid.dat を含め、設定ファイルが全てそのまま使いまわしできたので、上記作業は引き続き全て有効であると思われます。
    新規インストールとなったので確認しましたが、音声出力はデフォルトで 80 %, – 17.25 dB でした。
    ローカルにデータベース更新を行うコマンドは
    # mpc update
    ですが、mpc は mpd とは別途インストールが必要です。クライアントからもポチッとできるので、わざわざインストールする必要もないかも。

タイトルとURLをコピーしました