由于关于MTAudioProcessingTap的文档很少(实际上没有),因此我使用Apple's demo app from WWDC 2012

我正在尝试在MTAudioProcessingTap中包含一个音频图,因此我需要为需要特定的不同单元设置不同的流格式。但是每次我尝试使用AudioUnitGetProperty来获取AudioUnit的ASBD时,都会收到EXC_BAD_ADDRESS错误。

这是导致EXC_BAD_ACCESS的相关代码。您可以通过下载Apple的应用并将其添加到tap_PrepareCallback中来自己尝试。

OSStatus状态= noErr;

AudioStreamBasicDescription testStream;
        // Set audio unit input/output stream format to processing format.

if (noErr == status)
{
    status = AudioUnitGetProperty(audioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &testStream, sizeof(AudioStreamBasicDescription));
}

最佳答案

AudioUnitGetProperty为其大小参数采用一个指向UInt32的指针,在示例代码中您提供了一个值。这是标题:

AudioUnitGetProperty(               AudioUnit               inUnit,
                                AudioUnitPropertyID     inID,
                                AudioUnitScope          inScope,
                                AudioUnitElement        inElement,
                                void *                  outData,
                                UInt32 *                ioDataSize)

您应该像这样得到它:
AudioStreamBasicDescription testStream = {0};
UInt32 sizeTestStream = sizeof(AudioStreamBasicDescription);
OSStatus status = AudioUnitGetProperty(audioUnit,kAudioUnitProperty_StreamFormat,kAudioUnitScope_Input,0,&testStream,&sizeTestStream);
if(status){
    //handle error
}

08-07 04:38