首页 > 解决方案 > 对 AudioKit FM 振荡器参数执行基本算术运算:插值和时间转换

问题描述

AudioKit 是否提供了一种计算离散数组成员的插值的方法?AudioKit 是否提供了一种方法来平滑振荡器参数(如 baseFrequency、AKOperation.periodicTrigger 或保持)之间的转换操作?

在我用于 FM 生成的代码下方:

let oscillator = AKOperation.fmOscillator(baseFrequency: Synth.frequency,
                                                      carrierMultiplier: 2,
                                                      modulatingMultiplier: 0.8,
                                                      modulationIndex: 1,
                                                      amplitude: Synth.amplitude.triggeredWithEnvelope(
                                                        trigger: AKOperation.periodicTrigger(period: Synth.cyclic),
                                                        attack: 0.01,
                                                        hold: Synth.hold,
                                                        release: 0.01))

对于输入参数,Frequency Cycle和Duty的插值应根据下表(数组)进行插值计算:

P1      Freq.   Cycle   Duty %

-10     200     100     100

-3.04   405     100     100 

-0.51   300     500     100 

-0.50   200     800     5 

0.09        400     600     10 

0.10        400     600     50 

1.16        550     552     52 

2.67        763     483     55 

4.24        985     412     58 

6.00        1234    322     62 

8.00        1517    241     66 

10.00   1800    150     70

应根据输入参数 P1 平滑值的转换(对于 Freq.、Cycle 和 Duty)。这就是 AKComputedParameter 例如 smoothDelay 的用途吗?

如何告诉 AudioKit 应用 AKComputedParameter?

您是否有示例代码(代码片段)用于根据上面的代码应用到振荡器来实现插值/转换操作?基于 AK 或 vDSP 方法。

我不确定如何申请https://audiokit.io/docs/Protocols/AKComputedParameter.html

标签: iosswiftaudiokitvdspakoperation

解决方案


我认为这个问题在某种程度上被否决了,因为您似乎要求使用该值表进行过多的实际实现。我将忽略这一点,并说无论您决定在应用程序逻辑中更改振荡器的参数,都可以通过滑音值来使过渡平滑。

因此,在您的频率情况下,您将替换Synth.frequency为您设置的参数,然后您将像滑音一样AKOperation.parameters[0].portamento(halfTime: 0.5)

在此处查看使用参数的示例:https ://audiokit.io/playgrounds/Synthesis/Plucked%20String%20Operation/


推荐阅读