geedback

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit 8cfa34a06a98fe3b3c2f2dbd1297bf42d25009da
parent e0260d9171386436f3c2aab2d041ba89e95cfdb3
Author: minerva-jupiter <ryouturn@gmail.com>
Date:   Sat, 23 May 2026 21:27:17 +0900

feat(dsp): update oscillator modulation mapping

Implement cubic non-linear scaling for FM depths to provide a more dynamic response (quiet at low acceleration, aggressive at high acceleration) and adjust phase modulation calculations for improved signal handling.

Diffstat:
Mgeedback-dsp/pkg/geedback_dsp_bg.wasm | 0
Mgeedback-dsp/src/lib.rs | 11+++++------
2 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/geedback-dsp/pkg/geedback_dsp_bg.wasm b/geedback-dsp/pkg/geedback_dsp_bg.wasm Binary files differ. diff --git a/geedback-dsp/src/lib.rs b/geedback-dsp/src/lib.rs @@ -180,17 +180,16 @@ impl GeedbackProcessor { let morphs = [self.s_g_cos, self.s_a_cos, self.s_b_cos]; let fm_depths = [ - self.s_la_y.abs() * 4.0, // Osc 1: Y (Significantly increased) - self.s_la_z.abs() * 4.0, // Osc 2: Z - self.s_la_x.abs() * 4.0, // Osc 3: X + self.s_la_y.abs().powi(3) * 1.0, // Non-linear: quiet when slow, aggressive when shaken + self.s_la_z.abs().powi(3) * 1.0, + self.s_la_x.abs().powi(3) * 1.0, ]; let mut mixed_output = 0.0; for i in 0..3 { - self.phases_mod[i] = (self.phases_mod[i] + (freqs[i] * 1.5) / self.sample_rate) % 1.0; - let modulation = - (self.phases_mod[i] * 2.0 * std::f64::consts::PI).sin() * (fm_depths[i] * 2.0); + self.phases_mod[i] = (self.phases_mod[i] + freqs[i] / self.sample_rate) % 1.0; + let modulation = (self.phases_mod[i] * 2.0 * std::f64::consts::PI).sin() * fm_depths[i]; let osc_out = self.calculate_wave(self.phases[i] + modulation, self.waveforms[i], morphs[i]); mixed_output += osc_out * self.mixes[i];