[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