[iOS]Looping Recorderの基礎(Audio Unit (3))
進みが遅くて申し訳ないが、自分自身も確認しながらなので、一歩ずつ進めさせて欲しい。
サンプルでは、オーディオデータフォーマットを設定する関数として、『iPhone Core Audioプログラミング』の説明を参考にして、この本で説明されたAudio Unit正準形とオーディオ正準形の2つに対応したものを用意している。Audio Unit正準形は非インターリーブ、オーディオ正準形はインターリーブ。
録音のコールバック関数に渡されるデータについて確認して行こう。前回から少し出力内容を変更したが、以下がシミュレータで録音時に印字されるデバッグ出力だ。
2012-04-01 01:45:33.482 DemoAudio[7045:10703] -[AudioUnitViewController record:]
2012-04-01 01:45:34.925 DemoAudio[7045:17503] MyAURenderCallack, inNumberFrames:512
2012-04-01 01:45:34.926 DemoAudio[7045:17503] ioData: mNumberBuffers(1)
2012-04-01 01:45:34.928 DemoAudio[7045:17503] ioData->mBuffers[0]: mNumberChannels(2), mDataByteSize(2048)
inNumberFramesが記録されたサンプル数で、44.1kHzでは1秒間で44100個×チャンネル数となる。上記では512となっているので、1秒間に44100÷512≒約86回、コールバック関数が呼ばれるということになる。
オーディオデータフォーマットは、Audio Unit正準形に設定してる。なので、mNumberBuffersが1なのでモノラルということになるのか?
サンプルは、32ビットなので、4byte×512サンプル=2048。mDataByteSizeの値と一致している。
ただし、mNumberChannelsが2だ。文書によると非インターリーブの場合1なので、インターリーブなのか?
申し訳ない。続きは次回まで。
ソースコード
GitHubからどうぞ。
https://github.com/murakami/DemoAudio - GitHub
関連情報
Cocoa Life KOF2011特別編 - Facebook
Cocoa勉強会 関西の会誌。
iPhone Core Audioプログラミング(永野 哲久 著)
とれも参考にさせていただきました。