【问题标题】:How to use kAudioUnitSubType_LowShelfFilter of kAudioUnitType_Effect which controls bass in core Audio?如何使用 kAudioUnitType_Effect 的 kAudioUnitSubType_LowShelfFilter 来控制核心音频中的低音?
【发布时间】:2012-08-09 11:03:41
【问题描述】:

我又提出了一个与 BASS 相关的问题。我已经发布了这个问题 How Can we control bass of music in iPhone,但没有得到应有的关注。但现在我进行了更多搜索并阅读了Core AUDIO。我有一个示例代码,我想在这里与大家分享它的下载链接iPhoneMixerEqGraphTest。看看这段代码,我看到的是开发人员使用了苹果 iPod 提供的预设均衡器。让我们看看一些代码sn-p:----

// iPodEQ unit
CAComponentDescription eq_desc(kAudioUnitType_Effect, kAudioUnitSubType_AUiPodEQ, kAudioUnitManufacturer_Apple);

kAudioUnitSubType_AUiPodEQ 的作用是从 iPod 的均衡器中获取预设值,并在 Xcode 中以数组的形式返回我们,我们可以在 PickerView/TableView 中使用该数组,并且可以设置任何类别,如贝司、摇滚、舞蹈等。这对我来说很无助只返回均衡器类型的名称,如低音、摇滚、舞蹈等,因为我只想实现低音并希望在 UISLider 上实现它。

要在滑块上实现低音,我需要一些值,以便我可以设置最小值和最大值,以便在移动滑块上更改低音。

得到这一切后,我开始阅读 Core Audio 的音频单元框架的类并得到了这个 之后我开始搜索低音控制并得到了这个

所以现在我需要实现这个kAudioUnitSubType_LowShelfFilter。但是现在我不知道如何在我的代码中实现这个枚举,以便我可以将低音控制为书面文档。甚至 Apple 也没有写过我们如何使用它。 kAudioUnitSubType_AUiPodEQ 这个类别向我们返回了一个数组,但 kAudioUnitSubType_LowShelfFilter 类别没有返回任何数组。在使用 kAudioUnitSubType_AUiPodEQ 这个类别时,我们可以使用数组中的均衡器类型,但是我们如何使用这个类别 kAudioUnitSubType_LowShelfFilter。任何人都可以以任何方式帮助我吗?这将是非常可观的。

谢谢。

【问题讨论】:

    标签: iphone ios core-audio ipod bass


    【解决方案1】:

    更新

    虽然它在 iOS 标头中声明,但 Low Shelf AU 在 iOS 上实际上不可用。


    Low Shelf 的参数与 iPod EQ 不同。

    在 `AudioUnit/AudioUnitParameters.h' 中声明和记录参数:

    // Parameters for the AULowShelfFilter unit
    enum {
      // Global, Hz, 10->200, 80
      kAULowShelfParam_CutoffFrequency = 0,
    
      // Global, dB, -40->40, 0
      kAULowShelfParam_Gain = 1
    };
    

    因此,在创建低架 AU 后,使用 AudioUnitSetParameter 配置其参数。

    您可以尝试的一些初始参数值是 120 Hz (kAULowShelfParam_CutoffFrequency) 和 +6 dB (kAULowShelfParam_Gain) - 假设您的系统能够很好地再现低音,那么您的低频内容应该是两倍的响度。


    你能告诉我如何使用这个 kAULowShelfParam_CutoffFrequency 来改变频率。

    如果一切配置正确,这应该就是所需要的:

    assert(lowShelfAU);
    const float frequencyInHz = 120.0f;
    OSStatus result = AudioUnitSetParameter(lowShelfAU,
                                            kAULowShelfParam_CutoffFrequency,
                                            kAudioUnitScope_Global,
                                            0,
                                            frequencyInHz,
                                            0);
    if (noErr != result) {
      assert(0 && "error!");
      return ...;
    }
    

    【讨论】:

    • 感谢贾斯汀的回答。你能告诉我如何使用这个 kAULowShelfParam_CutoffFrequency 来改变频率。我正在尝试更改它,但是当我更改它的值时它会崩溃。请帮忙!!!
    • 好的,谢谢回复,让我看看它是否适合我
    • 我们现在是否需要更改频率InHz 才能将低音从最小点更改为最大点?
    • 我试过了,现在连我的音乐都停止播放了。该怎么办?请做点什么。
    • @NikhilBansal 是的。您可以将frequencyInHz 设置为[10...200] 范围内的任何值,然后再次调用AudioUnitSetParameter
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多