summaryrefslogtreecommitdiff
path: root/klangfarbrs/src/lib.rs
diff options
context:
space:
mode:
authorGrant Shangreaux <grant@unabridgedsoftware.com>2021-10-30 00:33:57 -0500
committerGrant Shangreaux <grant@unabridgedsoftware.com>2021-10-30 00:33:57 -0500
commitc484f737ad8a0c8e47b3bac3feab88e32eeff5cc (patch)
tree98670c7fcb2a219db9c4ad94d40b5486b7315447 /klangfarbrs/src/lib.rs
parent21e720bb89e494cc89e99169e13fff9bf0dbdc6f (diff)
Add: phase based sine wave oscillator and comment GDscript
Diffstat (limited to 'klangfarbrs/src/lib.rs')
-rw-r--r--klangfarbrs/src/lib.rs12
1 files changed, 7 insertions, 5 deletions
diff --git a/klangfarbrs/src/lib.rs b/klangfarbrs/src/lib.rs
index 0628e34..64f3bda 100644
--- a/klangfarbrs/src/lib.rs
+++ b/klangfarbrs/src/lib.rs
@@ -6,13 +6,14 @@ use std::f32::consts::TAU;
#[derive(NativeClass)]
#[inherit(Node)]
pub struct SineWave {
- sample_rate: f32
+ sample_rate: f32,
+ phase: f32
}
#[methods]
impl SineWave {
fn new(_owner: &Node) -> Self {
- SineWave { sample_rate: 44100.0 }
+ SineWave { sample_rate: 44100.0, phase: 0.0 }
}
#[export]
@@ -26,12 +27,13 @@ impl SineWave {
}
#[export]
- pub fn frames(&self, _owner: &Node, frequency: f32, duration: i32) -> TypedArray<Vector2> {
+ pub fn frames(&mut self, _owner: &Node, frequency: f32, duration: i32) -> TypedArray<Vector2> {
let mut frames = TypedArray::new();
- for i in 0..duration as i32 {
- let sample = (TAU * frequency * i as f32/self.sample_rate).sin();
+ for _i in 0..duration {
+ let sample = (TAU * self.phase).sin().clamp(-1.0, 1.0);
frames.push(Vector2::new(sample, sample));
+ self.phase = (self.phase + (frequency / self.sample_rate)) % 1.0;
}
return frames