8

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

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

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

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

在得到所有这些之后,我开始阅读 Core Audio 的音频单元框架的类并得到了这个iPod Desc 图片 ,然后我开始搜索低音控制并得到了这个

在此处输入图像描述

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

谢谢。

4

1 回答 1

4

更新

尽管它在 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 ...;
}
于 2012-08-19T09:24:44.007 回答