Added state processing stage

This commit is contained in:
2026-04-27 12:11:41 +02:00
parent 1fd0a56064
commit 787bf50957
8 changed files with 57 additions and 44 deletions
+15 -13
View File
@@ -11,6 +11,8 @@
using namespace daisysp;
static state_t* state;
Oscillator osc;
Svf filter;
AdEnv vco_env;
@@ -97,7 +99,7 @@ float amenbreak(float beat_samples, float playback_rate) {
return amen_out;
}
void synth_init(void) {
void synth_init(state_t* state) {
osc.Init(SAMPLE_RATE);
osc.SetWaveform(vco_mode_to_daisy(VCO_SAW));
osc.SetFreq(440.0f);
@@ -119,18 +121,18 @@ void synth_init(void) {
filter_env.SetMin(0.0f);
filter_env.SetMax(2000.0f);
state.clock_bpm = 0.1f;
state->clock_bpm = 0.1f;
clock_phase = 0.0f;
clock_trig = false;
amen_phase = 0.0f;
state.amen_enabled = true;
state.reverb_amount = 1.0;
state->amen_enabled = true;
state->reverb_amount = 1.0;
}
float get_sample(void) {
float bpm = BPM_MIN + state.clock_bpm * (BPM_MAX - BPM_MIN);
float bpm = BPM_MIN + state->clock_bpm * (BPM_MAX - BPM_MIN);
float beat_samples = SAMPLE_RATE * 60.0f / bpm;
float playback_rate = bpm / AMEN_BPM;
@@ -147,16 +149,16 @@ float get_sample(void) {
filter_env.Trigger();
}
//vco_env.SetTime(ADENV_SEG_ATTACK, pot_to_time(state.env1_attack, ENV_ATTACK_MIN, ENV_ATTACK_MAX));
//vco_env.SetTime(ADENV_SEG_DECAY, pot_to_time(state.env1_release, ENV_RELEASE_MIN, ENV_RELEASE_MAX));
//filter_env.SetTime(ADENV_SEG_ATTACK, pot_to_time(state.env2_attack, ENV_ATTACK_MIN, ENV_ATTACK_MAX));
//filter_env.SetTime(ADENV_SEG_DECAY, pot_to_time(state.env2_release, ENV_RELEASE_MIN, ENV_RELEASE_MAX));
vco_env.SetTime(ADENV_SEG_ATTACK, pot_to_time(state->env1_attack, ENV_ATTACK_MIN, ENV_ATTACK_MAX));
vco_env.SetTime(ADENV_SEG_DECAY, pot_to_time(state->env1_release, ENV_RELEASE_MIN, ENV_RELEASE_MAX));
filter_env.SetTime(ADENV_SEG_ATTACK, pot_to_time(state->env2_attack, ENV_ATTACK_MIN, ENV_ATTACK_MAX));
filter_env.SetTime(ADENV_SEG_DECAY, pot_to_time(state->env2_release, ENV_RELEASE_MIN, ENV_RELEASE_MAX));
float vco_env_out = vco_env.Process();
float filter_env_out = filter_env.Process();
float vco_freq = pot_to_freq(state.vco_freq, VCO_FREQ_MIN, VCO_FREQ_MAX);
if (state.quant_enabled) vco_freq = quantize(vco_freq, 12.0f);
float vco_freq = pot_to_freq(state->vco_freq, VCO_FREQ_MIN, VCO_FREQ_MAX);
if (state->quant_enabled) vco_freq = quantize(vco_freq, 12.0f);
//osc.SetFreq(vco_freq);
static int n = VCO_SINE;
@@ -165,7 +167,7 @@ float get_sample(void) {
float vco_out = osc.Process();
float base_cutoff = pot_to_freq(state.filter_freq, FILTER_FREQ_MIN, FILTER_FREQ_MAX);
float base_cutoff = pot_to_freq(state->filter_freq, FILTER_FREQ_MIN, FILTER_FREQ_MAX);
float mod_cutoff = base_cutoff + filter_env_out * (FILTER_FREQ_MAX - FILTER_FREQ_MIN);
mod_cutoff = fclamp(mod_cutoff, FILTER_FREQ_MIN, FILTER_FREQ_MAX);
@@ -179,7 +181,7 @@ float get_sample(void) {
float reverb_out = vca_out; //reverb(vca_out, state.reverb_amount);
float amen_out = 0.0f;
if (state.amen_enabled) amen_out = amenbreak(beat_samples, playback_rate);
if (state->amen_enabled) amen_out = amenbreak(beat_samples, playback_rate);
float mix = reverb_out + amen_out;
mix = fclamp(mix, -1.0f, 1.0f);