« 夏祭り | トップページ | 「12人の優しい日本人」 »

2007.08.19

Core Audio のお勉強

IMGP3225久しぶりに、Core Audio の勉強をしてみました。最初は、Mac OS X がリリースされて間もない頃でした。それから、特にサウンドプログラミングを勉強したという訳ではありませんが、2 度目となると、それなりに理解できてしまうものですね。こういうのも年の功と言うのでしょうか(笑)

IMGP3225

PENTAX *ist DS + smc PENTAX-DA 21mm F3.2 AL Limited

Core Audio の一番下のレイヤーで音を出してみることにしました。いわゆる Audio HAL (Audio Hardware Abstraction Layer) です。HAL は、複数のアプリケーションでオーディオデバイスを共有するための仕組みで、OS によってハードウェアが上手く抽象化されています。この仕組みを覚えるだけで、どんなハードウェアへのアクセスも同様に可能になるのです。

IMGP3231

PENTAX *ist DS + smc PENTAX-DA 21mm F3.2 AL Limited

HAL の関数群はここにずらっと並んでいますが、まず最初のキモはこの 2 つ。

  • AudioDeviceAddIOProc( AudioDeviceID inDevice, AudioDeviceIOProc inProc,void*inClientData);
  • AudioDeviceStart( AudioDeviceID inDevice, AudioDeviceIOProc inProc);

あるデバイスに、定期的にオーディオデータを書き出すための関数を登録してスタートする。実にシンプルで美しいです。Mac OS 9 時代には、ダブルバッファを自前で用意して、いちいち交互に割り込みを自分で発生させてデータを書き出していました。懐かしくはあるけれど、あれは大変だったなぁ。

IMGP3214

PENTAX *ist DS + smc PENTAX-DA 21mm F3.2 AL Limited

Core Audio なら、上の2つに加えて、コールバックで呼ばれる関数に処理の中身を書いておくだけで、後は OS がよろしく処理してくれます。早速、AIFF や WAV ファイルを読み込んで再生してみました。しかし、音は出たもののボリュームがやたら大きいのとノイズまみれになってしまう問題が発生。数時間プログラムと格闘した後…。

ここを読んでいて原因に気づきました。32 bit 浮動小数点のところ、AIFF や WAV の波形データを 16 bit のまま書き出していました。まあ良くあることです(言い訳)。でも、こうして自力で解決できたので良しとしましょう。終わり良ければすべて良しですからね。

IMGP3216

PENTAX *ist DS + smc PENTAX-DA 21mm F3.2 AL Limited

|

« 夏祭り | トップページ | 「12人の優しい日本人」 »

プログラミング」カテゴリの記事

写真」カテゴリの記事

日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/82331/16163051

この記事へのトラックバック一覧です: Core Audio のお勉強:

« 夏祭り | トップページ | 「12人の優しい日本人」 »