summaryrefslogtreecommitdiff
path: root/klangfarbrs/src/lib.rs
diff options
context:
space:
mode:
authorGrant Shangreaux <grant@unabridgedsoftware.com>2021-10-30 23:56:38 -0500
committerGrant Shangreaux <grant@unabridgedsoftware.com>2021-10-30 23:56:38 -0500
commit4565611763cbb041384230580f9c7de4fea7da6f (patch)
tree9d983f4da2dc60a578379958eda028242412ae71 /klangfarbrs/src/lib.rs
parentb9559897c05b8c2f67e34372685952d586af5c3d (diff)
Add: square wave and waveform switch interface in godot
Diffstat (limited to 'klangfarbrs/src/lib.rs')
-rw-r--r--klangfarbrs/src/lib.rs21
1 files changed, 19 insertions, 2 deletions
diff --git a/klangfarbrs/src/lib.rs b/klangfarbrs/src/lib.rs
index a418995..7954eb2 100644
--- a/klangfarbrs/src/lib.rs
+++ b/klangfarbrs/src/lib.rs
@@ -23,9 +23,9 @@ pub struct Osc {
}
/// The various waveforms the `Osc` can generate.
-enum Waveform {
+pub enum Waveform {
Sine,
- // Square,
+ Square,
// Triangle,
// Saw,
// Noise,
@@ -36,6 +36,13 @@ fn generate_sample(osc: &Osc) -> f32 {
match osc.waveform {
Waveform::Sine => {
(TAU * osc.phase).sin()
+ },
+ Waveform::Square => {
+ if osc.phase < 0.5 {
+ -1.0
+ } else {
+ 1.0
+ }
}
}
}
@@ -79,6 +86,16 @@ impl Osc {
}
#[export]
+ fn sine(&mut self, _owner: &Node) {
+ self.waveform = Waveform::Sine
+ }
+
+ #[export]
+ fn square(&mut self, _owner: &Node) {
+ self.waveform = Waveform::Square
+ }
+
+ #[export]
pub fn set_sample_rate(&mut self, _owner: &Node, sample_rate: f32) {
self.sample_rate = sample_rate;
}