以下では、ALSA環境においてサウンドデバイスがどのように認識されるかの一例を示します。※要は手持ちのUSB-DACやマザーボードの一例です。R-K731を繋いだ場合を示します。ALSAのバージョンは、1.0.24です。システムが認識したサウンドデバイスは、/proc/asoundにディレクトリができるので、それで確認できます。card0〜card4が認識されたサウンドデバイスを示します。それぞれのデバイスには、ハードウェアから認識されたのでしょうか、機種名を示すようなエイリアスが設定されていてます。card0のエイリアスNVidiaは、ビデオカードのHDMI出力です。ビデオカードは、玄人志向のGF8400GSです。card1のエイリアスCMI8768はサウンドカードです。これも玄人志向のCMI8768を使っています。このカードは、アナログ出力とS/PDIF出力を備えています。card2のエイリアスDACは、DigiFi誌付録のUSB-DACです。-lを実行すると、それぞれのデバイスの概要がわかります。ここで表示されるカード番号、カード名、デバイス番号は、後述するmpd.confで使用します。UD-501については、stream0ファイルで対応フォーマットを確認できます。384000とあり、これで44.1KHz〜384KHzに対応していることがわかります。一世代前のUSB-DACだと、192KHzには対応していても、176.4KHzには対応していないということがありますが、UD-501では両方に対応していることがわかります。EndpointにASYNCとあり、非同期転送に対応していることがわかります。V2TEACのUD-501がDSD11.2MHzに対応するアップデートを行っていますので、僕も申し込んでみました。こちらから送って、一週間ほどで戻ってきました。Ubuntuにつないでみたところ、mpdから音が出ません。なんのことはありません。ALSAのデバイス名が、UD501V2に変わっています。UD501V2のstream0ファイルで対応フォーマットを確認すると、あらたに705.6KHzに対応していることがわかります。再生できることを確認しました。付録D/Dコンバーターを接続した結果です。上と同じく/proc/asoundの中身を確認します。DigiFiのD/Dコンバーターは、Olasonicと表示されています。Olasonicのstream0ファイルで対応フォーマットを確認すると、96KHz/88.2KHz/48KHz/44.1KHzに対応していることがわかります。EndpointにASYNCとあり、非同期転送に対応していることがわかります。2.2をインストールし、そこにLXU-OT2(ステレオ誌付録)を接続した結果です。ALSAのバージョンは、1.0.25です。上と同じく/proc/asoundにディレクトリの中身を確認します。I82801BACHI2は、仮想PCのオンボードサウンド出力です。LXUOT2は、文字通りLXU-OT2です。-lを実行すると、二つのデバイスが表示されます。LXUOT2のstream0ファイルで対応フォーマットを確認すると、32KHz/44.1KHz/48KHzに対応していることがわかります。E45M1-Iには、オンボードでRealtekのALC887が実装されていて、マルチチャンネルのアナログ音声出力とS/PDIFを備えています。ビデオ出力にHDMIも備えています。2.2をインストールしたときのサウンドデバイスの認識結果は以下の通りです。/proc/asoundには、SBとGenericの二つのディレクトリができています。前者はALC887、後者はHDMIです。-lを実行すると、三つのデバイスが表示されます。一つ目はHDMI、二つ目と三つ目はALC887のアナログ出力とS/PDIF出力です。CMI8768ちょっと古いサウンドカードですが、アナログ5.1ch出力とS/PDIF出力を持っています。S/PDIFから出力させる場合、alsamixerで、アナログ出力を全て無効にしないといけないようです。2をインストールしてみました。Volumioも、ベースはDebianなので、コンソールから触る分にはUbuntuとほとんど同じです。Volumioのバージョンは2.185で、mpdのバージョンは0.20.6、ALSAのバージョンはk4.4.9-v7+でした。R-K731を接続子細のaplayの出力は、このようものになりました。ここからもちゃんと音が出ます。5に割り当てられています。GUIから設定を変更すると、その内容/etc/mpd.confに反映されます。手動でmpd.confを手動で編集するのはやらないほうがいいのではないかと思います。同時に複数デバイスに出力させたい場合などは、手動で/etc/mpd.confを編集することになりますが、そういう使い方をする場合は、Raspbianを使ったほうが良いのではないかなと思います。mpd.confの設定サウンド出力先の設定インストール直後のmpd(mpd.conf)の設定では、システムのデフォルトのサウンド出力先がmpdの出力先にもなります。複数のDACを使用する場合や、オンボードサウンドがあるPCでUSBから出力したい場合などは、mpd.confを書き換える必要が出てきます。mpd.confの音声出力先は、デフォルトでは以下のようになっています。Device"}この部分を、使用するサウンドデバイスにあわせて書き換えていきます。複数のサウンド出力先を使用する場合は、上記ブロックを繰り返し記述します。UD-501の記述例です。"none"}上記中、deviceの部分で、サウンドデバイスの指定を行います。ここは、plughwとhwの2種類の指定方法があるそうです。plughwとhwの違いはよくわかりませんが、ググってみると、サンプリングレートの変換を行いつつ再生させたい場合はplughwを使えということのようです。-lで表示されるサウンドデバイス一覧にある、card(カード)番号またはデバイス名、そのデバイス番号を使用します。上述の例だと、UD-501は、hw:UD501,0またはhw:3,0となります。このカード番号については、システムがサウンドデバイスを認識した順序よって変化するようです。サウンドデバイスの検出順序は、/etc/modprobe.d/alsa-base.confでコントロール可能ですが、USB接続された複数のDACの認識順序を変えるのは困難だと思います。サウンドデバイスを検出させたくない場合は、/etc/modprobe.d/blacklist.confにそのデバイスを記述することで対処できるそうです。mixer_typeは、ボリュームコントロールの設定です。noneとしておくと、mpd側でボリュームコントロールができなくなります。テクニカルな話になりますが、mpcbridgeで使用しているPEARのNet_MPDのNet_MPD_Common::getStatus()を実行すると、mpdのステータスが戻ってきます。この中にvolumeというパラメーターがありますが、mpd側でボリュームをコントロールできない場合は-1が戻ってきます。mixer_typeをsoftwareとすると、mpd側でボリュームをコントロールできるようになり、volumeの値は現在のボリューム位置が0〜100の数値として戻ってきます。mixer_typeにhardwareを指定した場合、上記volumeの値が0で戻ってきます。音量を変更することはできません。mpcbridge側は、音量制御可能と判断して、ボリュームコントロールの画面を表示することができますが、実際には音量を変えることはできません。複数のサウンドデバイスが使用可能な状況で、mixer_typeの値にnoneとsoftwareを混在させた場合に、Net_MPD_Common::getStatus()の戻り値がどうなるかは確認していません。R-K731を出力先に指定する場合、mpd.confには以下のように記述します。"none"}上記設定を行った場合、mpcbridgeからはnameで指定したUD-501とR-K731が出力先として指定、選択できるようになります。出力フォーマットの固定ビットパーフェクトを無視して、常にリサンプリング(アップもダウンも)して、出力させることもできます。その場合、libresampleというモジュールが必要になります。ubuntuもVortexBoxも、libresampleはパッケージに含まれているので、インストールは簡単に行えます。libresampleの詳細は、https://ccrma.stanford.edu/~jos/resample/Free_Resampling_Software.htmlを参照してください。mpd.confの設定は、audio_output_formatとsamplerate_converter(※)の2箇所です。前者は出力フォーマットを、後者はリサンプルの精度を指定します。出力フォーマットは、44100:16:2のように指定します。サンプリング周波数、量子化ビット、チャンネル数の順です。それぞれ、出力先が対応しているパラメーターを入れる必要があるのは言うまでもありません。それ以外の値を設定した場合にどうなるかは確認していません。リサンプルの精度については、mpd.confのmanで確認できます。以下の値を設定できるようです。Interpolator、internalとなります。Interpolatorとなっています。精度が高いと、当然ながらCPUの負荷も高くなります。0.20で廃止になり、resamplerが新たに追加されています。