为什么我不能在AU多声道调音台的input范围内更改元素/总线的数量?

更新:我正在更改我的代码,以更简化的方式说明问题。 另外我还有一个小问题,虽然没有阻止问题,却增加了一些困惑。

我在iOS(kAudioUnitSubType_MultiChannelMixer)中实例化一个多通道混音器AU,并执行以下操作:

OSStatus status = noErr; // Set component type: AudioComponentDescription cd = {0}; cd.componentType = kAudioUnitType_Mixer; cd.componentSubType = kAudioUnitSubType_MultiChannelMixer; cd.componentManufacturer = kAudioUnitManufacturer_Apple; // Alloc unit: AudioComponent defaultOutput = AudioComponentFindNext(NULL, &cd); AudioUnit mixer; status = AudioComponentInstanceNew(defaultOutput, &mixer); NSLog(@"AU init status: %li", status); // You can try initializing the unit before or after the attempt to set its input bus count. // It doesn't matter; it won't work either way. AudioUnitInitialize(mixer); // Get number of inputs UInt32 busSize = sizeof(UInt32); UInt32 busCount = 0; status = AudioUnitGetProperty(mixer, kAudioUnitProperty_ElementCount, kAudioUnitScope_Input, 0, &busCount, &busSize); NSLog(@"AU get input bus count | status: %li | count: %lu", status, busCount); // Try setting number of inputs busCount = 3; status = AudioUnitSetProperty(mixer, kAudioUnitProperty_ElementCount, kAudioUnitScope_Input, 0, &busCount, busSize); NSLog(@"AU set input status: %li", status); // Get number of inputs busCount = 0; status = AudioUnitGetProperty(mixer, kAudioUnitProperty_ElementCount, kAudioUnitScope_Input, 0, &busCount, &busSize); NSLog(@"AU get input bus count | status: %li | count: %lu", status, busCount); // Try setting number of inputs busCount = 10; status = AudioUnitSetProperty(mixer, kAudioUnitProperty_ElementCount, kAudioUnitScope_Input, 0, &busCount, busSize); NSLog(@"AU set input status: %li", status); // Get number of inputs busCount = 0; status = AudioUnitGetProperty(mixer, kAudioUnitProperty_ElementCount, kAudioUnitScope_Input, 0, &busCount, &busSize); NSLog(@"AU get input bus count | status: %li | count: %lu", status, busCount); 

我得到以下输出:

 2013-10-11 19:54:32.248 AUMultiChannelRadar[3996:a0b] AU init status: 0 2013-10-11 19:54:32.249 AUMultiChannelRadar[3996:a0b] AU get input bus count | status: 0 | count: 8 2013-10-11 19:54:32.250 AUMultiChannelRadar[3996:a0b] AU set input status: 0 2013-10-11 19:54:32.250 AUMultiChannelRadar[3996:a0b] AU get input bus count | status: 0 | count: 8 2013-10-11 19:54:32.250 AUMultiChannelRadar[3996:a0b] AU set input status: 0 2013-10-11 19:54:32.251 AUMultiChannelRadar[3996:a0b] AU get input bus count | status: 0 | count: 10 

我希望总线数不是默认的8(因为audio单元文件没有说实例化时有一个默认值),我希望能够将input元素的数量更改为less和超过8个(因为文档说它可以有“任何”数量的input)。 但是,从输出中,尝试将input计数设置为小于8时什么都不做; 我只能把它设置为8以上。

我和一个属于CoreAudio团队的苹果工程师交谈,向他展示了我的代码,他同意这肯定是一个错误。 他甚至自己试了一下,得到了和我一样的结果:单位默认情况下是8个input实例化的,你只能设置8个以上但是不能less(是的,我的代码最初显示2个input会导致I被搞乱了,把8/4分开 – 谢谢)。

他让我提交一个雷达,所以我做了。 #15214291。

我认为没有必要划分UInt32大小的元素的数量。

 UInt32 numElements = 0; UInt32 size = sizeof(numElements); AudioUnitGetProperty(_audioUnit, kAudioUnitProperty_ElementCount, kAudioUnitScope_Input, 0, &numElements, &size); 

所以, numElements将包含元素的数量。