※2009/10/2追記《このエントリーはMac OS X 10.5での場合について書かれています。10.6以降の場合はこちらをご覧ください。》
前回の最後に、情報のやり取りをすると書いていましたが、その前にもう一つ説明しておきたいものがあります。
マックにつなげているオーディオインターフェースのチャンネル数だとか、サンプリング周波数だとかを知りたいとしても、そのオーディオインターフェースを特定できなければ知りようもありません。
Core Audioでは、マックのオーディオシステム全体や、オーディオデバイスや、オーディオデバイス内の入出力に、それぞれIDナンバーが振られており、AudioObjectIDという型の変数で表されています。<CoreAudio/AudioHardware.h>にAudioObject〜という名前で始まる関数が用意されていますので、それらにAudioObjectIDを渡してオーディオデバイスなどの情報を取得したり設定したり動かしたりできます。
ですが、内部的にそうなっているというだけで、実際にAudioObjectというものを使う事はないと思います。
その代わりに、AudioDeviceIDとAudioStreamIDとAudioSystemObjectというものが別に用意されています。AudioDeviceIDはオーディオデバイス(オーディオインターフェースそのもの)を表し、AudioStreamIDはオーディオデバイス内の入出力を表します。これらのIDはオーディオインターフェースが接続された時点で自動的に割り振られます。ちなみにヘッダをたどってみると、これらはAudioObjectIDをtypedefしただけのものです。
typedef UInt32 AudioObjectID; typedef AudioObjectID AudioDeviceID; typedef AudioObjectID AudioStreamID;
AudioSystemObjectは、マックのオーディオシステム全体を表します。実際にコード上にAudioSystemObjectなどと書く事は無く、<CoreAudio/AudioHardware.h>にあるAudioHardware〜という名前で始まる関数を使えば、AudioSystemObjectと情報をやり取りするという事になります。
AudioDeviceIDとAudioStreamIDは、それぞれAudioDevice〜やAudioStream〜という名前で始まる関数がありますので、それらを使用して情報をやり取りします。
といったところで、次回はそれらの関数を使ってみたいと思います。