[iOS][Core Audio]Looping Recorderの基礎(その壱)
KT Tunstallで有名になったループペダル。
簡単に説明すると、ある一定の間隔(数秒)に録音した音をループして再生する機械で、機種によっては、複数の録音した音声をループ再生する事が出来る。
音を遅れて再生するという機能からも、その操作方法からも、エコーやディレイを行うエフェクターの仲間になると思われる。
その仕組みは?
実際に、どのように実装するかは製品毎の大きく異なると思われるが、基本的な動きはテープエコーに似ているのではないかと考えている。
輪になっている録音再生用のテープを回し続ける。録音と再生のヘッドの位置が異なっているので、二つのヘッドが離れている距離分、音が遅れて聴こえてくる
この輪になっているテープの長さや録音と再生ヘッドの距離を変えると、ループする音の長さや遅れの時間が変わるという事になる。
iOSでのオーディオ処理
Core Audioを使用する事になる。Core Audioは機能別に複数のフレームワークとサービスで構成されていて、それぞれに特徴があり、どれを利用すべきが悩むところなので、各フレームワーク/サービス毎にサンプル・コードを作成してみて、Looping Recorder機能を実装するのにむいているのはどれなのかを複数回の日記で検討してみようと思っている。
ループペダルに求められる機能
ざっと思い浮かんだのは以下のとおり。
- 即応性がある。
- 複数を音声を同期して録音再生できる。
- 同期して録音再生する音声を随時変更できる。
- 記録再生する音の長さが調節できる。
ただし、即応性があるとか、複数の音声を同期して記録再生できるというのは、リアルタイムに動作するシステムと考えてしまうかもしれないが、見方を変えて、そう感じる動作であればいいと考えると、色々と、アイディアが出てくるのではないかと考えている。
Core Audioについて
ループペダルの実装に関係する、Core Audioの各フレームワーク/サービスの特徴を表にしてみた。
再生 録音 備考
System Sound Services ○ × 30秒以下の音声ファイルの再生。
AVFoundation ○ ○ iPhone OS 2.2以降から。録音はiPhone OS 3.0以降から。
Audio Queue Services ○ ○ 音声データのバッファに対して録音再生。
Audio Unit ○ ○ 低レベルAPI。
以降では、各フレームワーク/サービスを使ったサンプル・コードを作成してみ、どれがループペダルの実装に向いているか、検証してみたいと思っている。
サンプルコードについて
GitHubにサンプルコードが試せるデモ・アプリケーションを用意した。
デモ・アプリケーションはタブ・バーでビューが切り替えられるようになっていて、各サンプル・コードは、タブに対応したビュー・コントローラ毎に実装されている。
今回は、ここまで。
ソースコード
GitHubからどうぞ。
https://github.com/murakami/DemoAudio - GitHub
関連情報
Cocoa Life KOF2011特別編 - Facebook
Cocoa勉強会 関西の会誌。