Added state processing stage
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user