[iOS]Looping Recorderの基礎(Audio Unit (2)) | Cocoa練習帳

[iOS]Looping Recorderの基礎(Audio Unit (2))

そもそも、録音のコールバック関数に渡されるデータは何なのだろうか?


型は以下のとおり。




static OSStatus MyAURenderCallack(void *inRefCon,
                                  AudioUnitRenderActionFlags *ioActionFlags,
                                  const AudioTimeStamp *inTimeStamp,
                                  UInt32 inBusNumber,
                                  UInt32 inNumberFrames,
                                  AudioBufferList *ioData);
 
typedef struct AudioBufferList {
    UInt32      mNumberBuffers;
    AudioBuffer mBuffers[1];
} AudioBufferList;
 
typedef struct AudioBuffer {
    UInt32  mNumberChannels;
    UInt32  mDataByteSize;
    void*   mData;
} AudioBuffer;



AudioBuffer構造体のmDataメンバー変数は、AudioUnitSampleType型だ。




typedef SInt32 AudioUnitSampleType;



OS XのAudio UnitではFloat32型という情報があったが、Xcodeの文書では、SInt32となっていた。サイズは同じで、それをどう使うのかアプリ次第なので、SInt32に統一されたのだろうか?ちなみに、iOSでは8.24固定小数点だそうだ。




先日の録音時に呼ばれるコールバック関数のデバッグ出力をもう少し詳細にしてみた。




static OSStatus MyAURenderCallack(void *inRefCon,
                                  AudioUnitRenderActionFlags *ioActionFlags,
                                  const AudioTimeStamp *inTimeStamp,
                                  UInt32 inBusNumber,
                                  UInt32 inNumberFrames,
                                  AudioBufferList *ioData)
{
    DBGMSG(@"%s, inNumberFrames:%u", __func__, (unsigned int)inNumberFrames);
    DBGMSG(@"ioData: mNumberBuffers(%u)", (unsigned int)ioData->mNumberBuffers);
    DBGMSG(@"ioData->mBuffers: mNumberChannels(%u), mDataByteSize(%u)",
           (unsigned int)ioData->mBuffers->mNumberChannels,
           (unsigned int)ioData->mBuffers->mDataByteSize);
    return noErr;
}



エミュレータでの出力結果は以下のとおり。




2012-03-30 00:56:22.237 DemoAudio[1566:12307] MyAURenderCallack, inNumberFrames:512
2012-03-30 00:56:22.239 DemoAudio[1566:12307] ioData: mNumberBuffers(1)
2012-03-30 00:56:22.240 DemoAudio[1566:12307] ioData->mBuffers: mNumberChannels(2), mDataByteSize(2048)



次回は、これをアプリケーションが独自に持っているリングバッファにどう書き込むかだ。




ソースコード
GitHubからどうぞ。

https://github.com/murakami/DemoAudio - GitHub


関連情報
Cocoa Life KOF2011特別編 - Facebook

Cocoa勉強会 関西の会誌。

iPhone Core Audioプログラミング(永野 哲久 著)

とれも参考にさせていただきました。