2015年3月28日土曜日

Raspberry Pi 2 とフリスクDACでオーディオメディアサーバー

自宅サーバーをRaspberry pi 2 にしたら、メディアサーバーにしてみたくなって実際にやってみた記録です。
Raspberry Pi 2 はHDMIケーブルや3.5mmのミニジャックから音声出力が可能です。USBでDACを接続すれば音質の向上も期待できるはず。

今回は最近ちらほら話を聞くようになったMusic Player Daemon (MPD)を使います。 MPDとは、LinuxやUNIXで動作する、オーディオファイルを再生したりプレイリストを管理したりするデーモンです。 よく使われる FLAC, MP3, MP4/AAC, Ogg Vorbis, wave 辺りのサポートは万全なので安心。 DACがサポートしていればハイレゾ音源もいけるらしいですね。そんなモノ持ってないけど。

準備

音声の出力先から実際に音が出るようにしておきます。 いきなりUSB-DACを繋ぐと上手くいかなかったときに問題の切り分けが面倒なので、まずは Raspberry Pi 2 標準搭載の音声出力で試します。
NOOBSからのインストールで特に変更していなければ、デフォルトでHDMIか3.5mmのいずれかが自動で使われるようです。
設定の変更は raspi-config > 8 Advanced Options > A9 Audio から。
テレビとかにHDMIで繋いで作業しているなら何もしなくていいです。

MPDインストール

mpd と mpc をインストールします。mpcはCLIのmpdクライアント。動作の確認に便利なのでmpdと一緒にインストールします。

$ sudo apt-get install mpd mpc

mpdの設定ファイルを書き換えます。
/etc/mpd.conf

music_directory       "/mnt/data/music"
playlist_directory    "/mnt/data/playlists"
db_file               "/mnt/data/mpd/tag_cache"
log_file              "/mnt/data/mpd/mpd.log"
sticker_file          "/mnt/data/mpd/sticker.sql"
#bind_to_address      "localhost"
music_directory のフォルダーがメディアファイルの格納場所です。mpdが読めるようにパーミッションを設定します。 playlist_directory, db_file, log_file, sticker_file のファイル/フォルダーはmpdが書き込めるようにパーミッションを設定します。 bind_to_address の行はコメントアウトすればどこからでもTCP経由でコマンドを受け付けるようになります。

とりあえず動かすだけならこの設定だけで十分。mpd.confにはもっと細かい設定があるので man page は読んでおいた方がいいと思う。

mpdを起動します。

$ sudo service mpd start

mpcでmpdにコマンドを送ってみます。

$ mpc ls
music_directory 配下のフォルダーが表示されるはず。

プレイリストに音楽ファイルを登録します。

$ mpc add pops
pops フォルダー以下のすべての音楽ファイルをプレイリストに突っ込みました。

再生!

$ mpc play
簡単!
テンションあがりますね(・∀・)

これだけで、あとはLANに繋がっているマシンにクライアントソフトを入れておけばそこから音楽再生をコントロールできるようになります。 クライアントは Gnome Music Player Client がいいのかな? Windowsなら Auremo もよさげ。Android なら MPDroid とか Droid MPD Client とか。

USB-DACで音を出したい

なんでこんなことを始めたかというと、PU-2111(いわゆるフリスクDAC)が眠っていたからです。
価格の割に良い音が出ると聞いて買ってみて暫く使っていたのですが、音楽周りの環境が変わってから使わなくなってました。

まずデバイスの認識から

とりあえずPU-2111を直接繋いでみたらOSが突然の死。そして奇妙な再起動の連続でまともに起動しなくなりました。 挙動からなんとなく電圧不足のような印象。バスパワーに頼るのはやめて電源付きのUSBハブを経由して接続したら起動しました。 Raspberry Pi の電源に使っていた古いXperiaの付属品では出力不足っぽい? ケチった結果がこれだよ。

$ less /proc/asound/cards
0 [ALSA           ]: bcm2835 - bcm2835 ALSA
                     bcm2835 ALSA
1 [DAC            ]: USB-Audio - USB AUDIO    DAC
                     BurrBrown from Texas Instruments USB AUDIO    DAC at usb-bcm2708_usb-1.4.3, ful
認識されたっぽい。
$ sudo aplay -l
card 1: DAC [USB AUDIO    DAC], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
ALSAでも見えてる。いい感じ。
あ、これは sudo しないと見れません。ちょっとハマった。

デフォルトの再生デバイスにする

モジュール名を調べます

$ cat /proc/asound/modules
0 snd_bcm2835
1 snd_usb_audio

モジュールの優先順位を設定します(optionsの2行を追記)
/etc/modprobe.d/alsa-base.conf

options snd_usb_audio index=0
options snd_bcm2835 index=1

そして再起動してみて…

$ sudo reboot

優先順位が変わってたらOKなのかな?

$ cat /proc/asound/modules
0 snd_usb_audio
1 snd_bcm2835

再生してみます。

$ mpc play
キター!(・∀・)


Linuxのサウンドデバイス周りの知識は皆無でぐーぐる先生を頼りにやっただけなので、これでいいのかちょっと不安だったり……

おまけ: PU-2111でのノイズ

一通り組み上がって配線周りを整理したらピーって高音(4242Hz)のノイズが聞こえるようになりました。それもかなり目立つ音量で。 そういえばこのPU-2111、以前使っていた環境では小さい音ですがサーってタイプのノイズが気になってました。
試しにUSBハブのACアダプタを同じ出力の別のものに変えてみたら聞こえなくなりました。 電子回路はよく分からないけど電源からのノイズを拾いやすいのかもしれません。

0 件のコメント:

コメントを投稿