iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど
進みが遅くて申し訳ないが、自分自身も確認しながらなので、一歩ずつ進めさせて欲しい。
サンプルでは、オーディオデータフォーマットを設定する関数として、『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なので、インターリーブなのか?
申し訳ない。続きは次回まで。