オーディオの不具合と戦った記録

さて、PCを現在の環境に新調してからずっと、オーディオの不具合には悩まされ続けて来ました。
言葉ではうまく表現できないんですが、音楽とか聞いてたら所々で直前の音に戻ってまた再生が続行される、みたいな。
プログラム風に言えば、サイクルバッファが壊れて継目を正しく処理できなかったみたいな。

結論から言うと、完全解決ではないかも知れませんがほぼその現象を抑えることに成功しました。
/etc/pulse/defaultt.paにて
### Automatically load driver modules depending on the hardware available
.ifexists module-udev-detect.so
load-module module-udev-detect tsched=0
.else
### Alternatively use the static hardware detection module (for systems that
### lack udev support)
load-module module-detect
.endif

と記述しておけばOKでした。tsched=0がミソ。タイマベースから割り込みベースに切り替えただのなんだのって書いてあったんだけど、まだ詳しくは理解しきれてません・・・。ちょっと調べないといけませんね。

以下、つらつらと紆余曲折をだらだらと。

音がうまく鳴ってくれない、ちとそれじゃ気にくわないってんでSoundBlaster AudigyLSのカードを挿して使ってたんですが、できたらオンボードだけで完結しちゃいたいなーってことで再度オンボードの方でチャレンジすることに。

まず、そもそもちゃんとデバイスが認識しているのかって話。これはこのPCに変えたときから一応調べてはいたんですが、使われているチップはALC889Aというチップ。現在のALSAではばっちりこれに該当するコーデックは入っていないらしく、ALC880だったかな、それのコーデックを使っているようです。まぁ互換性があるようなのでこれで問題ないらしい。動いてますよーって報告もちらほら。

ただ、ALC889Aで不具合がーみたいな報告もちらほら。私の場合、音が鳴るには鳴ってるけど再生状況が正常ではないっていう微妙な症状なので、なかなかうまい検索ワードも思いつかず、Webでは探しきれなかったんですよねぇ。

で、いろいろとdmesgのエラーメッセージを元に探して行ったところ、
Bug #329620 in linux (Ubuntu): “ALSA woke us up to write new data to the device, but there was actually nothing to write.”
のような記述が複数みつかりました。どうもtsched=0というのがキーワードになるようだ、と。

で、参考リンクとして提示されてた
Features/GlitchFreeAudio – FedoraProject
を見ると、どうもFedora10からは割り込みベースではなくタイマスケジュールベースにPulseAudioが変更されたらしい。ただ、tsched=0とすれば従来の割り込みベースに戻せるのだとか。

で、従来の割り込みベースにしたらちゃんと鳴るようになるよーって記述が多かったので試して見たところ、ほんとに鳴るようになっちゃったというわけ。意味が分からん・・・。PulseAudioの実装がまずいってことなんかしら・・・? それともALSAと相性が悪い?

で、そのまんま置いとけばよかったのに、さらに遊びで$HOME/.pulse/daemon.confにて
resample-method = trivial

とか書いてたもんだから原因到達に苦しんだ・・・。なんかこのオプションでもってリサンプルしたらPhonon経由で音を鳴らした途端にPulseAudioがクラッシュしてました。どうもこのリサンプル方法はPhononと相性が悪いらしい・・・。Phonon以外では普通に鳴ってたんだけどね。デフォルトだとsoeex-float-3とかだったかな? それよりは精度がいいらしいんだけど、まぁめっちゃ頑張って聴いてもプラシーボじゃねぇの?ってくらいしか違いを感じ取れなかったし、そもそも圧縮音源で聴いてる時点で、しかもオンボードで聴いてる時点で音質なんて(笑)って話なので潔くデフォルトに戻しました。

そのおかげで今は快調に音が鳴ってます。長時間のベンチ的なことをしていないのでひょっとしたらたまに音がおかしくなる可能性もありますが、まぁ前は10分に1度くらいの頻度で起きちゃってましたからそこからすれば格段に安定してます。

にしたって、タイマベースで動かせないのはどうなんだろう? タイマベースの方がモダンな実装らしいんだけどねぇ。よく分からんや。

今回は「ALSAドライバ」「PulseAudio」「Phonon」とそれぞれについて調べなくてはいけなかったのでなかなか大変でした・・・。ALSA一本の頃は楽やったなぁ・・・;;