Audio Unit は、iOS の Core Audio においてもっとも低レベル(ハードウェアより)に位置するフレームワークです。そのため低レイテンシを要求されるオーディオ処理機能を提供するアプリに向いています。
というのがよく言われる Audio Unit のメリットなのですが、個人的には Audio Unit の「ユニットをつなげて複雑なオーディオ処理を実現する」というしくみ(AUGraph)がまるでギターのエフェクターをつないで音をつくる感じに似ていて、そのあたりも興味深いポイントとなっています。
ただ API は全部 C ベースだし、音を再生するだけでも(AVAudioPlayer 等と比較すると)複雑だったりするので、まずは参考になるサンプルをいろいろと集めてみました。
- どの Audio Unit を使用しているか(kAudioUnitSubType_xxxx で判断)
- どういうサンプルか
- 最終更新はいつか
の観点からまとめています。
使用ユニットの項目で、そのユニットを使用しているサンプルが他にない場合は、貴重なサンプルである、という意味をこめて太字にしています。
- (2013.2.22追記情報)実際に参考にしつつ実装してみてわかったことなどを追記。
- (2013.2.23追記情報)DrumMachine を追加。
iPhoneMultichannelMixerTest
【使用ユニット】
- Remote IO (kAudioUnitSubType_RemoteIO)
- Multi Channel Mixer (kAudioUnitSubType_MultiChannelMixer)
【サンプル概要】
on/offとボリュームをチャンネル毎に変えられる、2チャンネルのミキサー。
オーディオファイルの再生と、複数チャンネルを扱いたい場合に参考になります。
(2013.2.22追記)PublicUtilityという、Appleが配布しているCore Audioのユーティリティクラスに依存しており、これを参考に自分のアプリを作ろうとするとこのユーティリティクラスまわりが若干面倒なことになります。(プリプロセッサマクロにDEBUGを定義していると別のユーティリティクラスを持ってこないとビルド通らないとか、このサンプルに付属しているコードと、別途Appleが配布しているものとバージョンが違っていたりとか。)
【最終更新日】
2010-07-07
Audio Mixer (MixerHost)
【使用ユニット】
- Remote IO (kAudioUnitSubType_RemoteIO)
- Multi Channel Mixer (kAudioUnitSubType_MultiChannelMixer)
【サンプル概要】
on/offとボリュームをチャンネル毎に変えられる、2チャンネルのミキサー。
サンプルの機能としては、上の "iPhoneMultichannelMixerTest" とまったく同じに見えるのですが、なぜこの2つが存在するのでしょうか。。
こっちは、そのままビルドするとエラーになるので、xibをちょっといじる必要があります。
(2013.2.22追記)こちらのサンプルは、"iPhoneMultichannelMixerTest" と違いPublicUtilityに依存していないので、とりあえずマルチチャンネル再生の参考にするならこっちの方がミニマルでわかりやすいかと思います。
【最終更新日】
2010-07-27
AVCaptureAudioDataOutput To AudioUnit iOS
【使用ユニット】
- Delay (kAudioUnitSubType_Delay)
- Converter (kAudioUnitSubType_AUConverter)
【サンプル概要】
AVFoundation の AVCapture で録音した音声に、Audio Unit でディレイエフェクトをかけ、ExtAudioFile でファイル出力するサンプル。
Audio Unit の Delay Unit を取り扱っているのは今回紹介する中では唯一、という点だけでも貴重なサンプルですが、AVCaptureSession の captureOutput:didOutputSampleBuffer:fromConnection: で取得した波形データを Audio Unit に渡してエフェクトをかける方法、Audio Unit から ExtAudioFileWriteAsync でファイル出力する方法、どっちも重要なので、見た目は地味ですがコードはとても参考になるサンプルとなっています。
【最終更新日】
2012-10-08
DrumMachine
【使用ユニット】
- Sampler (kAudioUnitSubType_Sampler)
- Remote IO (kAudioUnitSubType_RemoteIO)
【サンプル概要】
Sampler Unit を使用した TR909(ドラムマシン)的なサンプルアプリ。4つの音をタイムライン上でon/offすることでリズムを作る。
ちなみに作者は Core Audio本の著者である永野さん。
【最終更新日】
2013-02-23
Sampler Unit Presets (LoadPresetDemo)
【使用ユニット】
- Sampler (kAudioUnitSubType_Sampler)
- Remote IO (kAudioUnitSubType_RemoteIO)
【サンプル概要】
楽器を切り替えるボタンと、Low, Mid, High の音を鳴らすボタンをもつサンプラー。
Sampler Unit を使用するものは他にもありますが、AUPreset ファイル(拡張子.aupreset)なるものを使用する点では唯一のサンプルです。(中身見たけどどういう調整をするものなのかよくわかりませんでした。DJとかやる人はピンとくるのかも。)
【最終更新日】
2011-10-12
Reverb
※ iOS5プログラミングブックのサンプル。ダウンロードURLは書籍をご参照ください。
【使用ユニット】
- Remote IO (kAudioUnitSubType_RemoteIO)
- Converter (kAudioUnitSubType_AUConverter)
- Reverb2 (kAudioUnitSubType_Reverb2)
- Multi Channel Mixer (kAudioUnitSubType_MultiChannelMixer)
【サンプル概要】
マイクから入力された音声にリバーブをかけるサンプル。
唯一の Reverb2 のサンプル。マイク入力、エフェクト、マルチチャネルミキサーと、Audio Unit の基本が学べて、リバーブのパラメータをいろいろいじれて楽しい好サンプルです。
書籍の方も、AUGraph や AUNode の概念から、ひとつひとつのユニットの解説まで、わかりやすい図入りで説明されているので激しくおすすめです。
audioGraph
【使用ユニット】
- Remote IO (kAudioUnitSubType_RemoteIO)
- Multi Channel Mixer (kAudioUnitSubType_MultiChannelMixer)
- Low Pass Filter (kAudioUnitSubType_LowPassFilter)
- High Pass Filter (kAudioUnitSubType_HighPassFilter)
- Audio File Player (kAudioUnitSubType_AudioFilePlayer)
- Sampler (kAudioUnitSubType_Sampler)
【サンプル概要】
マイク入力とかシンセ音とかファイルからの音とかをマルチチャネル再生しつつ、エフェクトをかけられる。ステレオレベルメータつき。
Audio Unit のもろもろ詰め合わせといった感じです。エフェクトはリングモジュレータやピッチシフターも実装されています。
(2013.2.22追記)いろんな機能が入ってるのですごく参考になりそうですが、いかんせんコードが汚いです。1ファイル4000行とかあって、コードの見通しも悪く、参考にするにも結構骨が折れます。(ただしコメントは多い)
【最終更新日】
2013-01-20
iPhoneMixerEQGraphTest
【使用ユニット】
- Remote IO (kAudioUnitSubType_RemoteIO)
- iPod EQ (kAudioUnitSubType_AUiPodEQ)
- Multi Channel Mixer (kAudioUnitSubType_MultiChannelMixer)
【サンプル概要】
iPod のイコライザー効果をかけるサンプル。(グラフィックイコライザーではなく、プリセットから選択する)
【最終更新日】
2010-06-25
aurioTouch2
【使用ユニット】
- Remote IO (kAudioUnitSubType_RemoteIO)
【サンプル概要】
マイク入力の波形を描画するサンプル。通常の時系列での波形表示の他、周波数ドメイン(FFTを使用)表示、ソノグラム表示もあり。
Audio Unit の使用は Remote IO による入出力のみ。FFT には Accelerate フレームワークの vDSP が、波形やソノグラムの描画には OpenGL が使用されています。
【最終更新日】
2011-12-06
iPhone Core Audioプログラミング
※ Audio Unit のサンプルが多数あるので、これだけ例外的に書籍名をタイトルにしました。サンプルコードのダウンロードURLは書籍をご参照ください。
【サンプル概要】
各項目毎にサンプルが用意されているので、目次を載せておきます。
- Audio Unitの概要
- Audio Component とAudio Unit
- Audio Unit 正準形
- サイン波を再生する
- 周波数を変更する
- Examole -加速度センサーテルミンー
- Audio Unit Processina Graoh Services
- MultiChannel Mixer Unit
- 3D Mixer Unit
- Converter Unit
- iPod Equalizer Unit
- マイクのモニタリング
- Remote IOを使って録音する
- レコーデイングレベルを調整する
- Voice Processing IO Unit
【使用ユニット】
たくさんあるので全ては確認できていませんが、iOS3.x時代にあったユニットは全部入っていると思われます。(多くのユニットがiOS5で追加されましたが、iOS5登場以前の本なのでそれらについては載っていません)
RemoteIO
※iPhone SDK アプリケーション開発ガイドのサンプル。サンプルコードのダウンロードURLは書籍をご参照ください。
【サンプル概要】
Remote IOでサイン波を鳴らすサンプル。書籍の Audio Unit の章は Core Audio 本の著者永野さんが書いているので、Core Audio本のChapter09のサンプルと同様と思われます。
Core Audio本は絶版になっていて中古で高値がついてしまってますが、こっちはまだ普通に買えるようです。
Audio Unitの参考資料
- Core Audio Overview
- Audio Unit Programming Guide
- ※Mac版。2013/2/20現在、iOS版はありません。