[SCM] calf/master: + Monosynth: code cleanup (move more things to .cpp file, ignore the negligible performance hit)
js at users.alioth.debian.org
js at users.alioth.debian.org
Tue May 7 15:39:35 UTC 2013
The following commit has been merged in the master branch:
commit 24f4661a73fe39e70db8e74b9a5c1279859b6fb3
Author: Krzysztof Foltman <wdev at foltman.com>
Date: Tue Sep 29 23:19:07 2009 +0100
+ Monosynth: code cleanup (move more things to .cpp file, ignore the negligible performance hit)
diff --git a/src/calf/modules_synths.h b/src/calf/modules_synths.h
index 615d9a1..090acbd 100644
--- a/src/calf/modules_synths.h
+++ b/src/calf/modules_synths.h
@@ -110,39 +110,11 @@ public:
inertia_pitchbend.set_inertia(pow(2.0, (value * *params[par_pwhlrange]) / (1200.0 * 8192.0)));
}
/// Update oscillator frequency based on base frequency, detune amount, pitch bend scaling factor and sample rate.
- inline void set_frequency()
- {
- float detune_scaled = (detune - 1); // * log(freq / 440);
- if (*params[par_scaledetune] > 0)
- detune_scaled *= pow(20.0 / freq, *params[par_scaledetune]);
- float p1 = 1, p2 = 1;
- if (moddest[moddest_o1detune] != 0)
- p1 = pow(2.0, moddest[moddest_o1detune] * (1.0 / 1200.0));
- if (moddest[moddest_o2detune] != 0)
- p2 = pow(2.0, moddest[moddest_o2detune] * (1.0 / 1200.0));
- osc1.set_freq(freq * (1 - detune_scaled) * p1 * inertia_pitchbend.get_last() * lfo_bend, srate);
- osc2.set_freq(freq * (1 + detune_scaled) * p2 * inertia_pitchbend.get_last() * lfo_bend * xpose, srate);
- }
+ void set_frequency();
/// Handle control change messages.
void control_change(int controller, int value);
/// Update variables from control ports.
- void params_changed() {
- float sf = 0.001f;
- envelope.set(*params[par_attack] * sf, *params[par_decay] * sf, std::min(0.999f, *params[par_sustain]), *params[par_release] * sf, srate / step_size, *params[par_fade] * sf);
- filter_type = dsp::fastf2i_drm(*params[par_filtertype]);
- decay_factor = odcr * 1000.0 / *params[par_decay];
- separation = pow(2.0, *params[par_cutoffsep] / 1200.0);
- wave1 = dsp::clip(dsp::fastf2i_drm(*params[par_wave1]), 0, (int)wave_count - 1);
- wave2 = dsp::clip(dsp::fastf2i_drm(*params[par_wave2]), 0, (int)wave_count - 1);
- detune = pow(2.0, *params[par_detune] / 1200.0);
- xpose = pow(2.0, *params[par_osc2xpose] / 12.0);
- xfade = *params[par_oscmix];
- legato = dsp::fastf2i_drm(*params[par_legato]);
- master.set_inertia(*params[par_master]);
- set_frequency();
- if (wave1 != prev_wave1 || wave2 != prev_wave2)
- lookup_waveforms();
- }
+ void params_changed();
void activate();
void deactivate();
void post_instantiate()
diff --git a/src/calf/osc.h b/src/calf/osc.h
index 166f579..36c19fe 100644
--- a/src/calf/osc.h
+++ b/src/calf/osc.h
@@ -241,6 +241,10 @@ struct waveform_oscillator: public simple_oscillator
{
enum { SIZE = 1 << SIZE_BITS, MASK = SIZE - 1, SCALE = 1 << (32 - SIZE_BITS) };
float *waveform;
+ waveform_oscillator()
+ {
+ waveform = NULL;
+ }
inline float get()
{
uint32_t wpos = phase >> (32 - SIZE_BITS);
diff --git a/src/monosynth.cpp b/src/monosynth.cpp
index 0f97cc2..3316025 100644
--- a/src/monosynth.cpp
+++ b/src/monosynth.cpp
@@ -623,7 +623,43 @@ void monosynth_audio_module::deactivate()
stack.clear();
}
-uint32_t monosynth_audio_module::process(uint32_t offset, uint32_t nsamples, uint32_t inputs_mask, uint32_t outputs_mask) {
+void monosynth_audio_module::set_frequency()
+{
+ float detune_scaled = (detune - 1); // * log(freq / 440);
+ if (*params[par_scaledetune] > 0)
+ detune_scaled *= pow(20.0 / freq, *params[par_scaledetune]);
+ float p1 = 1, p2 = 1;
+ if (moddest[moddest_o1detune] != 0)
+ p1 = pow(2.0, moddest[moddest_o1detune] * (1.0 / 1200.0));
+ if (moddest[moddest_o2detune] != 0)
+ p2 = pow(2.0, moddest[moddest_o2detune] * (1.0 / 1200.0));
+ osc1.set_freq(freq * (1 - detune_scaled) * p1 * inertia_pitchbend.get_last() * lfo_bend, srate);
+ osc2.set_freq(freq * (1 + detune_scaled) * p2 * inertia_pitchbend.get_last() * lfo_bend * xpose, srate);
+}
+
+
+void monosynth_audio_module::params_changed()
+{
+ float sf = 0.001f;
+ envelope.set(*params[par_attack] * sf, *params[par_decay] * sf, std::min(0.999f, *params[par_sustain]), *params[par_release] * sf, srate / step_size, *params[par_fade] * sf);
+ filter_type = dsp::fastf2i_drm(*params[par_filtertype]);
+ decay_factor = odcr * 1000.0 / *params[par_decay];
+ separation = pow(2.0, *params[par_cutoffsep] / 1200.0);
+ wave1 = dsp::clip(dsp::fastf2i_drm(*params[par_wave1]), 0, (int)wave_count - 1);
+ wave2 = dsp::clip(dsp::fastf2i_drm(*params[par_wave2]), 0, (int)wave_count - 1);
+ detune = pow(2.0, *params[par_detune] / 1200.0);
+ xpose = pow(2.0, *params[par_osc2xpose] / 12.0);
+ xfade = *params[par_oscmix];
+ legato = dsp::fastf2i_drm(*params[par_legato]);
+ master.set_inertia(*params[par_master]);
+ set_frequency();
+ if (wave1 != prev_wave1 || wave2 != prev_wave2)
+ lookup_waveforms();
+}
+
+
+uint32_t monosynth_audio_module::process(uint32_t offset, uint32_t nsamples, uint32_t inputs_mask, uint32_t outputs_mask)
+{
if (!running && queue_note_on == -1) {
for (uint32_t i = 0; i < nsamples / step_size; i++)
envelope.advance();
--
calf audio plugins packaging
More information about the pkg-multimedia-commits
mailing list