试图弄清楚 Core Audio 的 NBandEQ

Posted

技术标签:

【中文标题】试图弄清楚 Core Audio 的 NBandEQ【英文标题】:Trying to figure out Core Audio's NBandEQ 【发布时间】:2013-04-02 02:39:50 【问题描述】:

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

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

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

提前感谢您的帮助!

    //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】:

嗯,我想通了。我在kAUNBandEQProperty_MaxNumberOfBands 上使用了kAudioUnitScope_Output,它应该是kAudioUnitScope_Global

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

【讨论】:

这是问题的答案,但我不确定标记自己的答案是否很酷,因为似乎可以滥用它来提高声誉。请让我知道我应该怎么做。如果其他人只想回答,我可以将其标记为答案。 另外我很想知道不同设备上的数字是否不同。这些是我可以访问的唯一设备。如果人们发布他们的结果会很高兴。 如果您接受自己的答案就可以了。你不会因此获得声誉。你解决了问题,接受它是表明这里是答案的正确方式。

以上是关于试图弄清楚 Core Audio 的 NBandEQ的主要内容,如果未能解决你的问题,请参考以下文章

试图弄清楚如何根据特定书籍的类型更改背景图像

试图弄清楚 MASM 语法

试图弄清楚如何使用字符退出 System.exit

新手试图弄清楚 PHP [重复]

试图弄清楚为啥 NewID 函数停止在 Oracle 上工作

试图弄清楚如何将总分恢复到主要打印出来。它正在显示但未存储在变量中