Raspberry Pi 3とポタアンでNASの音楽を再生するネットワークオーディオプレーヤーを作った(その2)
安西先生「諦めたらそこでお小遣い無駄になりますよ。」
前回までのあらすじ
ひとことで言うと
スマホにポタアンを付けて音楽を聴いていたのだけれども自宅でしか聴かないのにそれだと重くね?っちゅうことでRaspberry Pi 3を用いた新たなソリューションを検討したのだがカンタンにはいかなかった。お父さんのお小遣いは
一体どうなってしまうのか?
構成
やりたい構成をおさらい。
QNAP | 音源ファイル(mp3)が格納されている |
Raspberry Pi 3 | NAS上の音源ファイルを再生する |
Anker PowerCore 20100 | Raspberry Pi 3に電源供給する |
DENON DA-10 | USB-DAC兼ポタアンとして音声出力する |
Smartphone | Raspberry Pi 3を操作する |
Ponkotsu | 音楽を楽しむ |
こんな感じでスマホを片手に音楽を楽しむのが最終形態だ。その為の要となるのが「Raspberry Pi 3」であり、これをネットワークオーデイオプレーヤー(NAP)としてイチから設定するのが今回の目標。
OSインストール
今回は公式のコチラ。
"デスクトップなんて飾りですよ。"ということで「RASPBIAN JESSIE LITE」をチョイス。
イメージ書き込んだmicroSDとLANケーブルを接続してRaspberry Pi 3を起動。Raspbianも「raspberrypi.local」でアクセスできるという情報を見つけたが、
$ ping raspberrypi.local ping 要求ではホスト raspberrypi.local が見つかりませんでした。ホスト名を確認して もう一度実行してください。
ということで、DHCPのアドレス割当範囲でping乱れ打ちで見つける。
以降の作業は漢は黙ってssh接続。接続に用いるソフトはお好みでどうぞ。
Raspbianの場合は以下アカウントでログインする。
user | pi |
pass | raspberry |
環境更新
各種環境を最新にする。
2016/08/20更新) ファーム更新後にパッケージ更新をするとカーネルが古く戻されるので実施する順番を変えました。
パッケージ更新
$ sudo apt-get update $ sudo apt-get upgrade
ファーム更新
$ sudo apt-get install rpi-update $ sudo rpi-update $ sudo sync $ sudo reboot
ネットワーク設定
WiFiの設定。「SSID」と「PASS」は各自の環境に合わせて変更すること。
チャンネル設定
無線LAN(2.4GHz)のチャンネル設定は各国によって異なるのだが、デフォルトだと12chと13chが使えない(US設定?)
変更前
$ sudo iwlist wlan0 channel wlan0 11 channels in total; available frequencies : Channel 01 : 2.412 GHz Channel 02 : 2.417 GHz Channel 03 : 2.422 GHz Channel 04 : 2.427 GHz Channel 05 : 2.432 GHz Channel 06 : 2.437 GHz Channel 07 : 2.442 GHz Channel 08 : 2.447 GHz Channel 09 : 2.452 GHz Channel 10 : 2.457 GHz Channel 11 : 2.462 GHz Current Frequency:2.447 GHz (Channel 8)
変更方法
「raspi-config」で設定する。
$ sudo raspi-config
- 「5 Internationalisation Option」
- 「I4 Change Wi-fi Country」
- 「JP Japan」
メイン画面に戻って<Finish>で変更を保存してリブート。
変更後
$ sudo iwlist wlan0 channel wlan0 14 channels in total; available frequencies : Channel 01 : 2.412 GHz Channel 02 : 2.417 GHz Channel 03 : 2.422 GHz Channel 04 : 2.427 GHz Channel 05 : 2.432 GHz Channel 06 : 2.437 GHz Channel 07 : 2.442 GHz Channel 08 : 2.447 GHz Channel 09 : 2.452 GHz Channel 10 : 2.457 GHz Channel 11 : 2.462 GHz Channel 12 : 2.467 GHz Channel 13 : 2.472 GHz Channel 14 : 2.484 GHz Current Frequency:2.447 GHz (Channel 8)
13chと14chが利用可能になった。
WiFi接続設定
Raspberry Pi 3の内蔵WiFiは「IEEE 802.11bgn」なので接続するWiFiのアクセスポイントも2.4GHzで接続できるモノでないと駄目。
$ sudo -s # wpa_passphrase SSID PASS > /etc/wpa_supplicant/wpa_supplicant.conf
接続対象のアクセスポイントがステルスSSIDの場合は「scan_ssid=1」を追記しないと駄目。
# vi /etc/wpa_supplicant/wpa_supplicant.conf
- /etc/wpa_supplicant/wpa_supplicant.conf
network={ ssid="SSID" #psk="PASS" psk=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx scan_ssid=1 }
WiFiデバイス設定
デフォルトだとWiFiのパワー・マネージメントが有効なので、後々困らないように無効化。
# iwconfig wlan0 wlan0 IEEE 802.11bgn ESSID:off/any Mode:Managed Access Point: Not-Associated Tx-Power=31 dBm Retry short limit:7 RTS thr:off Fragment thr:off Encryption key:off Power Management:on
# vi /etc/network/interfaces
「wireless-power off」を追記する。
- /etc/network/interfaces
allow-hotplug wlan0 iface wlan0 inet manual wireless-power off wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
固定IP設定
Debian「jessie」からは固定IP設定は「/etc/network/interfaces」ではなくなったらしい。知らんかった。
# vi /etc/dhcpcd.conf
末尾に追記する。以下は各自の環境にあわせて変更。
IPアドレス | 192.168.0.xx |
ネットマスク | 24(255.255.255.0) |
デフォルトゲートウェイ | 192.168.0.1 |
DNSサーバ | 8.8.8.8 |
- /etc/dhcpcd.conf
# static ip for wlan0 interface wlan0 static ip_address=192.168.0.xx/24 static routers=192.168.0.1 static domain_name_servers=8.8.8.8
# reboot
リブート後にWiFiに設定した固定IPでssh接続してパワー・マネージメントが無効なら問題なし
$ sudo iwconfig wlan0 wlan0 IEEE 802.11bgn ESSID:"SSID" Mode:Managed Frequency:2.447 GHz Access Point: xx:xx:xx:xx:xx:xx Bit Rate=72.2 Mb/s Tx-Power=31 dBm Retry short limit:7 RTS thr:off Fragment thr:off Encryption key:off Power Management:off Link Quality=70/70 Signal level=-22 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0
ということでネットワーク設定完了。
Bluetooth無効化
ついでに今回の構成では使うことはないのでBluetoothを停止しておく。
停止前
$ lsmod | grep bt btbcm 5929 1 hci_uart bluetooth 326105 22 bnep,btbcm,hci_uart $ systemctl status hciuart ● hciuart.service - Configure Bluetooth Modems connected by UART Loaded: loaded (/lib/systemd/system/hciuart.service; enabled) Active: active (running) since Tue 2016-08-16 01:56:57 UTC; 7min ago Process: 310 ExecStart=/usr/bin/hciattach /dev/serial1 bcm43xx 921600 noflow - (code=exited, status=0/SUCCESS) Main PID: 563 (hciattach) CGroup: /system.slice/hciuart.service └─563 /usr/bin/hciattach /dev/serial1 bcm43xx 921600 noflow - $ systemctl status bluetooth ● bluetooth.service - Bluetooth service Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled) Active: active (running) since Tue 2016-08-16 01:56:57 UTC; 5min ago Docs: man:bluetoothd(8) Main PID: 575 (bluetoothd) Status: "Running" CGroup: /system.slice/bluetooth.service └─575 /usr/lib/bluetooth/bluetoothd
停止設定
$ sudo systemctl disable hciuart $ sudo systemctl disable bluetooth $ sudo vi /boot/config.txt
末尾に以下を追記
- /boot/config.txt
# Dsiable bluetooth dtoverlay=pi3-disable-bt
「config.txt」は起動時に適用されるのでリブート
停止後
$ lsmod | grep bt $ systemctl status hciuart ● hciuart.service - Configure Bluetooth Modems connected by UART Loaded: loaded (/lib/systemd/system/hciuart.service; disabled) Active: inactive (dead) $ systemctl status bluetooth ● bluetooth.service - Bluetooth service Loaded: loaded (/lib/systemd/system/bluetooth.service; disabled) Active: inactive (dead) Docs: man:bluetoothd(8)
以上でネットワーク設定は完了。正しく行えていればLANケーブルを抜いてもWiFiの固定IP経由でssh接続できるはずだ。
NASマウント設定
次はNAS上のディレクトリをRaspberry Pi 3から参照できるようにする設定。
マウント先のNASを以下とした場合の例。以下は各自の環境にあわせて変更。
IP | 192.168.0.yyy |
Path | Multimedia/Music |
username | ponkotsu |
password | syorou |
認証が不要の場合はオプションから外すだけだと思われる。
$ sudo mkdir /mnt/nas
$ sudo vi /etc/fstab
- fstab
//192.168.0.yyy/Multimedia/Music /mnt/nas cifs username=ponkotsu,password=syorou,iocharset=utf8,ro,uid=1000,gid=1000,defaults 0 0
マウント先のディレクトリを作成して、「fstab」にNASマウント設定を追記する。なお、オプションは適当なので後で見直す必要があるかも。
ブート設定の変更
これだけだと、WiFiでのネットワーク接続が完了する前にマウント操作が実行されてマウントに失敗するケースがある。そこで、ネットワーク接続完了までブート完了にしないように変更。
$ sudo raspi-config
- 「4 Wait for Network at Boot」
- 「Yes」
メイン画面に戻って<Finish>で変更を保存。
$ sudo reboot
再起動して自動マウントされるか確認。
$ ls /mnt/nas | more くるり アン・ルイス サンボマスター いきものがかり サカナクション ポルノグラフィティ きゃりーぱみゅぱみゅ ミッシェル・ガン・エレファント 1986オメガトライブ/カルロス・トシキ&オメガトライブ 10-FEET
マウントしたディレクトリ内のフォルダ名やファイル名が文字化けしてなければマウントのオプションは多分OK。
オーデイオ設定
USB-DACの利用が前提なので余計なものは無効化しておく。
内蔵サウンドカードの無効化
$ sudo vi /boot/config.txt
以下をコメントアウトすると「snd_bcm2835」がロードされないので無効化される。
- config.txt
# Enable audio (loads snd_bcm2835) # dtparam=audio=on
「config.txt」は起動時に適用されるのでリブート
$ lsmod | grep snd_bcm $ aplay -l aplay: device_list:268: no soundcards found...
これで無効化されている。
USB-DAC(ポタアン)の確認
Raspberry Pi 3でDA-10が認識されるかの確認。
$ dmesg
[ 255.359286] usb 1-1.2: new high-speed USB device number 4 using dwc_otg [ 255.459983] usb 1-1.2: New USB device found, idVendor=154e, idProduct=1003 [ 255.460003] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [ 255.460015] usb 1-1.2: Product: DA-10 [ 255.460027] usb 1-1.2: Manufacturer: D & M Holdings Inc. [ 255.468751] hid-generic 0003:154E:1003.0001: hiddev0,hidraw0: USB HID v1.10 Device [D & M Holdings Inc. DA-10] on usb-3f980000.usb-1.2/input2 [ 255.987621] usbcore: registered new interface driver snd-usb-audio
USB接続して電源をONにするとUSBデバイスとして検出された。
$ aplay -l **** List of PLAYBACK Hardware Devices **** card 1: DA10 [DA-10], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0
ALSAのサウンドデバイスとしても認識されている。ということで特に特別な設定は不要だった。
MPDインストール
VolumioやRuneAudio、その他のオーデイオ系ディストリビューションはMPDを用いて音源再生しているので、今回もそれにならいMPDを手動でインストールして設定する。
$ sudo apt-get install mpd mpc
mpcというのはmpdを操作するためのコマンドラインインタフェース(CLI)。
ディレクトリ設定
マウントしたNASのディレクトリをMPDから閲覧できるようにシンボリックリンクを作成。
$ sudo ln -s /mnt/nas /var/lib/mpd/music/.
データベースの更新
MPDはデータベースで楽曲を管理するのでデータベース更新してNASのディレクトリ上の楽曲を登録する。
$ mpc update Updating DB (#2) ... volume: 77% repeat: off random: off single: off consume: off
「mpc update」で手動でデータベース更新できる。
$ mpc status Updating DB (#2) ... volume: 77% repeat: off random: off single: off consume: off
「mpc status」でデータベース更新中かわかる。
$ mpc ls nas nas/The Black Crowes nas/The Strokes nas/SPYAIR nas/Velvet Revolver nas/Dave Navarro nas/サンボマスター nas/NoFX (snip)
「mpc ls」で現在データベースに登録されている楽曲がわかる。
$ mpc status volume: 77% repeat: off random: off single: off consume: off
更新が完了すると"Updating DB"の出力がなくなる。
MPDの設定
インストール直後のMPDはマシン内からしかアクセスできず、再生するサウンドデバイスの設定もされていない。ので設定を変更する。
$ sudo vi /etc/mpd.conf
--- mpd.conf.org 2016-08-15 14:24:43.175650809 +0000 +++ mpd.conf 2016-08-15 14:25:59.285650780 +0000 @@ -80,7 +80,7 @@ # to have mpd listen on every address # # For network -bind_to_address "localhost" +bind_to_address "0.0.0.0" # # And for Unix Socket #bind_to_address "/run/mpd/socket" @@ -88,7 +88,7 @@ # This setting is the TCP port that is desired for the daemon to get assigned # to. # -#port "6600" +port "6600" # # This setting controls the type of information which is logged. Available # setting arguments are "default", "secure" or "verbose". The "verbose" setting @@ -210,8 +210,8 @@ # audio_output { type "alsa" - name "My ALSA Device" -# device "hw:0,0" # optional + name "DENON DA-10" + device "hw:1,0" # mixer_type "hardware" # optional # mixer_device "default" # optional # mixer_control "PCM" # optional
「audio_output」の「device」は「aplay -l」で出力された情報を基に設定する。今回は以下となるので、
$ aplay -l **** List of PLAYBACK Hardware Devices **** card 1: DA10 [DA-10], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0
card | 1 |
device | 0 |
deviceに「hw:1,0」を指定する。
$ sudo service mpd restart
設定反映するためにmpdを再起動。
再生確認
MPD自体は楽曲再生に特化したサーバソフトなのでブラウザから操作するためのUIは公式に提供されない。勿論sshでmpcコマンドを使えば操作できるのだがそんなことスマホからするのは流石に厳しい。世の中には沢山のMPD操作用アプリが存在するのでそれを利用すればよい。
MPDroid(Androidアプリ)
https://play.google.com/store/apps/details?id=com.namelessdev.mpdroid&hl=japlay.google.com
今回はXperia Z3(SOL26)から操作したいのでコチラをインストール。
「Settings」からMPDのIPをアドレスとポート番号を設定
Host | 192.168.0.xx(Raspberry Pi 3のIPアドレス) |
Port | 6600 |
データベースに登録された楽曲が表示される。
曲を選択して再生を開始するとRaspberry Pi 3に接続されたDA-10から音が出力される。
ふう。完成だ。
第2形態
いつまでもRaspberry Pi 3を裸運用するのは面倒なのでケースにいれよう。
waves Raspberry Pi 3 Model B 用 ケース ヒートシンク 3点付 Pi2 共用 国内発送 黒
- 出版社/メーカー: waves(ウェイブス)
- メディア: エレクトロニクス
- この商品を含むブログを見る
Amazonの製品写真と違ってアクリル板が曇っているが、実は説明書がついてなかったので保護シート付きのまま組み立ててしまった時の写真だ。保護シートとればツルツルだし黒の板もダンボール色と言われているのは保護シートなので安心してほしい*1。
こんな感じで接続して…
こうやって聴くのだ!
備考
とりあえず環境はできたのだが、どうもRaspberry Pi 3の内蔵WiFiは電波が弱いらしく、電波状況次第でNAS上の音源の再生が停止してしまうケースに遭遇した*2。今後ファーム更新で改善されるかもしれないし、基板構造上の問題で解決しない可能性もある。その場合は内蔵WiFiは使わずにUSBタイプを使うほうが良いかもしれない。有線LANで運用する場合には問題ないと思うが、WiFi運用を検討している場合は注意してほしい。