Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么可以';改变AU多通道混频器输入范围内的元件/总线数量?_Ios_Core Audio_Audiounit - Fatal编程技术网

Ios 为什么可以';改变AU多通道混频器输入范围内的元件/总线数量?

Ios 为什么可以';改变AU多通道混频器输入范围内的元件/总线数量?,ios,core-audio,audiounit,Ios,Core Audio,Audiounit,更新: 我正在修改我的代码,以更精简的方式说明这个问题。我也有一个小bug,虽然不能阻止这个问题,但确实增加了一些混乱 我正在iOS中实例化一个多通道混频器AU(kAudioUnitSubType_MultiChannelMixer),并执行以下操作: OSStatus status = noErr; // Set component type: AudioComponentDescription cd = {0}; cd.componentType = kAudioUnitType_Mix

更新: 我正在修改我的代码,以更精简的方式说明这个问题。我也有一个小bug,虽然不能阻止这个问题,但确实增加了一些混乱

我正在iOS中实例化一个多通道混频器AU(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以上。

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

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

因此,
numElements
将包含大量元素。

我与CoreAudio团队的一名苹果工程师交谈,并向他展示了我的代码,他同意这肯定是一个bug。他甚至亲自尝试了一下,得到了与我相同的结果:该单元在默认情况下似乎实例化了8个输入,您只能将数字设置为大于8,但不能小于8(是的,我的代码最初显示了2个输入,因为我弄乱了并除以了8/4——谢谢)


他让我装雷达,我就装了15214291.

我也试过了,但看起来还是很混乱。例如,在不划分的情况下,通用输出单元的kAudioUnitScope_输入为1,远程I/O为2(如果与显示2个元素0,1的AU的常规图表相比,这是有意义的,但如果遵循说明:“一个输入元素(1),一个输出元素(0))的文档,则没有意义)多通道混频器默认为8,不能从8降到8(这也没有意义,因为理论上它可以有“任意”数量的输入)。您将在“使用属性配置音频单元”下看到它提到的配置输入/输出的
kAudioUnitProperty\u ElementCount
。此外,您将注意到“使用特定音频单元”部分,这意味着多声道混音器可以具有“任意“in元素的数量和最后一个,它们在多混频器中设置ins的位置您是否已经为要连接到混频器的节点调用了AUGraphConnectNodeInput?”?另外,元件/总线与通道不同。每个输入元素可以有1个声道(单声道)或2个声道(立体声)。苹果的《音频单元托管指南》介绍了混音器单元在频道中的行为,以及根据每个输入节点的配置,需要如何设置ASBD。AudioGraph是基于MixerHost的,对于为什么事情会这样做有一些很好的评论:AUGraph不应该与此有任何关系。这是关于设置一个AU的属性,不管它是否在图形中使用(顺便说一句,我不是)。看看我的答案。