2013-04-02 52 views
4

所以我想弄清苹果在iOS 5中添加的记录不当的NBandEQ。我能够得到它在16频段以下的任何事情都很好,但我想要更多:)发生了什么?如果我将它设置为15段均衡器,一切正常,但如果我使用16或更高的数字,当我设置kAUNBandEQProperty_NumberOfBands时,出现-10851(kAudioUnitErr_InvalidPropertyValue)的错误,那么前8个乐队设置正常,其余的结果是 - 10878(kAudioUnitErr_InvalidParameter)错误。所以15个乐队可以成功完成,但是当我到达16个时,突然间只有8个乐队可以完成。有我可以读的kAUNBandEQProperty_MaxNumberOfBands,我认为是目前状态的设备可以处理的限制。那么它吐出不规则的数字从12位数字到4位数字。我想我自己不喜欢我给它的极端频率。我消除了这种可能性。然后我意识到频带的带宽可能会重叠,并且不会那样。所以我将带宽从默认的.5降低到最小。 .05没有帮助以太。试图找出核心音频的NBandEQ

我确实意识到,毕竟我搞砸了所有愚蠢的设置,因为它开始抱怨之前,我甚至得到了这些设置。它已经在乐队的数量和错误。

我发布这个问题,看看是否有更多的经验丰富的程序员可以看到我的代码中的东西搞砸了我,并指出了我。我意识到并不是很多人已经冒险进入核心音频,更少的NBandEQ,但也许我搞乱了一些基本的C,所以请看看。我会非常感激。我很沮丧。同样在发布这个代码(甚至tho这是丑陋的测试代码),也许我可以帮助其他人后面。我知道我希望至少有一个代码片段,我可以看看有关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)); 
} 

}

回答

3

好吧,我想通了。我曾在kAUNBandEQProperty_MaxNumberOfBands上使用kAudioUnitScope_Output,应该是kAudioUnitScope_Global

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

+0

这是问题的答案,但我不确定标记我自己的答案是否很酷,因为看起来这可能会被滥用以提高声誉。请让我知道我应该如何做到这一点。如果别人想要回答它,我可以将它们标记为答案。 –

+0

此外,我很想知道如果数量不同,在不同的设备上。这些是我可以访问的唯一设备。如果人们发布了他们的结果,会喜欢它。 –

+1

如果你接受你自己的答案,那很好。你不会得到它的声誉。你解决了这个问题,接受它是表明这是答案的正确方法。 –