如何解决在AudioKit v5中向PWMOscillator添加LowPassFilter
我正在玩AKv5,并且我试图以菜谱中的PWMOscillator配方为基础在PWMOscillator之后添加LowPassFilter。
[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 =数据。
@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
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。