Core Audio のお勉強
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
| 固定リンク
「プログラミング」カテゴリの記事
- See You Again Sonic !(2009.06.20)
- SQL は人生の如く(2009.06.21)
- Flickr のスライドショー(2)(2009.04.03)
- External Item はとっても便利!(2009.02.15)
- 温故知新(2009.01.04)
「写真」カテゴリの記事
- 人として(2010.02.22)
- 人の人生と向き合う(2010.01.25)
- 背番号 19 にさよなら(2010.01.21)
- Decade(2010.01.17)
- いつも心に青空を(2010.01.07)
「日記・コラム・つぶやき」カテゴリの記事
- 人として(2010.02.22)
- 人の人生と向き合う(2010.01.25)
- 背番号 19 にさよなら(2010.01.21)
- Decade(2010.01.17)
- いつも心に青空を(2010.01.07)






コメント