CueZyのオーディオ再生API

はじめて [Objective-C] のカテゴリに書こうと思います。
すこし、いえまったくプログラミングに偏った記事になると思います。
退屈な方はスルーしてくださいね。

Objective-C

一体なんでしょうか。
プログラミングの世界には、様々な言語があります。
有名なところでは、BasicやC言語Java、そして僕の大好きなPerlなどなど。
ハードウェアの中や、PCの中、あるいはサーバ上というように、用途や制約にあわせて、多種多様なプログラミング言語が存在するのですが、このObjective-Cという言語は、Appleが自社の製品を動かすために独自拡張した、C言語ベースのプログラミング言語なのです。

CueZyのオーディオ再生には、数々あるAPIのうち、

AudioQueueServices と、
AudioUnit というふたつのAPIを利用しています。


これがAudioQueueServicesのドキュメント


こっちがAudioUnitのドキュメント

オーディオを再生するという一つの目的に対して、二通りのアプローチをする理由は、これらAPIそれぞれの異なる特性にあります。

AudioQueueServicesは、安定性が高く、どんなに長い音源でも、メモリの使用を最低限におさえて再生してくれます。
けれど反面、指令から発音までの遅延時間(レイテンシー)がやや長く、また再生を繰り返す時などの予備動作も長くなってしまいます。

AudioUnitは、発音までの遅延時間がとても短く、連続再生にも鋭いレスポンスを発揮するのですが、単位時間あたりの処理回数が多く、その都度ファイルにアクセスするような処理をすると、動作が不安定になってしまいます。

これらの特性を考慮して、CueZyではそれぞれの良い部分を活かす使い分けをしています。
具体的に、長さが5秒以上のオーディオは、AudioQueueを使って再生します。
長さが5秒未満のオーディオは、データをすべてメモリに保持した上で、AudioUnitを使って再生します。

こうする事で、比較的時間の長い音楽や、一時間を超えるオーディオも、
またドラムショットや、殺陣(たて)の効果音、銃声といった、鋭いレスポンスが求められる音源も、きわめて正確に再生できるようにしています。

5秒という時間を境にして、再生に関する特性が変わってきます。
CueZyをお使いの際は、すこし参考にしてみてください。