为什么不能改变AU多通道混频器的输入范围元素/总线的数量?(Why can't I chan

2019-09-28 12:55发布

更新:我改变了我的代码来说明一个更精简的方式问题。 另外我有一个小错误,这错误,而不是从问题阻止,确实添加了一些混乱。

我实例化一个多通道混合器AU iOS中(kAudioUnitSubType_MultiChannelMixer),我做到以下几点:

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(因为音频单元文件并没有说有上实例化一个默认值),我希望能够输入元素的数量变化既少超过8对于这个问题(因为文档说,它可以输入“任何”号)。 但是,从输出,试图将输入计数设置为小于8不执行任何操作; 我只能将它设置为8个以上。

Answer 1:

我跟一个苹果电脑的工程师谁是CoreAudio的团队的一员,向他展示我的代码,他答应这肯定是一个错误。 他甚至尝试过了自己,并得到了相同的结果我:单位似乎与8个输入默认实例化,你可以只数设定为8个以上,但不小于(是的,我的代码最初显示2路输入,因为我是搞乱除以8/4 - 感谢)。

他告诉我,所以我做了提交的雷达。 #15214291。



Answer 2:

我觉得没有必要划分上UInt32的大小元素的数量。

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

因此, numElements将包含元素的个数。



文章来源: Why can't I change the number of elements / buses in the input scope of AU multi channel mixer?