KOALOG.

アプリ制作ユニット「KOALAB.」のブログです。主にアプリ制作関連の技術ネタを書いていきます。

Audio Unit Hosting Guide for iOS

原文:https://developer.apple.com/library/ios/documentation/MusicAudio/Conceptual/AudioUnitHostingGuide_iOS/Introduction/Introduction.html

 

Audio Unitホスティングについて

iOSは音声信号処理プラグイン備えています。例えば、ミキシング、イコライザをかける、[チャンネル、サンプリングレートなどの]音声フォーマットを変換する、またリアルタイムに録音したり、再生を行う、波形データの書き出し、VoIP(Voice over Internet Protocol)のようなネットワーク越しのやり取り、などがあります。

その「Audio Unit」と呼ばれるパワフルで柔軟なプラグイン達をあなたのアプリから直接使うことができます。

 

Audio Unitは下図で示すAudio Processing Graphと呼ばれるAudio Unitを統括する機能と連携することで動作します。

図の例で言えば、一つ以上のコールバック関数を経てGraph内の最初のAudio Unitに音声信号を送り、各Audio Unitを個々にコントロール[EQのパラメータを変えたり、ミキサーのボリュームを変えたりとか]することで動作させます。

Graph内の最後のユニット、「I/O unit」はハードウェア出力と直接つながります。[つまり音を鳴らすために必ず要るUnit]

 

f:id:koalab:20140119010848p:plain

 

一目瞭然

 

Audio UnitはiOSのオーティオ構成の中で一番最下層のプログラミングレイヤーに位置するので、効率良く利用していくためには、他のiOSオーディオ技術で必要とされる以上の深い理解が必要となります。

ミックスされた音声をリアルタイムに再生する必要がある場合や、入出力のレイテンシを下げたい、または特定のAudio Unitを使用したい場合をのぞいて、まずはMedia PlayerやAV Foundation, OpenAL, Audio Toolboxといった上位層のフレームワークについてご覧ください。

こういった上位層の機能はAudio Unitを開発者が使いやすいような形にラッピングしたもので、さらに追加の重要な機能を備えています。

詳しくはMultimedia Programming Guideに記載されています。

 

 

Audio Unitは高速で、音声信号モジュールを備えています

 

Audio Unitを使用する大きな2つの利点は以下の通りです。

・「すばらしい反応性」

 [音声信号を書き出すための]レンダーコールバック関数ないでリアルタイム性の高いスレッドにアクセスすることができるため、最も高速な[レイテンシの少ない]信号処理が可能となります。楽曲のミックスや音声の入出力も同時に発生するようなケースで、Audio Unitを直接使用することが最も効果があります。

・「動的なルーティング」

 Audio Processing GraphのAPIはopaqueな型である「AUGraph」を中心に構成され、音声処理をしている間でもスレッドセーフな状況下で、各Audio Unitの接続を動的に変更することができます。

 Audio Processing Graph APIiOSの中で唯一この能力をもつオーディオAPIです。

 

Audio Unitのライフサイクルは以下のような順序になっています。 

1. 使用したいAudio Unitを定義したダイナミックリンクライブラリへの参照をプログラム実行中に取得します。

2. Audio Unitをインスタンス化します。

3. Audio Unitに使用したいユニットタイプ[EQとかReverbとか]を設定します。

4. Audio Unitを初期化します。

5. オーディオ処理を開始します。

6. Audio Unitをコントロール[ボリューム変えるとかパラメータ変更とか]します。

7. 使用し終わったらAudio Unitを破棄します。

 

Audio Unitは、レベル計測やボリューム操作、ミキシング、ステレオパンニングといった非常に便利な個々の機能を備えています。

Audio Unitを扱うことで、アプリにそういった機能をプラスできます。

しかしこれらの利点を得るために、Audio Unitのアーキテクチャや、レンダーコールバック関数、音声データフォーマットといった基本的な概念に関してもっと理解を深めていく必要があります。

 

~~~ここまで~~~

※Choosing a Design Pattern and Constructing Your App以降は翻訳中です。