summaryrefslogtreecommitdiff
path: root/klangfarb
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 /klangfarb
parent21e720bb89e494cc89e99169e13fff9bf0dbdc6f (diff)
Add: phase based sine wave oscillator and comment GDscript
Diffstat (limited to 'klangfarb')
-rw-r--r--klangfarb/main.gd24
1 files changed, 18 insertions, 6 deletions
diff --git a/klangfarb/main.gd b/klangfarb/main.gd
index 82f8ce9..fb29c8c 100644
--- a/klangfarb/main.gd
+++ b/klangfarb/main.gd
@@ -1,22 +1,34 @@
extends AudioStreamPlayer
-var playback: AudioStreamPlayback = null
+# controllable frequency interface
+export(float, 20, 8000, 10) var freq = 440.0
+
+# load the GDNative script connected to the rust lib
var SineWave = preload("res://SineWave.gdns")
+# make an instance of our one "class" in rust lib
var wave = SineWave.new()
-var freq = 440.0
+
+# initialize the Godot stream we fill up with samples
+var playback: AudioStreamPlayback = null
func _fill_buffer() -> void:
+ # get count of Frames (sample, sample) available in stream
var to_fill = playback.get_frames_available()
- print(to_fill)
if to_fill > 0:
+ # ask Rust to generate N frames at freq
+ # Array<Vector2> gets pushed to the
+ # playback stream buffer
playback.push_buffer(wave.frames(freq, to_fill))
func _process(_delta):
- _fill_buffer()
+ _fill_buffer()
func _ready() -> void:
- self.stream.mix_rate = freq * 256
- wave.set_sample_rate(freq * 256)
+ # ensure Godot/Sine have the same sample rate
+ wave.set_sample_rate(self.stream.mix_rate)
+ # get our AudioStreamPlayback object
playback = self.get_stream_playback()
+ # prefill the stream's sample buffer (which feeds DAC)
_fill_buffer()
+ # start the audio
self.play()