我是新的 AUAudioUnits,并试图了解如何使用 v3 API。我正在尝试在kAudioUnitSubType_MultiChannelMixer
AUAudioUnit 上安排参数更改,以便我可以随着时间的推移增加增益变化。我可以直接使用滑块设置增益,并且更改会立即生效,如下所示:
/*...*/
// Inside my ViewController
@IBAction func slider1Changed(sender: UISlider) {
player.gainParameter.setValue(sender.value, originator: nil)
}
// Inside my AudioPlayerClass
guard let parameterTree = self.multichannelMixer.parameterTree else {
print("Param Tree")
return
}
self.gainParameter = parameterTree.parameterWithID(
kMultiChannelMixerParam_Volume,
scope: kAudioUnitScope_Input,
element: 0)
但是当我尝试scheduleParameterBlock
通过将其添加到上面的 AudioPlayerClass 来执行此操作时,我希望增益在 10 秒内从 1 上升到 0,但没有变化:
let scheduleMixerParamBlock = self.multichannelMixer.scheduleParameterBlock
let rampTime = AUAudioFrameCount(10.secondsToSampleFrames)
scheduleMixerParamBlock(AUEventSampleTimeImmediate, rampTime, self.gainParameter.address, 0)
我在苹果示例中看到它的示例包括这样的代码(没有 dispatch_async 部分):
parameterTree.implementorValueObserver = {param, value in
dispatch_async(dispatch_get_main_queue()) {
print(param, value)
}
scheduleMixerParamBlock(AUEventSampleTimeImmediate, rampTime, param.address, value)
}
当我运行此程序并使用滑块更改增益参数时,该块将运行,param
并value
以正确的外观值打印到控制台,但实际音频中的增益没有改变。我看到的这些示例也在自定义 AUAudioUnits 上,其中实现者可以直接访问 dspKernel 函数,所以我可能会遗漏一些重要的东西。另一种选择是我必须计算一系列斜坡值,然后直接为每个值设置增益参数,但既然scheduleParameterBlock
存在似乎我应该能够使用它。任何帮助都会很棒。谢谢