[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