由于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));
}
答案 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
}