summaryrefslogtreecommitdiff
path: root/design.org
diff options
context:
space:
mode:
authorGrant Shangreaux <grant@unabridgedsoftware.com>2021-11-15 21:29:19 -0600
committerGrant Shangreaux <grant@unabridgedsoftware.com>2021-11-15 21:29:19 -0600
commita873c90ab9c305777f1e7bc4bfa24098cf9650d9 (patch)
tree71740158fecf940473c279d3c6b2ce11490c16f1 /design.org
parentc7e88b7d605fd19d9ff54681a42fd69d079d92b1 (diff)
Docs: interface design updates and notes about Signal/Line
Diffstat (limited to 'design.org')
-rw-r--r--design.org50
1 files changed, 0 insertions, 50 deletions
diff --git a/design.org b/design.org
deleted file mode 100644
index 5e00379..0000000
--- a/design.org
+++ /dev/null
@@ -1,50 +0,0 @@
-* Mono Synth MVP
-
-A Rust library that drives a GDNative script and exposes an interface for a
-monophonic Synth object. This object will produce audio frames which will
-fill Godot's ~AudioStreamPlayback~ buffer, leveraging the cross-platform
-audio I/O that Godot provides. The Rust dynamic library will need to be built
-for each platform, but it will leverage Rust's perfomance optimizations to
-enable realtime audio interactions.
-
-** Godot Synth Interface
-
-From Godot, we're primarily interested in manipulating various aspects of
-the Mono Synth. Frequency, modulation, amplitude, and any other expressive
-aspect of a single tone we can hook up. Overall volume will be controlled
-by Godot.
-
-*** Input
-
-- *Sample Rate* - Godot must send its I/O sample rate to the synth when initialized
- This is the number of audio samples played back per second. So we need to generate
- samples at the same rate.
-- *Frequency* - range from 20Hz to ½ the sample rate. increment may need to change
- over the range. Human ear detects small changes at lower frequencies, but not as
- much in the higher frequencies.
-- *Continuous* - whether or not to produce a continuous tone or use ADSR envelope
-- *Waveform* - a selection of basic waveforms will be implemented in Rust. We can
- control which one is being generated via a switch in Godot.
-- *Phasor* - the shape of the waveform can be dynamically modified by changing the
- shape of the phasor driving the oscillator. Given an (x,y) vector, the shape of
- the phasor can be "bent" away from it smooth 0-1 slope.
-- *Amplitude Envelope* - this controls the volume of sound over time. Typical envelopes
- have parameters for:
- - *Attack* - amount of time before the waveform is at its peak
- - *Decay* - amount of time it takes to go from peak to sustained level
- - *Sustain* - the level (amplitude) to sustain while a note is held
- - *Release* - the amount of time to go to 0 from sustain when note is released
-- *Filter* - a low pass filter with a two parameters:
- - *Cutoff* the frequency where the filter begins
- - *Resonance* ? i think its like an amplitude boost at the cutoff?
-- *Modulator* - a low frequency oscillator that can effect the frequency or filter cutoff
-
-
-*** Output
-
-Currently, the output is an array of (sample, sample) vectors, where each sample is
-a float between -1.0 and 1.0. You can request a certain number of frames, and get back
-the calculated samples to fill them. We can think of this as essentially the stereo
-audio jack from a synthesizer.
-
-