Core Audio のお勉強
久しぶりに、Core Audio の勉強をしてみました。最初は、Mac OS X がリリースされて間もない頃でした。それから、特にサウンドプログラミングを勉強したという訳ではありませんが、2 度目となると、それなりに理解できてしまうものですね。こういうのも年の功と言うのでしょうか(笑)
PENTAX *ist DS + smc PENTAX-DA 21mm F3.2 AL Limited
Core Audio の一番下のレイヤーで音を出してみることにしました。いわゆる Audio HAL (Audio Hardware Abstraction Layer) です。HAL は、複数のアプリケーションでオーディオデバイスを共有するための仕組みで、OS によってハードウェアが上手く抽象化されています。この仕組みを覚えるだけで、どんなハードウェアへのアクセスも同様に可能になるのです。
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 時代には、ダブルバッファを自前で用意して、いちいち交互に割り込みを自分で発生させてデータを書き出していました。懐かしくはあるけれど、あれは大変だったなぁ。
PENTAX *ist DS + smc PENTAX-DA 21mm F3.2 AL Limited
Core Audio なら、上の2つに加えて、コールバックで呼ばれる関数に処理の中身を書いておくだけで、後は OS がよろしく処理してくれます。早速、AIFF や WAV ファイルを読み込んで再生してみました。しかし、音は出たもののボリュームがやたら大きいのとノイズまみれになってしまう問題が発生。数時間プログラムと格闘した後…。
ここを読んでいて原因に気づきました。32 bit 浮動小数点のところ、AIFF や WAV の波形データを 16 bit のまま書き出していました。まあ良くあることです(言い訳)。でも、こうして自力で解決できたので良しとしましょう。終わり良ければすべて良しですからね。
PENTAX *ist DS + smc PENTAX-DA 21mm F3.2 AL Limited
« 夏祭り | トップページ | 「12人の優しい日本人」 »
「プログラミング」カテゴリの記事
- Lototter のホームページを公開しました!(2012.01.26)
- Lototter での抽選はこんな感じ(2011.07.17)
- Twitter の API を使いこなす(2011.08.17)
- Lototter の素敵なアイコン(2011.08.17)
- Lototter は日々進化しています!(2011.08.17)
「写真」カテゴリの記事
- Lototter のホームページを公開しました!(2012.01.26)
- Lototter での抽選はこんな感じ(2011.07.17)
- 茅ヶ崎三部作(2012.01.04)
- Twitter の API を使いこなす(2011.08.17)
- Lototter の素敵なアイコン(2011.08.17)
「日記・コラム・つぶやき」カテゴリの記事
- 茅ヶ崎三部作(2012.01.04)
- 黄昏に想う(2011.07.19)
- SHISHAMO Forever(2011.07.18)
- Twitter で抽選するツール Lototter に寄せて(2010.12.19)
- 三浦哲郎さんの訃報にふれて(2010.10.11)
トラックバック
この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/82331/16163051
この記事へのトラックバック一覧です: Core Audio のお勉強:





コメント