AUGraphを使っているとコールバック関数を登録しなければならないことがあります。
[c]
AURenderCallbackStruct callbackStruct;
{
callbackStruct.inputProc = recorderCallbackFunction;
callbackStruct.inputProcRefCon = reinterpret_cast<void *>((__bridge void *)self);
}
err = AUGraphSetNodeInputCallback(mAuGraph, remoteIONode, 0, &callbackStruct);
[/c]
こういった形で。
SwiftでAUGraphを使う場合1つ問題があり、これには関数のポインタが使われているのですがこれがSwiftで使えません。上で言うとrecorderCallbackFunctionの部分です。
つまり
[c]
func callbackFunction(
inRefCon:UnsafeMutablePointer<Void>,
ioActionFlags:UnsafeMutablePointer<AudioUnitRenderActionFlags>,
inTimeStamp:UnsafePointer<AudioTimeStamp>,
inBusNumber:UInt32,
inNumberFrames:UInt32,
ioData:UnsafeMutablePointer<AudioBufferList>) -> (OSStatus)
{
return noErr;
}
[/c]
こういうcallbackを用意したとして、
[c]
var callbackSgtruct = AURenderCallbackStruct(inputProc: callbackFunction , inputProcRefCon: nil)
error = AUGraphSetNodeInputCallback(mAuGraph, remoteIONode, 0, &callbackSgtruct)
[/c]
としてもエラーで登録できないのです。
この問題は少なくともSwift1.2まで存在しています。
解決法は現状は存在しないようなので、この部分に関してはObjective-Cを使うしか無いようです。