iOS均衡器由kAudioUnitSubType_NBandEQ提供

时间:2014-11-21 06:52:08

标签: ios audiounit equalizer

我想在iOS设备上实现我的均衡器,它似乎可以通过kAudioUnitSubType_NBandEQ实现。然而,在我设定每个乐队的增益后,我听到声音没有任何变化。

我使用BandEQDemo(https://github.com/springlo/BandEQDemo

的示例代码
OSStatus TOAUGraphAddNode(OSType inComponentType, OSType inComponentSubType, AUGraph inGraph, AUNode *outNode)
{
    AudioComponentDescription desc;
    desc.componentType = inComponentType;
    desc.componentSubType = inComponentSubType;
    desc.componentFlags = 0;
    desc.componentFlagsMask = 0;
    desc.componentManufacturer = kAudioUnitManufacturer_Apple;

    return AUGraphAddNode(inGraph, &desc, outNode);
}

TOAUGraphAddNode(kAudioUnitType_Effect,
                 kAudioUnitSubType_NBandEQ,
                 graph,
                 &eqNode);

AUGraphNodeInfo(graph,
                eqNode,
                NULL,
                &equalizerUnit);
// @[ @32, @64, @128, @256, @512, @1025, @2048, @4096, @8192, @16384 ]

然后我设置增益并再次通过这两个函数检查:

- (AudioUnitParameterValue)gainForBandAtPosition:(NSUInteger)bandPosition
{
    AudioUnitParameterValue gain;
    AudioUnitParameterID parameterID = kAUNBandEQParam_Gain + bandPosition;

    TOThrowOnError(AudioUnitGetParameter(equalizerUnit,
                                         parameterID,
                                         kAudioUnitScope_Global,
                                         0,
                                         &gain));

    return gain;
}


- (void)setGain:(AudioUnitParameterValue)gain forBandAtPosition:(NSUInteger)bandPosition
{
    AudioUnitParameterID parameterID = kAUNBandEQParam_Gain + bandPosition;

    TOThrowOnError(AudioUnitSetParameter(equalizerUnit,
                                         parameterID,      
                                         kAudioUnitScope_Global,
                                         0,
                                         gain,
                                         0));
    NSLog(@"After set gain@[%d]->%f", bandPosition, [self gainForBandAtPosition:bandPosition]);
}

当我设置了每个频段的增益值(-96dB~24dB)后,它确实对应于我设置的值。但我听不到声音的任何不同。

1 个答案:

答案 0 :(得分:2)

嗨其他音频爱好者!

我也正在创建一个具有均衡器功能的应用,并偶然发现了这个网页:

http://www.deluge.co/?q=content/coreaudio-iphone-creating-graphic-equalizer

通过一些交叉引用,我发现Git源代码缺少一些关键功能。在第142行之后,必须进行附加参数设置。 例如,不使用setNumBands方法,也不使用setBands。此外,请确保包含旁路设置循环 - 没有它它真的不会工作!最重要的是,根据上述内容,检查您的实现中缺少哪些代码。

对不起,我不能通过解释给你更多;我几天前开始学习音频单元;但你的问题(以及BandEQ项目)和我偶然发现的页面已经解决了我的一些问题,所以我也试图帮助你。

尽管如此,this是音频单元的官方指南并且正在研究它,我也将这样做!祝你好运!