これは2007年の投稿で、以前のブログから移行したものを加筆、編集したものです。
自宅のPC環境をWindows Vistaへ移行した。以前に比べて快適に利用しているのだが、iTunesの挙動から不便を被っている。何か一つPodcastを再生して、そのまま終わりまで聴く。そして次のPodcastを再生しようとすると...音が出ない。このとき、
の再生タブからスピーカーを選択し、プロパティ・ボタンを押下する。新しく開いたWindowの詳細タブからテスト・ボタンを押下しても、やはり音が出ない。
このような状況で、iTunesを再起動するか、先の詳細タブにある排他モードのチェック・ボックスを選択し、適用ボタンを押下すると、音が出ることがある。
どういうことだろう。そして、排他モードとは何を指しているのか?
自宅の環境で利用している音源はSound MAX Integrated Audio Deviceだ。マザーボードである、Intel D865PERLに統合されている。この音源からSPDIFでスピーカーと接続して使用している。このSound MAXはなかなか曲者のようだ。web検索すると諸々のトラブルが報告されている。
www.google.co.jp
この音源チップのドライバ、特にVista用の物をIntelは提供しておらず、Vistaで提供しているドライバもヴァージョンが古い。
"Changes to the audio stack and changes in Windows Media Player audio playback behavior in Windows Vista" - KB 925901によると、
- Introduction
信頼性の向上、ならびにWindows Vistaでのオーディオ・アプリの開発を容易にするため、オーディオ・スタックを再設計した。
この新しいAPIを利用しているため、Windows XPの場合、Windows Vistaの場合で、Windows Media Player 11の挙動は異なる。
- Description of the Windows Vista audio stack
オーディオ・エンジンと呼ばれるコンポーネントのバッファへ、アプリケーションは非圧縮音声情報を出力する。
共有モード(※)では、オーディオ・エンジンはストリーム・セッションごとに処理し、ミキサー・バッファでそれぞれのストリームが統合、処理されて、オーディオ・デバイスへ出力される。
※排他モードを選択していない、デフォルト状態のこと。
- Volume control and Windows media player effects do not work in the Audio Engine exclusive mode
アプリケーションはオーディオ・エンジンに対して、オーディオ・デバイスから直接DMAのオーディオ・バッファへアクセスするよう、要求できる。
OSから音声データへの干渉を最小限にしたいアプリケーションは、DMAモードで稼働する。またSPDIFを通じて圧縮音源データを出力したいアプリケーションも、DMAモードで稼働する。
排他モードでは、オーディオ・エンジンはバイパスされ、システム音、セッション毎のボリューム・コントロール、WMP拡張は機能しない。
なぜiTunesを再起動したり、排他モードを適用すれば音声出力されたのか?iTunesが出力するのは圧縮音源だ。私の環境では、それはSPDIFを通じて出力されている。まさに排他モードで動かせ、という環境だったわけだ。
とはいえ、システム音や、セッションごとのボリューム・コントロールは機能している。例えば、音声ミキサーからiTunesだけをミュートしても、システム音はミュートされない。
実際の動作が説明と異なっているようにも感じる。断言できることではないが、iTunesはVistaへの最適化しきれていない、とも言えるかもしれない。