无法从MTAudioProcessingTap内的AudioUnit获取AudioStreamBasicDescription

时间:2014-07-23 21:39:24

标签: ios avfoundation core-audio

由于MTAudioProcessingTap上的文档很少(更像是没有,真的),我使用Apple's demo app from WWDC 2012

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

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

OSStatus status = 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));
}

1 个答案:

答案 0 :(得分:2)

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
}