Leopardから、AudioHardware〜とかAudioDevice〜とかAudioStream〜とかのGet・Set系がことごとくDEPRECATEDになってしまいました。僕の認識では、もともとAudioObject〜があって、そのコンビニエンスメソッドとしてAudioDeviceとかの関数があると思っていたのですけど、どうやら歴史的には逆だったようです。ヘッダをよく見てみたら、AudioObject系はわりと最近の10.4から増えてたんですね。あと、AudioUnitがiPhoneと同じようにAudioComponentにいきなり変わっててびっくりしました。iPhoneで慣れ親しんでいたとはいえ、もちょっと緩やかに移行してくれてもいいんじゃないかなと思います。プロパティの定数系も結構Deprecatedしてます。これはXcodeで警告を出してくれないので注意が必要です。Deprecated”なんてこっそりかかれてます。Device系だとkAudioDevicePropertyDeviceNameから始まるところですね。10.7になっていきなりエラー出まくりなんて事のないようにしっかりチェックしておきましょう。いうことで、取得・設定系をAudioObjectを使ってやってみたいと思います。AudioObjectでオーディオ情報の取得・設定をするにはAudioObjectGetPropertyDataやAudioObjectSetPropertyDataという関数を使います。これはいままでAudioHardware〜やAudioDevice〜など別々の関数でやっていたオーディオ情報の取得や設定を、ひとつでまかなえるものです。プロパティのサイズを調べるのにも、AudioObjectGetPropertyDataSizeという関数で行う事になります。プロパティの取得する関数はこんな感じで定義されています。outData)最初のAudioObjectIDというのはAudioDeviceIDやAudioStreamIDをそのまま渡します。前の記事のその3でも説明しましたが、AudioDeviceIDもAudioStreamIDもAudioObjectIDをtypedefしているだけのもので、つまり全てAudioObjectIDです(リファレンス的にAudioDeviceなどはAudioObjectのサブクラスってことらしい)。AudioHardware〜系の関数をつかっていたプロパティのときはkAudioObjectSystemObjectを渡します。ひとつ飛ばしまして、inQualifierDataSizeとinQualifierDataは、サンプルで使っているものが無かったのでよくわかりません。基本0とNULLで大丈夫なようです。したらまだ機能していないかもしれません。ioDataSizeとoutDataは取得するプロパティのサイズと受け取るメモリ領域で、前と同じです。AudioObjectPropertyAddress;と定義されてます。デバイスとかストリームとか関係なくプロパティを特定するのに必要な情報ですね。Selectorは〜PropertyIDの事です。Scopeは、ほとんどの場合はkAudioObjectPropertyScopeGlobalで、Deviceなどの入出力部分のときはInputとかOutputで指定したりします。0)でOKだと思います(これ以外指定するパターンがすぐに見つけられませんでした。Channel的なところで0以外を使うのではないかと思います)。最後に、サンプルソースです。Tool→Foundationでプロジェクトを作成して、CoreAudio.Frameworkを追加して、main.mを以下のソースに差し替えてください。走らせると、デフォルトになっているオーディオデバイスの名前を表示して、サンプルレートを設定可能な中で変更します。コメントをキャンセルメールアドレスが公開されることはありません。