[SCM] calf/master: + Monosynth: added pulse width offset (not safe for modulation yet)

js at users.alioth.debian.org js at users.alioth.debian.org
Tue May 7 15:39:28 UTC 2013


The following commit has been merged in the master branch:
commit 19f4574bfc5307d6c9b184a1a5d8ef13e399e284
Author: Krzysztof Foltman <wdev at foltman.com>
Date:   Sat Mar 21 23:24:48 2009 +0000

    + Monosynth: added pulse width offset (not safe for modulation yet)

diff --git a/gui/gui-monosynth.xml b/gui/gui-monosynth.xml
index 1296a25..b85c12c 100644
--- a/gui/gui-monosynth.xml
+++ b/gui/gui-monosynth.xml
@@ -1,197 +1,213 @@
 <?xml version="1.0"?>
 <vbox border="10">
-  <hbox spacing="10">
-    <frame label="Oscillators">
-      <vbox border="10" spacing="10">
-        <table rows="2" cols="2">
-          <label attach-x="0" attach-y="0" param="o1_wave"/>
-          <label attach-x="1" attach-y="0" param="o2_wave"/>
-          <combo attach-x="0" attach-y="1" param="o1_wave"/>
-          <combo attach-x="1" attach-y="1" param="o2_wave"/>
-        </table>
-        <hbox>
-          <if cond="directlink">
-            <line-graph param="o1_wave" refresh="1"/>
-          </if>
-          <vbox>
-            <label param="o12_mix"/>
-            <hscale param="o12_mix" position="bottom"/>
-          </vbox>
-          <if cond="directlink">
-            <line-graph param="o2_wave" refresh="1"/>
-          </if>
-        </hbox>
-        <hbox>
-          <vbox>
-            <label param="o12_detune"/>
-            <knob param="o12_detune" expand="0" fill="0"/>
-            <value param="o12_detune"/>
-          </vbox>
-          <align>
-            <vbox>
-              <label param="phase_mode"/>
-              <combo param="phase_mode"/>
-            </vbox>
-          </align>
-          <vbox>
-            <label param="o2_xpose"/>
-            <knob type="1" param="o2_xpose"/>
-            <value param="o2_xpose"/>
-          </vbox>
-        </hbox>
-      </vbox>
-    </frame>
-    <frame label="Filter">
-      <vbox border="10">
-        <align>
-          <hbox>
-            <label param="filter"/>
-            <combo param="filter"/>
-            <if cond="directlink">
-              <line-graph param="filter" refresh="1" width="80" height="60"/>
-            </if>
-          </hbox>
-        </align>
-        <hbox>
-          <vbox>
-            <label param="cutoff"/>
-            <knob param="cutoff"/>
-            <value param="cutoff"/>
-          </vbox>
-          <vbox>
-            <label param="res"/>
-            <knob param="res"/>
-            <value param="res"/>
-          </vbox>
-          <vbox>
-            <label param="filter_sep"/>
-            <knob type="1" param="filter_sep"/>
-            <value param="filter_sep"/>
-          </vbox>
-          <vbox>
-            <label param="key_follow"/>
-            <knob param="key_follow"/>
-            <value param="key_follow"/>
-          </vbox>
-        </hbox>
-      </vbox>
-    </frame>
-  </hbox>
-  <frame label="LFO">
-    <hbox spacing="10">
-      <vbox>
-        <label param="lfo_rate"/>
-        <knob param="lfo_rate"/>
-        <value param="lfo_rate"/>
-      </vbox>
-      <vbox>
-        <label param="lfo_delay"/>
-        <knob param="lfo_delay"/>
-        <value param="lfo_delay"/>
-      </vbox>
+  <frame label="Global">
+    <hbox border="10" spacing="10">
       <vbox>
-        <label param="lfo2filter"/>
-        <knob param="lfo2filter" type="1"/>
-        <value param="lfo2filter"/>
+        <label param="pbend_range"/>
+        <knob param="pbend_range"/>
+        <value param="pbend_range"/>
       </vbox>
       <vbox>
-        <label param="lfo2pitch"/>
-        <knob param="lfo2pitch"/>
-        <value param="lfo2pitch"/>
+        <label param="legato" expand="0"/>
+        <combo param="legato" expand="0" fill="0"/>
+        <label />
       </vbox>
       <vbox>
-        <label param="lfo2pw"/>
-        <knob param="lfo2pw"/>
-        <value param="lfo2pw"/>
+        <label param="portamento"/>
+        <knob param="portamento"/>
+        <value param="portamento"/>
       </vbox>
       <vbox>
-        <label param="mwhl2lfo"/>
-        <knob param="mwhl2lfo"/>
-        <value param="mwhl2lfo"/>
+        <label param="master"/>
+        <knob param="master"/>
+        <value param="master"/>
       </vbox>
     </hbox>
   </frame>
-  <hbox spacing="10">
-    <frame label="Envelope">
-      <vbox border="10" spacing="10">
-        <hbox>
-          <vbox>
-            <label param="adsr_a"/>
-            <knob param="adsr_a"/>
-            <value param="adsr_a"/>
-          </vbox>
-          <vbox>
-            <label param="adsr_d"/>
-            <knob param="adsr_d"/>
-            <value param="adsr_d"/>
-          </vbox>
-          <vbox>
-            <label param="adsr_s"/>
-            <knob param="adsr_s"/>
-            <value param="adsr_s"/>
-          </vbox>
-          <vbox>
-            <label param="adsr_r"/>
-            <knob param="adsr_r"/>
-            <value param="adsr_r"/>
-          </vbox>
-        </hbox>
-        <hbox>
-          <vbox>
-            <label param="env2cutoff"/>
-            <knob type="1" param="env2cutoff"/>
-            <value param="env2cutoff"/>
-          </vbox>
-          <vbox>
-            <label param="env2res"/>
-            <knob param="env2res"/>
-            <value param="env2res"/>
-          </vbox>
-          <vbox>
-            <label param="env2amp"/>
-            <knob param="env2amp"/>
-            <value param="env2amp"/>
-          </vbox>
-        </hbox>
-      </vbox>
-    </frame>
-    <frame label="Settings">
-      <vbox border="10" spacing="10">
-        <hbox>
+  <notebook>
+    <vbox border="10" page="Audio path">
+      <frame label="Oscillators">
+        <vbox border="10" spacing="10">
+          <table rows="3" cols="4">
+            <label attach-x="0" attach-y="0" param="o1_wave"/>
+            <label attach-x="1" attach-y="0" param="o1_pw"/>
+            <label attach-x="2" attach-y="0" param="o2_pw"/>
+            <label attach-x="3" attach-y="0" param="o2_wave"/>
+            <combo attach-x="0" attach-y="1" param="o1_wave"/>
+            <knob attach-x="1" attach-y="1" param="o1_pw"/>
+            <knob attach-x="2" attach-y="1" param="o2_pw"/>
+            <combo attach-x="3" attach-y="1" param="o2_wave"/>
+            <value attach-x="1" attach-y="2" param="o1_pw"/>
+            <value attach-x="2" attach-y="2" param="o2_pw"/>
+          </table>
+          <hbox>
+            <if cond="directlink">
+              <line-graph param="o1_wave" refresh="1"/>
+            </if>
+            <vbox>
+              <label param="o12_mix"/>
+              <hscale param="o12_mix" position="bottom"/>
+            </vbox>
+            <if cond="directlink">
+              <line-graph param="o2_wave" refresh="1"/>
+            </if>
+          </hbox>
+          <hbox>
+            <vbox>
+              <label param="o12_detune"/>
+              <knob param="o12_detune" expand="0" fill="0"/>
+              <value param="o12_detune"/>
+            </vbox>
+            <align>
+              <vbox>
+                <label param="phase_mode"/>
+                <combo param="phase_mode"/>
+              </vbox>
+            </align>
+            <vbox>
+              <label param="o2_xpose"/>
+              <knob type="1" param="o2_xpose"/>
+              <value param="o2_xpose"/>
+            </vbox>
+          </hbox>
+        </vbox>
+      </frame>
+      <frame label="Filter">
+        <vbox border="10">
+          <align>
+            <hbox>
+              <label param="filter"/>
+              <combo param="filter"/>
+              <if cond="directlink">
+                <line-graph param="filter" refresh="1" width="80" height="60"/>
+              </if>
+            </hbox>
+          </align>
+          <hbox>
+            <vbox>
+              <label param="cutoff"/>
+              <knob param="cutoff"/>
+              <value param="cutoff"/>
+            </vbox>
+            <vbox>
+              <label param="res"/>
+              <knob param="res"/>
+              <value param="res"/>
+            </vbox>
+            <vbox>
+              <label param="filter_sep"/>
+              <knob type="1" param="filter_sep"/>
+              <value param="filter_sep"/>
+            </vbox>
+            <vbox>
+              <label param="key_follow"/>
+              <knob param="key_follow"/>
+              <value param="key_follow"/>
+            </vbox>
+          </hbox>
+        </vbox>
+      </frame>
+    </vbox>
+    
+    <vbox border="10" page="Modulation">
+      <frame label="LFO">
+        <hbox spacing="10">
           <vbox>
-            <label param="pbend_range"/>
-            <knob param="pbend_range"/>
-            <value param="pbend_range"/>
+            <label param="lfo_rate"/>
+            <knob param="lfo_rate"/>
+            <value param="lfo_rate"/>
           </vbox>
           <vbox>
-            <label param="legato" expand="0"/>
-            <combo param="legato" expand="0" fill="0"/>
-            <label />
+            <label param="lfo_delay"/>
+            <knob param="lfo_delay"/>
+            <value param="lfo_delay"/>
           </vbox>
           <vbox>
-            <label param="master"/>
-            <knob param="master"/>
-            <value param="master"/>
+            <label text="To Cutoff"/>
+            <knob param="lfo2filter" type="1"/>
+            <value param="lfo2filter"/>
           </vbox>
-        </hbox>
-        <hbox>
           <vbox>
-            <label param="portamento"/>
-            <knob param="portamento"/>
-            <value param="portamento"/>
+            <label text="To Pitch"/>
+            <knob param="lfo2pitch"/>
+            <value param="lfo2pitch"/>
           </vbox>
           <vbox>
-            <label param="vel2filter"/>
-            <knob param="vel2filter"/>
-            <value param="vel2filter"/>
+            <label text="To Osc PW"/>
+            <knob param="lfo2pw"/>
+            <value param="lfo2pw"/>
           </vbox>
           <vbox>
-            <label param="vel2amp"/>
-            <knob param="vel2amp"/>
-            <value param="vel2amp"/>
+            <label param="mwhl2lfo"/>
+            <knob param="mwhl2lfo"/>
+            <value param="mwhl2lfo"/>
           </vbox>
         </hbox>
-      </vbox>
-    </frame>
-  </hbox>
+      </frame>
+      <hbox spacing="10">
+        <frame label="Note velocity">
+          <hbox>
+            <vbox>
+              <label text="To Cutoff"/>
+              <knob param="vel2filter"/>
+              <value param="vel2filter"/>
+            </vbox>
+            <vbox>
+              <label text="To Amp"/>
+              <knob param="vel2amp"/>
+              <value param="vel2amp"/>
+            </vbox>        
+          </hbox>
+        </frame>
+        <frame label="Envelope">
+          <vbox border="10" spacing="10">
+            <hbox>
+              <vbox>
+                <label param="adsr_a"/>
+                <knob param="adsr_a"/>
+                <value param="adsr_a"/>
+              </vbox>
+              <vbox>
+                <label param="adsr_d"/>
+                <knob param="adsr_d"/>
+                <value param="adsr_d"/>
+              </vbox>
+              <vbox>
+                <label param="adsr_s"/>
+                <knob param="adsr_s"/>
+                <value param="adsr_s"/>
+              </vbox>
+              <vbox>
+                <label param="adsr_f"/>
+                <knob param="adsr_f"/>
+                <value param="adsr_f"/>
+              </vbox>
+              <vbox>
+                <label param="adsr_r"/>
+                <knob param="adsr_r"/>
+                <value param="adsr_r"/>
+              </vbox>
+            </hbox>
+            <hbox>
+              <vbox>
+                <label text="To Cutoff"/>
+                <knob type="1" param="env2cutoff"/>
+                <value param="env2cutoff"/>
+              </vbox>
+              <vbox>
+                <label text="To Res"/>
+                <knob param="env2res"/>
+                <value param="env2res"/>
+              </vbox>
+              <vbox>
+                <label text="To Amp"/>
+                <knob param="env2amp"/>
+                <value param="env2amp"/>
+              </vbox>
+            </hbox>
+          </vbox>
+        </frame>
+      </hbox>
+    </vbox>
+  </notebook>
 </vbox>
diff --git a/src/calf/metadata.h b/src/calf/metadata.h
index 733ce5e..0398730 100644
--- a/src/calf/metadata.h
+++ b/src/calf/metadata.h
@@ -97,12 +97,12 @@ struct monosynth_metadata: public plugin_metadata<monosynth_metadata>
 {
     enum { wave_saw, wave_sqr, wave_pulse, wave_sine, wave_triangle, wave_varistep, wave_skewsaw, wave_skewsqr, wave_test1, wave_test2, wave_test3, wave_test4, wave_test5, wave_test6, wave_test7, wave_test8, wave_count };
     enum { flt_lp12, flt_lp24, flt_2lp12, flt_hp12, flt_lpbr, flt_hpbr, flt_bp6, flt_2bp6 };
-    enum { par_wave1, par_wave2, par_detune, par_osc2xpose, par_oscmode, par_oscmix, par_filtertype, par_cutoff, par_resonance, par_cutoffsep, par_envmod, par_envtores, par_envtoamp, par_attack, par_decay, par_sustain, par_release, 
+    enum { par_wave1, par_wave2, par_pw1, par_pw2, par_detune, par_osc2xpose, par_oscmode, par_oscmix, par_filtertype, par_cutoff, par_resonance, par_cutoffsep, par_envmod, par_envtores, par_envtoamp, par_attack, par_decay, par_sustain, par_fade, par_release, 
         par_keyfollow, par_legato, par_portamento, par_vel2filter, par_vel2amp, par_master, par_pwhlrange, 
         par_lforate, par_lfodelay, par_lfofilter, par_lfopitch, par_lfopw, par_mwhl_lfo,
         param_count };
     enum { in_count = 0, out_count = 2, support_midi = true, require_midi = true, rt_capable = true };
-    enum { step_size = 64 };
+    enum { step_size = 64, step_shift = 6 };
     PLUGIN_NAME_ID_LABEL("monosynth", "monosynth", "Monosynth")
 };
     
diff --git a/src/calf/modules_synths.h b/src/calf/modules_synths.h
index 0bfecb5..bae680f 100644
--- a/src/calf/modules_synths.h
+++ b/src/calf/modules_synths.h
@@ -55,7 +55,7 @@ public:
     dsp::onepole<float> phaseshifter;
     dsp::biquad_d1_lerp<float> filter;
     dsp::biquad_d1_lerp<float> filter2;
-    int wave1, wave2, filter_type, last_filter_type;
+    int wave1, wave2, prev_wave1, prev_wave2, filter_type, last_filter_type;
     float freq, start_freq, target_freq, cutoff, decay_factor, fgain, fgain_delta, separation;
     float detune, xpose, xfade, ampctl, fltctl, queue_vel;
     float odcr, porta_time, lfo_bend, lfo_clock, last_lfov, modwheel_value;
@@ -93,7 +93,7 @@ public:
     /// 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);
+        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);
@@ -105,6 +105,8 @@ public:
         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 activate();
     void deactivate();
@@ -112,6 +114,8 @@ public:
     {
         precalculate_waves(progress_report);
     }
+    /// Set waveform addresses for oscillators
+    void lookup_waveforms();
     /// Run oscillators
     void calculate_buffer_oscs(float lfo);
     /// Run two filters in series to produce mono output samples.
diff --git a/src/modules.cpp b/src/modules.cpp
index f297b65..41c06b4 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -260,6 +260,10 @@ CALF_PLUGIN_INFO(monosynth) = { 0x8480, "Monosynth", "Calf Monosynth", "Krzyszto
 CALF_PORT_PROPS(monosynth) = {
     { monosynth_metadata::wave_saw,         0, monosynth_metadata::wave_count - 1, 1, PF_ENUM | PF_CTL_COMBO | PF_PROP_GRAPH, monosynth_waveform_names, "o1_wave", "Osc1 Wave" },
     { monosynth_metadata::wave_sqr,         0, monosynth_metadata::wave_count - 1, 1, PF_ENUM | PF_CTL_COMBO | PF_PROP_GRAPH, monosynth_waveform_names, "o2_wave", "Osc2 Wave" },
+    
+    { 0,         -1,    1,  0.1, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "o1_pw", "Osc1 PW" },
+    { 0,         -1,    1,  0.1, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB, NULL, "o2_pw", "Osc2 PW" },
+    
     { 10,         0,  100,    0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "o12_detune", "O1<>2 Detune" },
     { 12,       -24,   24,    0, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_SEMITONES, NULL, "o2_xpose", "Osc 2 transpose" },
     { 0,          0,    5,    0, PF_ENUM | PF_CTL_COMBO, monosynth_mode_names, "phase_mode", "Phase mode" },
@@ -275,6 +279,7 @@ CALF_PORT_PROPS(monosynth) = {
     { 1,          1,20000,    0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr_a", "Attack" },
     { 350,       10,20000,    0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr_d", "Decay" },
     { 0.5,        0,    1,    0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr_s", "Sustain" },
+    { 0,     -10000,10000,   21, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr_f", "Fade" },
     { 50,       10,20000,     0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr_r", "Release" },
     
     { 0,          0,    2,    0, PF_FLOAT | PF_SCALE_PERC, NULL, "key_follow", "Key Follow" },
diff --git a/src/monosynth.cpp b/src/monosynth.cpp
index 15cfd4c..a878719 100644
--- a/src/monosynth.cpp
+++ b/src/monosynth.cpp
@@ -190,24 +190,17 @@ bool monosynth_audio_module::get_graph(int index, int subindex, float *data, int
         float value = *params[index];
         int wave = dsp::clip(dsp::fastf2i_drm(value), 0, (int)wave_count - 1);
 
-        uint32_t shift = (int32_t)(0x78000000 * last_lfov * *params[par_lfopw]);
+        float offset = *params[index == par_wave1 ? par_pw1 : par_pw2];
+        uint32_t shift = (int32_t)(0x78000000 * clip11(offset + (running ? last_lfov : 0) * *params[par_lfopw]));
         int flag = (wave == wave_sqr);
-        
-        if (!running) {
-            float *waveform = waves[wave].original;
-            for (int i = 0; i < points; i++)
-                data[i] = waveform[i * S / points];
-        }
-        else
-        {
-            shift = (flag ? S/2 : 0) + (shift >> (32 - MONOSYNTH_WAVE_BITS));
-            int sign = flag ? -1 : 1;
-            if (wave == wave_sqr)
-                wave = wave_saw;
-            float *waveform = waves[wave].original;
-            for (int i = 0; i < points; i++)
-                data[i] = (sign * waveform[i * S / points] + waveform[(i * S / points + shift) & (S - 1)]) / (sign == -1 ? 1 : 2);
-        }
+                
+        shift = (flag ? S/2 : 0) + (shift >> (32 - MONOSYNTH_WAVE_BITS));
+        int sign = flag ? -1 : 1;
+        if (wave == wave_sqr)
+            wave = wave_saw;
+        float *waveform = waves[wave].original;
+        for (int i = 0; i < points; i++)
+            data[i] = (sign * waveform[i * S / points] + waveform[(i * S / points + shift) & (S - 1)]) / (sign == -1 ? 1 : 2);
         return true;
     }
     if (index == par_filtertype) {
@@ -235,13 +228,17 @@ bool monosynth_audio_module::get_graph(int index, int subindex, float *data, int
 
 void monosynth_audio_module::calculate_buffer_oscs(float lfo)
 {
-    uint32_t shift = (int32_t)(0x78000000 * last_lfov * *params[par_lfopw]);
+    int32_t shift1 = (int32_t)(0x78000000 * dsp::clip11(*params[par_pw1] + last_lfov * *params[par_lfopw]));
+    int32_t shift2 = (int32_t)(0x78000000 * dsp::clip11(*params[par_pw2] + last_lfov * *params[par_lfopw]));
     int flag1 = (wave1 == wave_sqr);
     int flag2 = (wave2 == wave_sqr);
-    uint32_t shift_delta = (int32_t)(0x78000000 * (lfo - last_lfov) * *params[par_lfopw] * (1.0 / step_size));
+    int32_t shift_target1 = (int32_t)(0x78000000 * dsp::clip11(*params[par_pw1] + lfo * *params[par_lfopw]));
+    int32_t shift_target2 = (int32_t)(0x78000000 * dsp::clip11(*params[par_pw2] + lfo * *params[par_lfopw]));
+    int32_t shift_delta1 = (shift_target1 - shift1) >> step_shift;
+    int32_t shift_delta2 = (shift_target2 - shift2) >> step_shift;
     
-    uint32_t shift1 = (flag1 << 31) + shift;
-    uint32_t shift2 = (flag2 << 31) + shift;
+    shift1 += (flag1 << 31);
+    shift2 += (flag2 << 31);
     float mix1 = 1 - 2 * flag1, mix2 = 1 - 2 * flag2;
     
     for (uint32_t i = 0; i < step_size; i++) 
@@ -250,8 +247,8 @@ void monosynth_audio_module::calculate_buffer_oscs(float lfo)
         float osc2val = osc2.get_phaseshifted(shift2, mix2);
         float wave = osc1val + (osc2val - osc1val) * xfade;
         buffer[i] = wave;
-        shift1 += shift_delta;
-        shift2 += shift_delta;
+        shift1 += shift_delta1;
+        shift2 += shift_delta2;
     }
     last_lfov = lfo;
 }
@@ -296,6 +293,16 @@ void monosynth_audio_module::calculate_buffer_stereo()
     }
 }
 
+void monosynth_audio_module::lookup_waveforms()
+{
+    osc1.waveform = waves[wave1 == wave_sqr ? wave_saw : wave1].get_level(osc1.phasedelta);
+    osc2.waveform = waves[wave2 == wave_sqr ? wave_saw : wave2].get_level(osc2.phasedelta);    
+    if (!osc1.waveform) osc1.waveform = silence;
+    if (!osc2.waveform) osc2.waveform = silence;
+    prev_wave1 = wave1;
+    prev_wave2 = wave2;
+}
+
 void monosynth_audio_module::delayed_note_on()
 {
     force_fadeout = false;
@@ -306,10 +313,7 @@ void monosynth_audio_module::delayed_note_on()
     ampctl = 1.0 + (queue_vel - 1.0) * *params[par_vel2amp];
     fltctl = 1.0 + (queue_vel - 1.0) * *params[par_vel2filter];
     set_frequency();
-    osc1.waveform = waves[wave1 == wave_sqr ? wave_saw : wave1].get_level(osc1.phasedelta);
-    osc2.waveform = waves[wave2 == wave_sqr ? wave_saw : wave2].get_level(osc2.phasedelta);
-    if (!osc1.waveform) osc1.waveform = silence;
-    if (!osc2.waveform) osc2.waveform = silence;
+    lookup_waveforms();
     lfo_clock = 0.f;
 
     if (!running)

-- 
calf audio plugins packaging



More information about the pkg-multimedia-commits mailing list