出力が複数あるサウンドデバイスの出力先を指定する

先日、mpd パッケージを使ってネットワークプレーヤーにしている SBC(Orange Pi One)の OS バージョンアップしました。
その後、いつもじゃないけど音が出なくなることが発生... したので、その原因と対策について記載してます。

ArmbianのN/W設定はNetplanになっていた – あららぼ

  • バージョンアップ前
    Armbian 25.2.2 bullseye \l
  • バージョンアップ後
    Armbian 25.11.2 trixie \l

結論

mpd の設定ファイルで、デバイスの指定を番号からデバイス名へ変更した。
※OS 起動時のデバイス認識順で番号が変わってしまうため。

環境

$ cat /etc/issue
Armbian 26.2.1 trixie \l 

構成

  • SBC Orange Pi One -> USB-DDC FX-D03J -> アンプ -> スピーカー
    ※USB-DDC の出力には TOSLINK と同軸デジタルがあり、アンプとの接続には TOSLINK を使用。

現象

音が出ないときは、アンプが信号を受け取れていない(USB-DDC との接続が確立していない)ので、aplay -l で再生デバイスのリストアップ。
※最後の card 1 は HDMI なので今回は関係なし。

  • 使うコマンド

    $ aplay --help
    Usage: aplay [OPTION]... [FILE]...
    -h, --help              help
        --version           print current version
    -l, --list-devices      list all soundcards and digital audio devices
    -L, --list-pcms         list device names
    ...
  • 音出ないとき

    $ aplay  -l
    **** List of PLAYBACK Hardware Devices ****
    card 0: Audio [NFJ USB Audio], device 0: USB Audio [USB Audio]
      Subdevices: 1/1
      Subdevice #0: subdevice #0
    card 0: Audio [NFJ USB Audio], device 1: USB Audio [USB Audio #1]
      Subdevices: 1/1
      Subdevice #0: subdevice #0
    card 1: sun9ihdmi [sun9i-hdmi], device 0: SUN9I-HDMI PCM i2s-hifi-0 [SUN9I-HDMI PCM i2s-hifi-0]
      Subdevices: 0/1
      Subdevice #0: subdevice #0
  • 音出たとき

    $ aplay  -l
    **** List of PLAYBACK Hardware Devices ****
    card 0: Audio [NFJ USB Audio], device 0: USB Audio [USB Audio]
      Subdevices: 0/1
      Subdevice #0: subdevice #0
    card 0: Audio [NFJ USB Audio], device 1: USB Audio [USB Audio #1]
      Subdevices: 1/1
      Subdevice #0: subdevice #0
    card 1: sun9ihdmi [sun9i-hdmi], device 0: SUN9I-HDMI PCM i2s-hifi-0 [SUN9I-HDMI PCM i2s-hifi-0]
      Subdevices: 1/1
      Subdevice #0: subdevice #0

分かりづらいけど Subdevices の値が違う...

原因

Subdevices の値が違うとスピーカーから音が出ない。
そしてこれは、/etc/mpd.conf に設定した値と関係している。

    device      "hw:1,0"  # optional

この値を hw:1,0 にして、mpd サービス再起動すれば音が出るので、SBC とアンプとの間に挟んだ USB-DDC FX-D03J の出力先が切り替わってしまうことが原因。

要因としては、OS 起動時にデバイス認識される順番が入れ替わる(サウンドモジュールの認識順)ということになるので、mpd.conf でのデバイス指定を番号から名称へ変更すれば OK なはず。

対応

  • デバイス名を確認。今回は下記例だと iec958:CARD=Audio,DEV=0
    ※試してないけど、たぶん DEV=1 が同軸デジタルっぽい。

    $ aplay -L
    null
        Discard all samples (playback) or generate zero samples (capture)
    default
        Default Audio Device
    sysdefault
        Default Audio Device
    ...
    iec958:CARD=Audio,DEV=0
        NFJ USB Audio, USB Audio
        IEC958 (S/PDIF) Digital Audio Output
    iec958:CARD=Audio,DEV=1
        NFJ USB Audio, USB Audio #1
        IEC958 (S/PDIF) Digital Audio Output
    ...
  • 番号からデバイス名へ置換

    $ diff -u mpd.conf /etc/mpd.conf 
    --- mpd.conf    2026-05-05 19:38:54.623906986 +0900
    +++ /etc/mpd.conf   2026-05-05 19:39:14.423660898 +0900
    @@ -234,7 +234,7 @@
     audio_output {
        type        "alsa"
        name        "My ALSA Device"
    -   device      "hw:1,0"  # optional
    +   device      "iec958:CARD=Audio,DEV=0" # optional
        mixer_type      "software"    # optional
             format          "96000:16:2"
        mixer_device    "default" # optional
  • サービス再起動

    $ systemctl restart mpd

これで音が出れば OK。
音が出なかったらデバイス名を変えてリトライ。