[SCM] calf/master: + Organ: add global transpose and detune parameters

js at users.alioth.debian.org js at users.alioth.debian.org
Tue May 7 15:37:27 UTC 2013


The following commit has been merged in the master branch:
commit d4a4850fcf586a39df7fdd0a64080c08b9c769f8
Author: kfoltman <kfoltman at 78b06b96-2940-0410-b7fc-879d825d01d8>
Date:   Sat Aug 2 09:14:32 2008 +0000

    + Organ: add global transpose and detune parameters
    
    
    
    git-svn-id: https://calf.svn.sourceforge.net/svnroot/calf/trunk@249 78b06b96-2940-0410-b7fc-879d825d01d8

diff --git a/src/calf/organ.h b/src/calf/organ.h
index e50d1c1..d45f5e7 100644
--- a/src/calf/organ.h
+++ b/src/calf/organ.h
@@ -44,6 +44,9 @@ struct organ_parameters {
         float attack, decay, sustain, release, velscale, ampctl;
     };
         
+    //////////////////////////////////////////////////////////////////////////
+    // these parameters are binary-copied from control ports (order is important!)
+    
     float drawbars[9];
     float harmonics[9];
     float waveforms[9];
@@ -73,6 +76,12 @@ struct organ_parameters {
     float lfo_phase;
     float lfo_mode;
     
+    float global_transpose;
+    float global_detune;
+    
+    //////////////////////////////////////////////////////////////////////////
+    // these parameters are calculated
+    
     double perc_decay_const, perc_fm_decay_const;
     float multiplier[9];
     int phaseshift[9];
@@ -82,7 +91,6 @@ struct organ_parameters {
 
     float percussion_keytrack[ORGAN_KEYTRACK_POINTS][2];
     
-    
     organ_parameters() : pitch_bend(1.0f) {}
 
     inline int get_percussion_wave() { return dsp::fastf2i_drm(percussion_wave); }
@@ -271,8 +279,8 @@ public:
     void update_pitch()
     {
         float phase = synth::midi_note_to_phase(note, 0, sample_rate);
-        dphase.set(phase * parameters->percussion_harmonic * 0.5 * parameters->pitch_bend);
-        moddphase.set(phase * parameters->percussion_fm_harmonic * 0.5 * parameters->pitch_bend);
+        dphase.set(phase * parameters->percussion_harmonic * parameters->pitch_bend);
+        moddphase.set(phase * parameters->percussion_fm_harmonic * parameters->pitch_bend);
     }
 
     // this doesn't really have a voice interface
@@ -313,6 +321,7 @@ struct drawbar_organ: public synth::basic_synth {
         par_eg2attack, par_eg2decay, par_eg2sustain, par_eg2release, par_eg2velscl, par_eg2ampctl, 
         par_eg3attack, par_eg3decay, par_eg3sustain, par_eg3release, par_eg3velscl, par_eg3ampctl, 
         par_lforate, par_lfoamt, par_lfowet, par_lfophase, par_lfomode,
+        par_transpose, par_detune,
         param_count
     };
 
diff --git a/src/organ.cpp b/src/organ.cpp
index 9435288..0addd57 100644
--- a/src/organ.cpp
+++ b/src/organ.cpp
@@ -341,11 +341,23 @@ const char *organ_audio_module::get_gui_xml()
                 "</align>"
                 "<align scale-x=\"0.8\" scale-y=\"0.3\">"
                     "<frame label=\"Additional settings\">"
-                        "<vbox>"
-                            "<label param=\"foldnote\"/>"
-                            "<align><knob param=\"foldnote\"/></align>"
-                            "<value param=\"foldnote\"/>"
-                        "</vbox>"
+                        "<hbox>"
+                            "<vbox>"
+                                "<label param=\"transpose\"/>"
+                                "<align><knob param=\"transpose\"/></align>"
+                                "<value param=\"transpose\"/>"
+                            "</vbox>"
+                            "<vbox>"
+                                "<label param=\"detune\"/>"
+                                "<align><knob param=\"detune\"/></align>"
+                                "<value param=\"detune\"/>"
+                            "</vbox>"
+                            "<vbox>"
+                                "<label param=\"foldnote\"/>"
+                                "<align><knob param=\"foldnote\"/></align>"
+                                "<value param=\"foldnote\"/>"
+                            "</vbox>"
+                        "</hbox>"
                     "</frame>"
                 "</align>"
                 "<vbox>"
@@ -551,6 +563,9 @@ parameter_properties organ_audio_module::param_props[] = {
     { organ_voice_base::lfomode_global,        0,  organ_voice_base::lfomode_count - 1,    0, PF_ENUM | PF_CTL_COMBO, organ_vibrato_mode_names, "vib_mode", "Vib Mode" },
 //    { 0,  0, organ_voice_base::ampctl_count - 1,
 //                              0, PF_INT | PF_CTL_COMBO, organ_ampctl_names, "vel_amp_ctl", "Vel To Amp"},
+
+    { -12,        -24, 24,   49, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_SEMITONES, NULL, "transpose", "Transpose" },
+    { 0,       -100,  100,  201, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "detune", "Detune" },
 };
 
 ////////////////////////////////////////////////////////////////////////////
@@ -950,7 +965,7 @@ void organ_vibrato::process(organ_parameters *parameters, float (*data)[2], unsi
 
 void organ_voice::update_pitch()
 {
-    dphase.set(synth::midi_note_to_phase(note, 0, sample_rate) * parameters->pitch_bend);
+    dphase.set(synth::midi_note_to_phase(note, 100 * parameters->global_transpose + parameters->global_detune, sample_rate) * parameters->pitch_bend);
 }
 
 void organ_voice::render_block() {
@@ -961,7 +976,8 @@ void organ_voice::render_block() {
     dsp::zero(&aux_buffers[1][0][0], 2 * Channels * BlockSize);
     if (!amp.get_active())
         return;
-    
+
+    update_pitch();
     dsp::fixed_point<int, 20> tphase, tdphase;
     unsigned int foldvalue = parameters->foldvalue;
     int vibrato_mode = fastf2i_drm(parameters->lfo_mode);
@@ -971,7 +987,7 @@ void organ_voice::render_block() {
         if (amp < small_value<float>())
             continue;
         float *data;
-        dsp::fixed_point<int, 24> hm = dsp::fixed_point<int, 24>(parameters->multiplier[h] * (1.0 / 2.0));
+        dsp::fixed_point<int, 24> hm = dsp::fixed_point<int, 24>(parameters->multiplier[h]);
         int waveid = (int)parameters->waveforms[h];
         if (waveid < 0 || waveid >= wave_count)
             waveid = 0;

-- 
calf audio plugins packaging



More information about the pkg-multimedia-commits mailing list