先日、やっとLeopard対応をした拙作のフリーソフト「MuteCon」
ですが、今までずっとQuickTime関連のAPIを使って音の制御を
していました。
別にそれ自体は古くてOS互換がない、とかいうことはないのですが、
MuteCon自体、iMacなどで現状、ひとつ問題を抱えてるんですよね。
それは内蔵音源を使っていて、ヘッドホン端子にスピーカーが
つないであるケースです。
そうすると、最近のMac OS Xのバージョンでは起動時のところまで
何故か内蔵スピーカーから音が出て、OSの起動が終わってから
ヘッドホン端子に切り替わる、という変な(?)ことをやってくれてます。
内蔵スピーカーとヘッドホンでは独立して音量やミュートの設定が
できるようになっていて、その影響でヘッドホン端子に何か挿して
あると、内蔵スピーカーのミュートをMuteCon側から制御できないんです。
これはOS上でも同じで、端子を抜くと、内蔵スピーカーの設定が
できるようになります。
そこで、もしかしたらCore AudioのFrameWorkを使えば、それも
制御できるのでは?と、色々と試行錯誤しています。
とりあえず、現状までの機能をCoreAudioに移植するところまでは
できたのですが、やはり内蔵スピーカーはデバイスとしては
見えません。
まぁ本来、同じ「内蔵音源」であるわけですから、デバイスは同じ
ですよねぇ。
チャンネルが違うのか?と思ったら、それも違うようで、違うのは
ソースのようです。
ただ、ソースは違うものの、やはりヘッドホンを挿している時は
「Audio MIDI設定」でも内蔵スピーカーの設定はできません。(^^;
うーん、これ、一体どういうことをやってるんでしょうねぇ。
どなたか、Core Audioに詳しい方がいらしたら、ぜひ教えてくださいませ。
おそらく、AudioDeviceGetPropertyInfo()あたりでkAudioDeviceProperty
DataSourcesとかを見て、ごちゃごちゃ、やるんだろうなぁ。(^^;
色々と試行錯誤してみて、もしうまくいったら、MuteConをアップデート
して、対応したいと思います。