MPD 0.17.0+ALSAで音が出ないという問題が解決しました。

MPD 0.17.0+ALSAでは「音が出ない」という症状があちこちで報告されていたのですが、みみず工房さんのyoさんから「解決方法が見つかった」とのコメントを頂きました。
私も早速試してみたところ、見事に音が出ました。p(*^ε^*)qよっしゃ?
そして、「mpd.confのhw番号を設定する行をコメントアウトする」という強引な裏技とは違って音質的にも全く問題ありません。

分かってみれば、「なーんだ」と言うことなのですが、それを発見したyoさんには敬意を払いたいと思います。

解決方法は「sndfile」を無効化する

コマンドで解決方法を書くと以下のようになります。

cd ./mpd //MPDのソースが展開されているディレクトリに移動する
make clean //お掃除をして最初のソースコードだけの状態に戻す
./autogen.sh
./configure -disable-ipv6 -disable-sndfile //-disable-sndfileを追加して「sndfile」を無効化する
make
make install

「MPD 0.17.0+ALSA」で音が出ない原因は、ソースコードからMPDをビルドすると「sndfiile」がデフォルトで有効になっていたことです。
では、この「sndfile」とは何物かというと・・・分からなかったので(^^;、Google先生に聞いてみると、この「sndfile」とはサウンドファイルの編集ツールのようで、この中のデコーダーの機能によって、16ビットで入力された音楽ファイルが勝手に32ビットに変更して出力される仕様になっていたようなのです。
当然のことながら、現時点で32ビットの音楽ファイルに対応しているDACはほとんど存在していません(フェーズテックの機器も当然のことながら32ビットには対応していません)から、「音は出ない」と言うことになっていたようなのです。

では、なぜに「OSS」ではデフォルトの状態で音が出たのかというと、おそらくは、古い仕様の「OSS」は最初から32ビットには対応していないので「sndfiile」の影響を受けないようになっていたのではないかと推測されます。
つまりは、新しい機能をどんどん取り込んでいく「ALSA」の「先進性」が今回は裏目に出たと言うことなのでしょう。

しかし、「configure」の引数に「-disable-sndfile」をつけてからコンパイルするれば「sndfile」は無効化された状態でビルドされますので、「MPD 0.17.0+ALSA」の組み合わせでも問題なく音は出て問題が解決されるというわけです。

さて、問題は、この「真っ当な状態」で再生される「MPD 0.17.0+ALSA」の音なのですが、これは「apt-get install mpd」でインストールされるバイナリ版よりも微差ではありますがワンランク上の世界を見せてくれるようです。
さらに言うと、MPDが0.17にヴァージョンアップされることで、yanさんが配布されている強力なチューニングパッチが適用可能になります。
このチューニングパッチはみみず工房さんの以下のページでも配布されていて、その詳しい内容も解説されています。

MPDのチューニング・パッチ

「MPD 0.17.0+ALSA」では音が出なかったために指をくわえて眺めていたのですが、ようやくにしてそのパッチを当てることができました。
雰囲気としては、背景の静けさが増して(オーディオ的に表現すればSN比が向上して)、とりわけ弱音時の表現力が向上したように思います。この変化は、メインがクラシック音楽の人間にとっては大きな福音です。

「MPD 0.17.0+ALSA」で無事に音が出た人は、適用する価値は絶対にあると思います。

<追記>
フェーズテックの「USB Digital Interface UDIF7」が50個限定で再頒布されているようです。震災の影響でかなり苦労されたようですが、この時点(5月1日正午)で残りは18個です。
この価格でこの音質は絶対に「お勧め」ですから、ある程度の「自作」に自信がある方はチャレンジしてみてはいかがでしょう。

USB Digital Interface UDIF7


5 comments for “MPD 0.17.0+ALSAで音が出ないという問題が解決しました。

  1. 2011年5月1日 at 11:11 PM

    初めまして。Windowsユーザーなので、Linuxについては分からないことばかりで、いつもユングさんのブログには本当にお世話になっています。特にMPDについては、VineやVoyageへの挑戦される姿を拝見して、自分でもできそうだと思い立ちました(苦笑)。VoyageMPDの音はもう少し良くなるんじゃないかと思っていましたが、今回のyanさんのチューニングやユングさんの「MPD 0.17.0+ALSA」の一連の記事には、ほんとうに驚きました。太目の音のバランスが整い今までに無く美しく綺麗に鳴っています。びっくりしています。ユングさん、みずず工房さん、yanさん貴重な情報どうもありがとうございました。これからもよろしくお願いします。

  2. yo
    2011年5月3日 at 5:16 PM

    ユングさん、こんにちは。
    解説ありがとうございました。僕のサイトにも記事を書いておきました。
    そちらで分かりやすく解説して頂いているので、どうやって原因を探ったのかについてを中心に書きました。ユングさんの説明の背景にある情報をカバーしたつもりです。興味があればどうぞ。また、解決の助けになった二つの掲示板の情報は大変に興味深いです。英語ですが。
    あと、yanさんのパッチに関しては、最適のチューニングポイントに関して耳のいい皆様のご意見を伺いたいです(yanさんがパッチを公開された理由でもあります)。是非、ご意見をお聞かせください。

  3. ユング君
    2011年5月4日 at 9:54 AM

    yoさんの詳しい解説を読ませていただきました。
    なるほどね、古い16ビット対応の機器ならエラーにならず、24ビット対応機でエラーになるんですね。
    デジタルの世界は、未だに奇々怪々です・・・。

    >yanさんのパッチに関しては、最適のチューニングポイントに関して耳のいい皆様のご意見を伺いたいです(yanさんがパッチを公開された理由でもあります)。是非、ご意見をお聞かせください。

    正直申し上げて、技術的背景に関する記述が難しすぎて、どこをどのように弄るといいのかが、いまいち上手く理解できていません。
    ただ、yoさんが結論として書いていただいているように変更してみると、かなりの改善が実感できるなぁ?・・・と言うレベルです。
    音ががっちりと骨太になるものの解像度は落ちていません。言ってみれば、実体感が増して彫りが深くなったような雰囲気です。とりわけ、チェロソナタやヴァイオリンソナタみたいな楽器の数が少ない室内楽作品だと、その生々しさはかなりのものですね。

    これですね
       ↓
    # An example configuration file for MPD
    # realtime option
    realtime_option {
    memlock “yes”
    stack_reserve “1024”
    heap_reserve “10240”

    main_priority “OTHER:0”
    player_priority “FIFO:50”
    decoder_priority “FIFO:47”
    update_priority “OTHER:0”
    }
    audio_output {
    type “alsa”
    name “My ALSA Device”
    device “hw:0,0” # optional
    priority “FIFO:52”
    # format “44100:16:2” # optional
    # mixer_device “default” # optional
    # mixer_control “PCM” # optional
    # mixer_index “0” # optional
    }
    audio_buffer_size “1024”
    buffer_before_play “30%”

    ・・・

    それから、以下のシェルスクリプトを「/etc/rc.local」から呼び出す方法です。

    #!/bin/bash
    # chrtset.sh リアルタイム優先度設定用スクリプト
    chrt -f -p 50 `pgrep sirq-timer/0`
    chrt -f -p 50 `pgrep sirq-timer/1`
    chrt -f -p 50 `pgrep sirq-timer/2`
    chrt -f -p 50 `pgrep sirq-timer/3`
    chrt -f -p 52 `pgrep irq/23-uhci_hcd`
    chrt -f -p 52 `pgrep irq/23-ehci_hcd`
    chrt -f -p 52 `pgrep irq/16-uhci_hcd`
    chrt -f -p 52 `pgrep irq/16-eth0`
    chrt -f -p 48 `pgrep cifsd`

    チューニングポイントは
    「あとは実際に設定を変え、音を聴きながら最適値を探るということになります。

    decoder cifsd player sirq-timer output irq/23/16

    をどういう順番に並べると一番良い音になるのか。」
    ということなのですね。
    でも、具体的にはどこを弄るのでしょうか?

    シェルスクリプトの50とか52という数字を変更するのでしょうか?
    お恥ずかしい限りですが、もう少し勉強が必要なようです。

  4. yo
    2011年5月5日 at 2:03 PM

    > でも、具体的にはどこを弄るのでしょうか?

    記事に追記しておきました。「それでも分からん」ということもあるかと思いますので(^^;;;、遠慮なく、どこが分からないかご指摘ください。

  5. ユング君
    2011年5月5日 at 8:37 PM

    懇切丁寧な「追記」ありがとうございます。
    さすがの「鈍」な私もだいたいの概要はつかめました。

    現時点の優先度は、デフォルトとして提案してくれているものなので、以下のようになっています。

    5 5 50 -51 00:00:06 [sirq-timer/0]
    19 19 50 -51 00:00:04 [sirq-timer/1]
    1199 1199 52 -53 00:00:00 [irq/23-ehci_hcd]
    1207 1207 52 -53 00:00:00 [irq/23-uhci_hcd]
    1210 1210 52 -53 00:00:08 [irq/16-uhci_hcd]
    1625 1625 50 -51 00:00:07 [irq/16-i915]
    1958 1958 52 -53 00:00:10 [irq/16-eth0]
    2017 2017 48 -49 00:00:21 [cifsd]
    2516 2516 – 20 00:00:00 /usr/local/bin/mpd /etc/mpd.conf
    2516 2517 50 -51 00:00:00 /usr/local/bin/mpd /etc/mpd.conf
    2516 2519 47 -48 00:00:01 /usr/local/bin/mpd /etc/mpd.conf
    2516 2635 52 -53 00:00:00 /usr/local/bin/mpd /etc/mpd.conf

    ここをスタート地点にして少しばかり遊んでみたいと思います。
    結果は、みみず工房さんの方に日を改めてコメントしたいと思います。
    今の時点で試してみたいのは「cifsd」の優先度を上げてみるとどうなるかです。意外とWindows側からのファイルの送り出しというのは重要な気がしますので・・・。

    こんな感じで一度聞き比べてみたいと思います。

    5 5 50 -51 00:00:00 [sirq-timer/0]
    19 19 50 -51 00:00:00 [sirq-timer/1]
    1196 1196 52 -53 00:00:00 [irq/23-ehci_hcd]
    1197 1197 52 -53 00:00:00 [irq/23-uhci_hcd]
    1205 1205 52 -53 00:00:00 [irq/16-uhci_hcd]
    1565 1565 50 -51 00:00:00 [irq/16-i915]
    1900 1900 52 -53 00:00:00 [irq/16-eth0]
    1961 1961 52 -53 00:00:00 [cifsd]
    2193 2193 – 20 00:00:00 /usr/local/bin/mpd /etc/mpd.conf
    2193 2194 50 -51 00:00:00 /usr/local/bin/mpd /etc/mpd.conf
    2193 2196 47 -48 00:00:00 /usr/local/bin/mpd /etc/mpd.conf
    2193 2199 52 -53 00:00:00 /usr/local/bin/mpd /etc/mpd.conf

Comments are closed.