由于关于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
}