From 552bbc90a67238b4b95e76e12df63d9df147c056 Mon Sep 17 00:00:00 2001 From: Jeron Aldaron Lau Date: Sat, 18 May 2024 02:54:42 -0500 Subject: [PATCH] Implement rest of pulse synthesis --- examples/triangle.rs | 2 +- src/tree/osc/pulse.rs | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/examples/triangle.rs b/examples/triangle.rs index b373a41..2708e5e 100644 --- a/examples/triangle.rs +++ b/examples/triangle.rs @@ -6,7 +6,7 @@ mod wav; fn main() { // Define waveform - let waveform = const { Line(440.0).osc().pulse(Line(0.0), Line(0.5)) }; + let waveform = const { Line(440.0).osc().pulse(Line(0.0), Line(1.0)) }; // Initialize audio, and create synthesizer let mut audio = Audio::::with_silence(48_000, 48_000 * 5); let mut synth = Synth::new(waveform); diff --git a/src/tree/osc/pulse.rs b/src/tree/osc/pulse.rs index 3568e1a..1dbf1c4 100644 --- a/src/tree/osc/pulse.rs +++ b/src/tree/osc/pulse.rs @@ -14,10 +14,20 @@ where { fn synthesize(&self, elapsed: u64, interval: u64, vars: &[f32]) -> Chunk { let chunk = self.0.synthesize(elapsed, interval, vars); - let _cycle = self.1.synthesize(elapsed, interval, vars); + let cycle = self.1.synthesize(elapsed, interval, vars); let alias = self.2.synthesize(elapsed, interval, vars); let clip = alias.recip(); + let offset = cycle; + let pulse = chunk + .abs() + .gain(2.0) + .offset(-1.0) + .mix(offset) + .clip() + .amplify(clip) + .clip(); + let scale = offset.gain(0.5).neg_abs().offset(1.0).recip(); - chunk.abs().gain(2.0).offset(-1.0).amplify(clip).clip() + offset.gain(-0.5).mix(pulse).amplify(scale) } }