Armbianでミュージックサーバ

2020.11.7 追記
DENON DCD-1500RE で接続検証をページ末尾に追加しました。

以前、手持ちのシングルボードコンピュータでミュージックサーバを立ち上げる際、手軽な DietPi を利用して構築しました。

その後、NanoPi NEO(DietPi-HiFi)は使わなくなりました。
シングルボードコンピュータは(だいたいが本体に電源ボタンがないため)リビングに置くには、ちょっと不便と感じています。
電源 OFF 後に再度電源投入する際は、電源ケーブルなりを抜き差ししないといけないので。。。

結局、スマホの Bluetooth で飛ばすような生活になりました。

そうはいっても、スマホに楽曲を入れておくのは容量的にも厳しくなってきたので、(リビングではなく)自室用に再度シングルボードコンピュータで構築することにしました。

今回はケースの見栄えの問題で、Nano Pi NEO ではなく Orange Pi One にしました。

目次

環境

今回は自室なので CD レシーバで鳴らします。

環境構築

準備

事前に Orange Pi One に Armbian を導入後、アップデートと最低限の設定(タイムゾーンや IP アドレス)を済ませておきます。

mpd・mpc インストール

以下をインストールします。

  • mpd
    Music Player Daemon(ミュージック・プレイヤ・デーモン)の略で、ミュージックサーバ本体になります。
  • mpc
    mpd をコントロール(操作)するための CUI クライアントです。
    特にこれと言って用途は思いつかないのですが、テスト用に入れておきます。
    ※たぶん、クライアントソフトから操作することになりそうなので。
$ sudo apt install mpd mpc -y

USB-DDC の確認

USB-DDC を接続する前は、HDMI のみ認識されています。

$ aplay -l
**** ハードウェアデバイス PLAYBACK のリスト ****
カード 0: sun8ih3hdmi [sun8i-h3-hdmi], デバイス 0: 1c22800.i2s-i2s-hifi i2s-hifi-0 [1c22800.i2s-i2s-hifi i2s-hifi-0]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0

USB-DDC を接続すると、追加されます。

$ aplay -l
**** ハードウェアデバイス PLAYBACK のリスト ****
カード 0: sun8ih3hdmi [sun8i-h3-hdmi], デバイス 0: 1c22800.i2s-i2s-hifi i2s-hifi-0 [1c22800.i2s-i2s-hifi i2s-hifi-0]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
カード 1: Audio [NFJ USB Audio], デバイス 0: USB Audio [USB Audio]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
カード 1: Audio [NFJ USB Audio], デバイス 1: USB Audio [USB Audio #1]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0

mpd 設定確認

mpd の設定ファイルは以下に作成されました。

  • /etc/mpd.conf

以下を編集しています。

  • bind_to_address
    許可する ip アドレス。
  • port
    クライアントツールから接続する際に使うポートを指定。
  • auto_update
    mpd データベースを自動で更新するか。
    ※私は yes にしましたが、結局クライアントツールから都度更新しているので、いらない気がしています。
  • device
    デバイス情報です。
    上記 aplay コマンドの結果を元に編集します。
    深く考えずにトライ&エラーするのも手です。
  • mixer_type
    音量をクライアントツールから行う場合は software を指定します。
  • format
    音声の出力フォーマットです。
    下記例(format "96000:16:2")だと以下のようになります。

    • サンプリング周波数: 96kHz
    • 量子化ビット数: 16bit
    • チャンネル数: 2チャンネル
$ diff -u /root/mpd.conf /etc/mpd.conf 
--- /root/mpd.conf  2020-09-11 21:54:33.002606752 +0900
+++ /etc/mpd.conf   2020-09-11 22:21:22.554433892 +0900
@@ -82,7 +82,7 @@
 # activation is in use.
 #
 # For network
-bind_to_address        "localhost"
+bind_to_address        "any"
 #
 # And for Unix Socket
 #bind_to_address       "/run/mpd/socket"
@@ -90,7 +90,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
@@ -121,7 +121,7 @@
 # This setting enables automatic update of MPD's database when files in
 # music_directory are changed.
 #
-#auto_update    "yes"
+auto_update    "yes"
 #
 # Limit the depth of the directories being watched, 0 means only watch
 # the music directory itself.  There is no limit by default.
@@ -239,8 +239,9 @@
 audio_output {
    type        "alsa"
    name        "My ALSA Device"
-#  device      "hw:0,0"  # optional
+   device      "hw:1,0"  # optional
 #  mixer_type      "hardware"      # optional
+   mixer_type      "software"      # optional
+   format      "96000:16:2"
 #  mixer_device    "default" # optional
 #  mixer_control   "PCM"     # optional
 #  mixer_index "0"       # optional

mpd 起動確認

ステータスを確認すると、起動していません。
どうも log ファイルを作成できずにエラーになっているようです。

$ sudo systemctl status mpd
● mpd.service - Music Player Daemon
   Loaded: loaded (/lib/systemd/system/mpd.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Fri 2020-09-11 22:01:51 JST; 1min 35s ago
     Docs: man:mpd(1)
           man:mpd.conf(5)
           file:///usr/share/doc/mpd/user-manual.html
  Process: 1482 ExecStart=/usr/bin/mpd --no-daemon $MPDCONF (code=exited, status=1/FAILURE)
 Main PID: 1482 (code=exited, status=1/FAILURE)

 9月 11 22:01:50 orangepione systemd[1]: Starting Music Player Daemon...
 9月 11 22:01:51 orangepione mpd[1482]: exception: failed to open log file "/var/log/mpd/mpd.log" (
 9月 11 22:01:51 orangepione systemd[1]: mpd.service: Main process exited, code=exited, status=1/FA
 9月 11 22:01:51 orangepione systemd[1]: mpd.service: Failed with result 'exit-code'.
 9月 11 22:01:51 orangepione systemd[1]: Failed to start Music Player Daemon.
...skipping...
● mpd.service - Music Player Daemon
   Loaded: loaded (/lib/systemd/system/mpd.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Fri 2020-09-11 22:01:51 JST; 1min 35s ago
     Docs: man:mpd(1)
           man:mpd.conf(5)
           file:///usr/share/doc/mpd/user-manual.html
  Process: 1482 ExecStart=/usr/bin/mpd --no-daemon $MPDCONF (code=exited, status=1/FAILURE)
 Main PID: 1482 (code=exited, status=1/FAILURE)

 9月 11 22:01:50 orangepione systemd[1]: Starting Music Player Daemon...
 9月 11 22:01:51 orangepione mpd[1482]: exception: failed to open log file "/var/log/mpd/mpd.log" (
 9月 11 22:01:51 orangepione systemd[1]: mpd.service: Main process exited, code=exited, status=1/FA
 9月 11 22:01:51 orangepione systemd[1]: mpd.service: Failed with result 'exit-code'.
 9月 11 22:01:51 orangepione systemd[1]: Failed to start Music Player Daemon.

というわけで、所定の位置にフォルダを作って、ファイルも作成しておきます。
今度は起動できました。

$ mkdir /var/log/mpd
$ touch /var/log/mpd/mpd.log
$ sudo systemctl start mpd.service

課題

Orange Pi One は USB ポートが 1つしか無い、且つ Wi-Fi 非搭載モデルなので、しかたなく有線 LAN 接続することにしました。
USB-OTG が 1ポートあるのに、使えなかった...(通電すらしなかった)。

DENON DCD-1500RE で接続検証

  • Orange Pi One
    • DCD-1500RE ※DENON CDプレーヤ

普通に動きました。
なお、96kHz で検証。
機会があったら、192kHz でも検証したい...

以下、aplay コマンドの結果。
きちんと DCD-1500RE 表示されていますね。

# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: sun4icodec [sun4i-codec], device 0: CDC PCM Codec-0 [CDC PCM Codec-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: DCD1500RE [DCD-1500RE], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0