5

因此,我试图找出 Apple 在 iOS 5 中添加的记录不良的 NBandEQ。我能够让它适用于 16 频段以下的任何东西,但我想要更多:) 如果我将其设为 15 频段 EQ,会发生什么情况一切正常,但如果我设置任何数字 16 及以上,我会kAudioUnitErr_InvalidPropertyValue在设置时收到 -10851 ( ) 错误,kAUNBandEQProperty_NumberOfBands然后前 8 个频段设置正常,其余的会导致 -10878 ( kAudioUnitErr_InvalidParameter) 错误。所以15个乐队可以成功完成,但是当我突然到16个时,只能完成8个。有kAUNBandEQProperty_MaxNumberOfBands我可以读到我认为这是当前状态下的设备可以处理的限制。好吧,它会吐出从 12 位数字到 4 位数字的所有不稳定数字。我想我自己不喜欢我给它的极端频率。我消除了这种可能性。然后我意识到频段的带宽可能是重叠的,它不喜欢那样。所以我将带宽从默认的 0.5 降低到最小值。.05 没有帮助有以太。

我确实意识到,毕竟我搞乱了所有愚蠢的设置,因为它在我进入这些设置之前就开始抱怨了。它已经在乐队的数量上给出了错误。

我发布这个问题是为了看看是否有更有经验的程序员可以在我的代码中看到让我感到困惑的东西并指出给我。我意识到没有多少人冒险进入核心音频,更不用说 NBandEQ,但也许我搞砸了一些基本的 C,所以请看一下。我将非常感激。我显然很沮丧。同样在发布此代码时(即使它是丑陋的测试代码),也许我可以帮助其他落后的人。我知道我希望至少有一段与 NBandEQ 相关的代码片段可供我查看

在此先感谢您的帮助!

    //Getting max bands for this device???
UInt32 maxNumOfBands;
UInt32 propSize = sizeof(maxNumOfBands);
AudioUnitGetProperty([_equilizer audioUnit],
                     kAUNBandEQProperty_MaxNumberOfBands,
                     kAudioUnitScope_Output,
                     0,
                     &maxNumOfBands,
                     &propSize);
NSLog(@"THIS IS THE MAX NUMBER OF BANDS?---%u",(unsigned int)maxNumOfBands);

UInt32 noBands = [eqFrequencies count];
// Set the number of bands first
NSLog(@"NumberOfBands atempted:%i with result:%ld", (unsigned int)noBands, AudioUnitSetProperty(_equilizer.audioUnit,
                     kAUNBandEQProperty_NumberOfBands,
                     kAudioUnitScope_Global,
                     0,
                     &noBands,
                     sizeof(noBands)));
// Set the frequencies
for (NSUInteger i=0; i<noBands; i++) {
   NSLog(@"Set Frequency for band:%i with result:%ld", i, AudioUnitSetParameter([_equilizer audioUnit],
                          kAUNBandEQParam_Frequency+i,
                          kAudioUnitScope_Global,
                          0,
                          (AudioUnitParameterValue)[[eqFrequencies objectAtIndex:i] floatValue],
                          0));
}
 //set bandwidth
for (NSUInteger i=0; i<noBands; i++) {
    NSLog(@"Set bandwidth for band:%i with result:%ld", i, AudioUnitSetParameter([_equilizer audioUnit],
                          kAUNBandEQParam_Bandwidth+i,
                          kAudioUnitScope_Global,
                          0,
                          0.05,//of octive
                          0));
}

// Set the bypass to off "0"
for (NSUInteger i=0; i<noBands; i++) {
    NSLog(@"Set Bypass for band:%i with result:%ld", i, AudioUnitSetParameter([_equilizer audioUnit],
                                                   kAUNBandEQParam_BypassBand+i,
                                                   kAudioUnitScope_Global,
                                                   0,
                                                   0,//off
                                                   0));
}

}

4

1 回答 1

5

好吧,我想通了。我曾经用过kAudioUnitScope_OutputkAUNBandEQProperty_MaxNumberOfBands应该是kAudioUnitScope_Global

kAUNBandEQProperty_MaxNumberOfBands在 Sim、iPhone 5 和 Retina Ipad 上产生 16 个。

于 2013-04-09T15:12:50.267 回答