audiokit - 在 AudioKit v5 中向 PWMOscillator 添加 LowPassFilter
问题描述
我正在玩 AKv5,我试图在 PWMOscillator 之后添加一个 LowPassFilter,使用食谱中的 PWMOscillator 配方作为基础。
[PWMOscillator] -> [LowPassFilter] -> Out
看起来应该很简单,我已将下面的代码添加到基本的 PWMOscillator Cookbook 食谱中。但是 LowPassFilters 似乎没有任何效果,就像它被绕过一样。
我已将此与食谱中的 LowPassFilter 配方进行了比较,与该示例相比,我似乎没有遗漏任何东西。
所以我希望人们知道为什么我听不到 LowPassFilter 做任何事情?
我错过了一些非常明显的东西吗?
提前致谢。
struct PWMOscillatorData {
var isPlaying: Bool = false
/// Pulse Width ranges from 0.001 to .5 (Default: .5)
var pulseWidth: AUValue = 0.5
/// Frequency (Hz) ranges from 10 to 22050 (Default: 6900)
var frequency: AUValue = 440
/// Amplitude ranges from 0 to 1
var amplitude: AUValue = 0.1
/// Ramp Duration ranges from 0 to ? Seconds
var rampDuration: AUValue = 1
/// Cutoff Frequency (Hz) ranges from 10 to 22050 (Default: 6900)
var cutoff: AUValue = 20
/// Resonance (dB) ranges from -20 to 40 (Default: 0)
var resonance: AUValue = 0
}
class PWMOscillatorConductor: ObservableObject, KeyboardDelegate {
...
let engine = AudioEngine()
var osc: PWMOscillator
var lpFilter: LowPassFilter
...
@Published var data = PWMOscillatorData() {
didSet {
if data.isPlaying {
osc.start()
osc.$pulseWidth.ramp(to: data.pulseWidth, duration: data.rampDuration)
osc.$frequency.ramp(to: data.frequency, duration: data.rampDuration)
osc.$amplitude.ramp(to: data.amplitude, duration: 0.01)
} else {
osc.amplitude = 0.0
}
lpFilter.$cutoffFrequency.ramp(to: data.cutoff, duration: 0.01)
lpFilter.$resonance.ramp(to: data.resonance, duration: 0.01)
}
}
...
init() {
osc = PWMOscillator()
lpFilter = LowPassFilter(osc)
engine.output = lpFilter
}
...
ParameterSlider(text: "Cutoff",
parameter: self.$pwmConductor.data.cutoff,
range: 10...11500).padding(5)
ParameterSlider(text: "Resonance",
parameter: self.$pwmConductor.data.resonance,
range: -20...40 ).padding(5)
测试
解决方案
似乎 LowPassFilter 对绑定变量不太满意。
我不得不改变 var = data 。
@Published var data = PWMOscillatorData() {
didSet {
if data.isPlaying {
osc.start()
osc.$pulseWidth.ramp(to: data.pulseWidth, duration: data.rampDuration)
osc.$frequency.ramp(to: data.frequency, duration: data.rampDuration)
osc.$amplitude.ramp(to: data.amplitude, duration: 0.01)
} else {
osc.amplitude = 0.0
}
lpFilter.cutoffFrequency = data.cutoff
lpFilter.resonance = data.resonance
}
}
推荐阅读
- sharepoint - 自动添加用户照片
- css - 编写代码时如何阻止vs代码终端打开
- html - 与 Angular 中的 img 标签一起使用时,何时触发 onerror 事件?
- javascript - 在 Firefox 中从 PEM 导入椭圆曲线私钥
- android - 如何在 Firebase 实时数据库中添加具有相同节点名称的不同值?
- android - 在 asp.net MVC 视图中的文件上传在 web 视图的 android 应用程序中不起作用
- machine-learning - 如何使用神经网络获得一致的资产价格预测结果
- c++ - 使用任何最快的读取方法读取 1 TB 或更大的二进制文件
- javascript - Angular:通过单击复选框添加组件并通过取消单击来删除组件
- android - 如何在android中显示存储中的音频文件的缩略图