2014年9月アーカイブ

iOS8で新しくAVAudioEngineというクラスが追加されました。
AVAudioEngineはAVFoundationに属するクラスです。
AVFoundationは手軽に再生・録音ができた反面、音声データを直接加工したい場合には下位レイヤーにあるAudioToolboxに手を出す必用がありました。
AudioToolboxを用いる場合C言語による記述が必用になる事もありなかなか敷居の高いものでしたが、AVAudioEngineの登場により大抵の処理がAVFoundationで完結できるようになりました。

AVAudioEngineのイメージですが、コアとしてメインミキサー(各種音声データを1つに纏める機能)が存在し、そのメインミキサーに対してブロックを連結するようにインプット(音楽ファイルやマイクからの入力)や各種エフェクトを接続します。
メインミキサーを含めてブロックの事をノード(node)と呼び、ノードとして扱えるクラスはAVAudioMixerNode、AVAudioInputNodeといった具合にAVAudio〜Nodeという名称で用意されています。

各ノードから出力される音声データを直接操作する方法も用意されています。
例えばAVAudioInputNodeからの出力を操作したい場合、AVAudioInputNodeに対してタップ(tap)を接続します。
tapの接続メソッドはblock構文となっており、block内の処理で生データを操作する事ができます。

今回はこのノード群を組み合わせてマイクから音声を拾い、最終的にファイルへ出力する録音機能を紹介します。
録音機能を図式化すると、下図のようになります。
録音機能
コードは下記リンクを開いてください。
 ※climbi.com様のサービスを利用させて頂いております。

今回は単純に録音のみ行っていますが、Tap内で生データに触れる事ができる為例えば入力レベルをゲインしてファイルに書き込むなどの応用ができます。