试图找出Core Audio的NBandEQ

时间:2013-04-02 02:39:50

标签: ios c audio core-audio audiounit

所以我试图弄清楚Apple在iOS 5中添加的记录错误的NBandEQ。我能够让它适用于16频段以下的任何东西,但我想要更多:)如果我做到这一点会发生什么15频段EQ一切正常但是如果我去任何数字16及以上我在设置kAudioUnitErr_InvalidPropertyValue时出现-10851(kAUNBandEQProperty_NumberOfBands)错误,那么前8个频段设置正常,其余结果为-10878(kAudioUnitErr_InvalidParameter)错误。因此可以成功完成15个频段,但是当我突然进入16个频段时,只能完成8个频段。有kAUNBandEQProperty_MaxNumberOfBands我可以读到,我认为这是当前状态的设备可以处理的限制。好吧,从12位数字到4位数字,它会发出不规则的数字。我觉得自己不喜欢我给它的极端频率。我消除了这种可能性。然后我意识到频带的带宽可能重叠,并且它不是那样的。所以我将带宽从默认的.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));
}

}

1 个答案:

答案 0 :(得分:4)

好吧我明白了。我在kAudioUnitScope_Output使用了kAUNBandEQProperty_MaxNumberOfBands它应该是kAudioUnitScope_Global

kAUNBandEQProperty_MaxNumberOfBands在Sim,iPhone 5和Retina Ipad上获得了16分。