Verwenden von ExtAudioFileWriteAsync () in der Rückruffunktion. Ich kann nicht rennen

Just scheint in Core Audio nicht sehr weit zu kommen. Mein Ziel ist es, aufgenommene Audiodaten von einem Instrument in eine Datei zu schreiben. Ich habe einen Anruf zu einer Rückruffunktion an einer Instrumenteneinheit mit folgendem Befehl eingerichtet:

CheckError(AudioUnitAddRenderNotify(player->instrumentUnit,
                                    MyRenderProc,
                                    &player),
           "AudioUnitAddRenderNotify Failed");

Ich habe die Datei und AudioStreamBasicDescription folgendermaßen eingerichtet:

#define FILENAME @"output_IV.aif"

NSString *fileName = FILENAME; // [NSString stringWithFormat:FILENAME_FORMAT, hz];
NSString *filePath = [[[NSFileManager defaultManager] currentDirectoryPath] stringByAppendingPathComponent: fileName];
NSURL *fileURL = [NSURL fileURLWithPath: filePath];
NSLog (@"path: %@", fileURL);

AudioStreamBasicDescription asbd;
memset(&asbd, 0, sizeof(asbd));
asbd.mSampleRate = 44100.0;
asbd.mFormatID = kAudioFormatLinearPCM;
asbd.mFormatFlags = kAudioFormatFlagIsBigEndian | kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
asbd.mChannelsPerFrame = 2; // CHANGED FROM 1 (STEREO)
asbd.mFramesPerPacket = 1;
asbd.mBitsPerChannel = 16;
asbd.mBytesPerFrame = 4;
asbd.mBytesPerPacket = 4;

CheckError(ExtAudioFileCreateWithURL((__bridge CFURLRef)fileURL, kAudioFileAIFFType, &asbd, NULL, kAudioFileFlags_EraseFile, &testRecordFile), "ExtAudioFileCreateWithURL failed"); 
CheckError(ExtAudioFileSetProperty(testRecordFile, kExtAudioFileProperty_ClientDataFormat, (UInt32)sizeof(asbd), &asbd), "ExtAudioFileSetProperty failed"); 
CheckError(ExtAudioFileWriteAsync(testRecordFile, 0, NULL), "ExtAudioFileWriteAsync 1st time failed");

Ich habe überprüft, ob die Datei erstellt wird. testRecordFile ist global definiert (es ist die einzige Möglichkeit, die Dinge im Moment zum Laufen zu bringen):

ExtAudioFileRef testRecordFile;

Meine Rückruffunktion lautet:

OSStatus MyRenderProc(void *inRefCon,
                  AudioUnitRenderActionFlags *ioActionFlags,
                  const AudioTimeStamp *inTimeStamp,
                  UInt32 inBusNumber,
                  UInt32 inNumberFrames,
                  AudioBufferList * ioData)
{
    if (*ioActionFlags & kAudioUnitRenderAction_PostRender){
    static int TEMP_kAudioUnitRenderAction_PostRenderError = (1 << 8);
        if (!(*ioActionFlags & TEMP_kAudioUnitRenderAction_PostRenderError)){
            CheckError(ExtAudioFileWriteAsync(testRecordFile, inNumberFrames, ioData), "ExtAudioFileWriteAsync failed");
        }
    }
return noErr;
}

Wenn ich dies ausführe, dreht sich das Programm um und wechselt beim ExtAudioFileWriteAsync-Aufruf in den Debugger-Modus (lldb). inNumberFrames = 512 und ich habe bestätigt, dass ich Stereokanäle mit Float32-Audiodaten in ioData erhalte.

Was fehle ich hier?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage