Browse Source

Update zynaddsubfx

tags/1.9.7
falkTX 9 years ago
parent
commit
184893b843
36 changed files with 495 additions and 265 deletions
  1. +2
    -1
      source/native-plugins/zynaddsubfx/Misc/MiddleWare.cpp
  2. +17
    -1
      source/native-plugins/zynaddsubfx/Params/ADnoteParameters.cpp
  3. +10
    -1
      source/native-plugins/zynaddsubfx/Params/ADnoteParameters.h
  4. +1
    -1
      source/native-plugins/zynaddsubfx/Params/Controller.cpp
  5. +1
    -0
      source/native-plugins/zynaddsubfx/Params/LFOParams.h
  6. +12
    -1
      source/native-plugins/zynaddsubfx/Params/PADnoteParameters.cpp
  7. +2
    -0
      source/native-plugins/zynaddsubfx/Params/PADnoteParameters.h
  8. +10
    -0
      source/native-plugins/zynaddsubfx/Params/SUBnoteParameters.cpp
  9. +2
    -0
      source/native-plugins/zynaddsubfx/Params/SUBnoteParameters.h
  10. +145
    -75
      source/native-plugins/zynaddsubfx/Synth/ADnote.cpp
  11. +10
    -1
      source/native-plugins/zynaddsubfx/Synth/ADnote.h
  12. +9
    -2
      source/native-plugins/zynaddsubfx/Synth/LFO.cpp
  13. +5
    -1
      source/native-plugins/zynaddsubfx/Synth/LFO.h
  14. +1
    -0
      source/native-plugins/zynaddsubfx/Synth/OscilGen.cpp
  15. +9
    -2
      source/native-plugins/zynaddsubfx/Synth/PADnote.cpp
  16. +2
    -0
      source/native-plugins/zynaddsubfx/Synth/PADnote.h
  17. +13
    -3
      source/native-plugins/zynaddsubfx/Synth/SUBnote.cpp
  18. +2
    -0
      source/native-plugins/zynaddsubfx/Synth/SUBnote.h
  19. +71
    -48
      source/native-plugins/zynaddsubfx/UI/ADnoteUI.fl
  20. +9
    -1
      source/native-plugins/zynaddsubfx/UI/Fl_Osc_Slider.cpp
  21. +3
    -5
      source/native-plugins/zynaddsubfx/UI/Fl_Osc_TSlider.H
  22. +10
    -12
      source/native-plugins/zynaddsubfx/UI/Fl_Osc_TSlider.cpp
  23. +6
    -1
      source/native-plugins/zynaddsubfx/UI/Fl_Oscilloscope.h
  24. +5
    -1
      source/native-plugins/zynaddsubfx/UI/LFOUI.fl
  25. +6
    -6
      source/native-plugins/zynaddsubfx/UI/MasterUI.fl
  26. +15
    -15
      source/native-plugins/zynaddsubfx/UI/OscilGenUI.fl
  27. +31
    -19
      source/native-plugins/zynaddsubfx/UI/PADnoteUI.fl
  28. +15
    -15
      source/native-plugins/zynaddsubfx/UI/PartUI.fl
  29. +2
    -2
      source/native-plugins/zynaddsubfx/UI/ResonanceUI.fl
  30. +19
    -7
      source/native-plugins/zynaddsubfx/UI/SUBnoteUI.fl
  31. +1
    -1
      source/native-plugins/zynaddsubfx/UI/TipWin.cpp
  32. +1
    -1
      source/native-plugins/zynaddsubfx/UI/TipWin.h
  33. +42
    -35
      source/native-plugins/zynaddsubfx/UI/WidgetPDial.cpp
  34. +4
    -5
      source/native-plugins/zynaddsubfx/UI/WidgetPDial.h
  35. +1
    -1
      source/native-plugins/zynaddsubfx/UI/guimain.cpp
  36. +1
    -1
      source/native-plugins/zynaddsubfx/main.cpp

+ 2
- 1
source/native-plugins/zynaddsubfx/Misc/MiddleWare.cpp View File

@@ -1071,8 +1071,9 @@ static rtosc::Ports middlewareReplyPorts = {
rEnd}, rEnd},
{"setprogram:cc:ii", 0, 0, {"setprogram:cc:ii", 0, 0,
rBegin; rBegin;
Bank &bank = impl.master->bank;
const int part = rtosc_argument(msg, 0).i; const int part = rtosc_argument(msg, 0).i;
const int program = rtosc_argument(msg, 1).i;
const int program = rtosc_argument(msg, 1).i + 128*bank.bank_lsb;
impl.loadPart(part, impl.master->bank.ins[program].filename.c_str(), impl.master); impl.loadPart(part, impl.master->bank.ins[program].filename.c_str(), impl.master);
impl.uToB->write(("/part"+to_s(part)+"/Pname").c_str(), "s", impl.master->bank.ins[program].name.c_str()); impl.uToB->write(("/part"+to_s(part)+"/Pname").c_str(), "s", impl.master->bank.ins[program].name.c_str());
rEnd}, rEnd},


+ 17
- 1
source/native-plugins/zynaddsubfx/Params/ADnoteParameters.cpp View File

@@ -93,6 +93,8 @@ static const Ports voicePorts = {
//Freq Stuff //Freq Stuff
rToggle(Pfixedfreq, "If frequency is fixed"), rToggle(Pfixedfreq, "If frequency is fixed"),
rParamZyn(PfixedfreqET, "Equal Tempermant Parameter"), rParamZyn(PfixedfreqET, "Equal Tempermant Parameter"),
rParamZyn(PBendAdjust, "Pitch bend adjustment"),
rParamZyn(POffsetHz, "Voice constant offset"),
rParamI(PDetune, "Fine Detune"), rParamI(PDetune, "Fine Detune"),
rParamI(PCoarseDetune, "Coarse Detune"), rParamI(PCoarseDetune, "Coarse Detune"),
rParamZyn(PDetuneType, "Magnitude of Detune"), rParamZyn(PDetuneType, "Magnitude of Detune"),
@@ -125,6 +127,7 @@ static const Ports voicePorts = {
rParamI(PFMDetune, "Modulator Fine Detune"), rParamI(PFMDetune, "Modulator Fine Detune"),
rParamI(PFMCoarseDetune, "Modulator Coarse Detune"), rParamI(PFMCoarseDetune, "Modulator Coarse Detune"),
rParamZyn(PFMDetuneType, "Modulator Detune Magnitude"), rParamZyn(PFMDetuneType, "Modulator Detune Magnitude"),
rToggle(PFMFixedFreq, "Modulator Frequency Fixed"),
rToggle(PFMFreqEnvelopeEnabled, "Modulator Frequency Envelope"), rToggle(PFMFreqEnvelopeEnabled, "Modulator Frequency Envelope"),
rToggle(PFMAmpEnvelopeEnabled, "Modulator Amplitude Envelope"), rToggle(PFMAmpEnvelopeEnabled, "Modulator Amplitude Envelope"),


@@ -256,7 +259,7 @@ static const Ports globalPorts = {




//Resonance //Resonance
rParamZyn(Hrandgrouping, "How randomness is applied to multiple voices using the same oscil"),
rToggle(Hrandgrouping, "How randomness is applied to multiple voices using the same oscil"),


//weird stuff for PCoarseDetune //weird stuff for PCoarseDetune
{"detunevalue:", rMap(unit,cents) rDoc("Get detune in cents"), NULL, {"detunevalue:", rMap(unit,cents) rDoc("Get detune in cents"), NULL,
@@ -409,6 +412,8 @@ void ADnoteVoiceParam::defaults()
Type = 0; Type = 0;
Pfixedfreq = 0; Pfixedfreq = 0;
PfixedfreqET = 0; PfixedfreqET = 0;
PBendAdjust = 88; // 64 + 24
POffsetHz = 64;
Presonance = 1; Presonance = 1;
Pfilterbypass = 0; Pfilterbypass = 0;
Pextoscil = -1; Pextoscil = -1;
@@ -433,6 +438,7 @@ void ADnoteVoiceParam::defaults()
PFilterVelocityScale = 0; PFilterVelocityScale = 0;
PFilterVelocityScaleFunction = 64; PFilterVelocityScaleFunction = 64;
PFMEnabled = 0; PFMEnabled = 0;
PFMFixedFreq = false;


//I use the internal oscillator (-1) //I use the internal oscillator (-1)
PFMVoice = -1; PFMVoice = -1;
@@ -646,6 +652,8 @@ void ADnoteVoiceParam::add2XML(XMLwrapper& xml, bool fmoscilused)
xml.beginbranch("FREQUENCY_PARAMETERS"); xml.beginbranch("FREQUENCY_PARAMETERS");
xml.addparbool("fixed_freq", Pfixedfreq); xml.addparbool("fixed_freq", Pfixedfreq);
xml.addpar("fixed_freq_et", PfixedfreqET); xml.addpar("fixed_freq_et", PfixedfreqET);
xml.addpar("bend_adjust", PBendAdjust);
xml.addpar("offset_hz", POffsetHz);
xml.addpar("detune", PDetune); xml.addpar("detune", PDetune);
xml.addpar("coarse_detune", PCoarseDetune); xml.addpar("coarse_detune", PCoarseDetune);
xml.addpar("detune_type", PDetuneType); xml.addpar("detune_type", PDetuneType);
@@ -716,6 +724,7 @@ void ADnoteVoiceParam::add2XML(XMLwrapper& xml, bool fmoscilused)


xml.addparbool("freq_envelope_enabled", xml.addparbool("freq_envelope_enabled",
PFMFreqEnvelopeEnabled); PFMFreqEnvelopeEnabled);
xml.addparbool("fixed_freq", PFMFixedFreq);
if((PFMFreqEnvelopeEnabled != 0) || (!xml.minimal)) { if((PFMFreqEnvelopeEnabled != 0) || (!xml.minimal)) {
xml.beginbranch("FREQUENCY_ENVELOPE"); xml.beginbranch("FREQUENCY_ENVELOPE");
FMFreqEnvelope->add2XML(xml); FMFreqEnvelope->add2XML(xml);
@@ -944,6 +953,7 @@ void ADnoteVoiceParam::paste(ADnoteVoiceParam &a)
copy(PFilterEnabled); copy(PFilterEnabled);
copy(Pfilterbypass); copy(Pfilterbypass);
copy(PFMEnabled); copy(PFMEnabled);
copy(PFMFixedFreq);


RCopy(OscilSmp); RCopy(OscilSmp);


@@ -965,6 +975,8 @@ void ADnoteVoiceParam::paste(ADnoteVoiceParam &a)
copy(PDetune); copy(PDetune);
copy(PCoarseDetune); copy(PCoarseDetune);
copy(PDetuneType); copy(PDetuneType);
copy(PBendAdjust);
copy(POffsetHz);
copy(PFreqEnvelopeEnabled); copy(PFreqEnvelopeEnabled);


RCopy(FreqEnvelope); RCopy(FreqEnvelope);
@@ -1102,6 +1114,8 @@ void ADnoteVoiceParam::getfromXML(XMLwrapper& xml, unsigned nvoice)
if(xml.enterbranch("FREQUENCY_PARAMETERS")) { if(xml.enterbranch("FREQUENCY_PARAMETERS")) {
Pfixedfreq = xml.getparbool("fixed_freq", Pfixedfreq); Pfixedfreq = xml.getparbool("fixed_freq", Pfixedfreq);
PfixedfreqET = xml.getpar127("fixed_freq_et", PfixedfreqET); PfixedfreqET = xml.getpar127("fixed_freq_et", PfixedfreqET);
PBendAdjust = xml.getpar127("bend_adjust", PBendAdjust);
POffsetHz = xml.getpar127("offset_hz", POffsetHz);
PDetune = xml.getpar("detune", PDetune, 0, 16383); PDetune = xml.getpar("detune", PDetune, 0, 16383);
PCoarseDetune = xml.getpar("coarse_detune", PCoarseDetune, 0, 16383); PCoarseDetune = xml.getpar("coarse_detune", PCoarseDetune, 0, 16383);
PDetuneType = xml.getpar127("detune_type", PDetuneType); PDetuneType = xml.getpar127("detune_type", PDetuneType);
@@ -1173,6 +1187,8 @@ void ADnoteVoiceParam::getfromXML(XMLwrapper& xml, unsigned nvoice)


PFMFreqEnvelopeEnabled = xml.getparbool("freq_envelope_enabled", PFMFreqEnvelopeEnabled = xml.getparbool("freq_envelope_enabled",
PFMFreqEnvelopeEnabled); PFMFreqEnvelopeEnabled);
PFMFixedFreq = xml.getparbool("fixed_freq",
PFMFixedFreq);
if(xml.enterbranch("FREQUENCY_ENVELOPE")) { if(xml.enterbranch("FREQUENCY_ENVELOPE")) {
FMFreqEnvelope->getfromXML(xml); FMFreqEnvelope->getfromXML(xml);
xml.exitbranch(); xml.exitbranch();


+ 10
- 1
source/native-plugins/zynaddsubfx/Params/ADnoteParameters.h View File

@@ -27,7 +27,7 @@
#include "PresetsArray.h" #include "PresetsArray.h"


enum FMTYPE { enum FMTYPE {
NONE, MORPH, RING_MOD, PHASE_MOD, FREQ_MOD, PITCH_MOD
NONE, MORPH, RING_MOD, PHASE_MOD, FREQ_MOD, PW_MOD
}; };


/*****************************************************************/ /*****************************************************************/
@@ -189,6 +189,12 @@ struct ADnoteVoiceParam {
/** Detune type */ /** Detune type */
unsigned char PDetuneType; unsigned char PDetuneType;


/** Pitch bend adjustment */
unsigned char PBendAdjust;

/** Pitch offset Hz */
unsigned char POffsetHz;

/* Frequency Envelope */ /* Frequency Envelope */
unsigned char PFreqEnvelopeEnabled; unsigned char PFreqEnvelopeEnabled;
EnvelopeParams *FreqEnvelope; EnvelopeParams *FreqEnvelope;
@@ -283,6 +289,9 @@ struct ADnoteVoiceParam {
/* The detune type */ /* The detune type */
unsigned char PFMDetuneType; unsigned char PFMDetuneType;


/* FM base freq fixed at 440Hz */
unsigned char PFMFixedFreq;

/* Frequency Envelope of the Modullator */ /* Frequency Envelope of the Modullator */
unsigned char PFMFreqEnvelopeEnabled; unsigned char PFMFreqEnvelopeEnabled;
EnvelopeParams *FMFreqEnvelope; EnvelopeParams *FMFreqEnvelope;


+ 1
- 1
source/native-plugins/zynaddsubfx/Params/Controller.cpp View File

@@ -39,7 +39,7 @@ const rtosc::Ports Controller::ports = {
rToggle(bandwidth.exponential, "Bandwidth Exponential Mode"), rToggle(bandwidth.exponential, "Bandwidth Exponential Mode"),
rParamZyn(modwheel.depth, "Depth of Modwheel MIDI Control"), rParamZyn(modwheel.depth, "Depth of Modwheel MIDI Control"),
rToggle(modwheel.exponential, "Modwheel Exponential Mode"), rToggle(modwheel.exponential, "Modwheel Exponential Mode"),
rToggle(pitchwheel.is_split, "If PitchWheel Has unified blendrange or not"),
rToggle(pitchwheel.is_split, "If PitchWheel Has unified bendrange or not"),
rParamI(pitchwheel.bendrange, "Range of MIDI Pitch Wheel"), rParamI(pitchwheel.bendrange, "Range of MIDI Pitch Wheel"),
rParamI(pitchwheel.bendrange_down, "Lower Range of MIDI Pitch Wheel"), rParamI(pitchwheel.bendrange_down, "Lower Range of MIDI Pitch Wheel"),
rToggle(expression.receive, "Expression MIDI Receive"), rToggle(expression.receive, "Expression MIDI Receive"),


+ 1
- 0
source/native-plugins/zynaddsubfx/Params/LFOParams.h View File

@@ -35,6 +35,7 @@ class XMLwrapper;
#define LFO_RAMPDOWN 4 #define LFO_RAMPDOWN 4
#define LFO_EXP_DOWN1 5 #define LFO_EXP_DOWN1 5
#define LFO_EXP_DOWN2 6 #define LFO_EXP_DOWN2 6
#define LFO_RANDOM 7


class LFOParams:public Presets class LFOParams:public Presets
{ {


+ 12
- 1
source/native-plugins/zynaddsubfx/Params/PADnoteParameters.cpp View File

@@ -66,7 +66,8 @@ static const rtosc::Ports realtime_ports =
//Freq //Freq
rToggle(Pfixedfreq, "Base frequency fixed frequency enable"), rToggle(Pfixedfreq, "Base frequency fixed frequency enable"),
rParamZyn(PfixedfreqET, "Equal temeperate control for fixed frequency operation"), rParamZyn(PfixedfreqET, "Equal temeperate control for fixed frequency operation"),

rParamZyn(PBendAdjust, "Pitch bend adjustment"),
rParamZyn(POffsetHz, "Voice constant offset"),
rParamI(PDetune, "Fine Detune"), rParamI(PDetune, "Fine Detune"),
rParamI(PCoarseDetune, "Coarse Detune"), rParamI(PCoarseDetune, "Coarse Detune"),
rParamZyn(PDetuneType, "Magnitude of Detune"), rParamZyn(PDetuneType, "Magnitude of Detune"),
@@ -233,6 +234,8 @@ static const rtosc::Ports non_realtime_ports =
d.reply(d.loc, "b", n*sizeof(float), tmp); d.reply(d.loc, "b", n*sizeof(float), tmp);
d.reply(d.loc, "i", realbw); d.reply(d.loc, "i", realbw);
delete[] tmp;}}, delete[] tmp;}},
{"needPrepare:", rDoc("Unimplemented Stub"),
NULL, [](const char *, rtosc::RtData&) {}},
}; };


const rtosc::Ports &PADnoteParameters::non_realtime_ports = ::non_realtime_ports; const rtosc::Ports &PADnoteParameters::non_realtime_ports = ::non_realtime_ports;
@@ -327,6 +330,8 @@ void PADnoteParameters::defaults()
/* Frequency Global Parameters */ /* Frequency Global Parameters */
Pfixedfreq = 0; Pfixedfreq = 0;
PfixedfreqET = 0; PfixedfreqET = 0;
PBendAdjust = 88; // 64 + 24
POffsetHz = 64;
PDetune = 8192; //zero PDetune = 8192; //zero
PCoarseDetune = 0; PCoarseDetune = 0;
PDetuneType = 1; PDetuneType = 1;
@@ -984,6 +989,8 @@ void PADnoteParameters::add2XML(XMLwrapper& xml)
xml.beginbranch("FREQUENCY_PARAMETERS"); xml.beginbranch("FREQUENCY_PARAMETERS");
xml.addpar("fixed_freq", Pfixedfreq); xml.addpar("fixed_freq", Pfixedfreq);
xml.addpar("fixed_freq_et", PfixedfreqET); xml.addpar("fixed_freq_et", PfixedfreqET);
xml.addpar("bend_adjust", PBendAdjust);
xml.addpar("offset_hz", POffsetHz);
xml.addpar("detune", PDetune); xml.addpar("detune", PDetune);
xml.addpar("coarse_detune", PCoarseDetune); xml.addpar("coarse_detune", PCoarseDetune);
xml.addpar("detune_type", PDetuneType); xml.addpar("detune_type", PDetuneType);
@@ -1098,6 +1105,8 @@ void PADnoteParameters::getfromXML(XMLwrapper& xml)
if(xml.enterbranch("FREQUENCY_PARAMETERS")) { if(xml.enterbranch("FREQUENCY_PARAMETERS")) {
Pfixedfreq = xml.getpar127("fixed_freq", Pfixedfreq); Pfixedfreq = xml.getpar127("fixed_freq", Pfixedfreq);
PfixedfreqET = xml.getpar127("fixed_freq_et", PfixedfreqET); PfixedfreqET = xml.getpar127("fixed_freq_et", PfixedfreqET);
PBendAdjust = xml.getpar127("bend_adjust", PBendAdjust);
POffsetHz = xml.getpar127("offset_hz", POffsetHz);
PDetune = xml.getpar("detune", PDetune, 0, 16383); PDetune = xml.getpar("detune", PDetune, 0, 16383);
PCoarseDetune = xml.getpar("coarse_detune", PCoarseDetune, 0, 16383); PCoarseDetune = xml.getpar("coarse_detune", PCoarseDetune, 0, 16383);
PDetuneType = xml.getpar127("detune_type", PDetuneType); PDetuneType = xml.getpar127("detune_type", PDetuneType);
@@ -1176,6 +1185,8 @@ void PADnoteParameters::pasteRT(PADnoteParameters &x)
COPY(Pfixedfreq); COPY(Pfixedfreq);


COPY(PfixedfreqET); COPY(PfixedfreqET);
COPY(PBendAdjust);
COPY(POffsetHz);
COPY(PDetune); COPY(PDetune);
COPY(PCoarseDetune); COPY(PCoarseDetune);
COPY(PDetuneType); COPY(PDetuneType);


+ 2
- 0
source/native-plugins/zynaddsubfx/Params/PADnoteParameters.h View File

@@ -106,6 +106,8 @@ class PADnoteParameters:public Presets
If this parameter is 0, the frequency is fixed (to 440 Hz); If this parameter is 0, the frequency is fixed (to 440 Hz);
if this parameter is 64, 1 MIDI halftone -> 1 frequency halftone */ if this parameter is 64, 1 MIDI halftone -> 1 frequency halftone */
unsigned char PfixedfreqET; unsigned char PfixedfreqET;
unsigned char PBendAdjust;
unsigned char POffsetHz;
unsigned short int PDetune; //fine detune unsigned short int PDetune; //fine detune
unsigned short int PCoarseDetune; //coarse detune+octave unsigned short int PCoarseDetune; //coarse detune+octave
unsigned char PDetuneType; //detune type unsigned char PDetuneType; //detune type


+ 10
- 0
source/native-plugins/zynaddsubfx/Params/SUBnoteParameters.cpp View File

@@ -53,6 +53,8 @@ static const rtosc::Ports SUBnotePorts = {
//rToggle(),//continue //rToggle(),//continue
rToggle(Pfixedfreq, "Base frequency fixed frequency enable"), rToggle(Pfixedfreq, "Base frequency fixed frequency enable"),
rParamZyn(PfixedfreqET, "Equal temeperate control for fixed frequency operation"), rParamZyn(PfixedfreqET, "Equal temeperate control for fixed frequency operation"),
rParamZyn(PBendAdjust, "Pitch bend adjustment"),
rParamZyn(POffsetHz, "Voice constant offset"),
#undef rChangeCb #undef rChangeCb
#define rChangeCb obj->updateFrequencyMultipliers(); #define rChangeCb obj->updateFrequencyMultipliers();
rParamI(POvertoneSpread.type, rMap(min, 0), rMap(max, 7), rParamI(POvertoneSpread.type, rMap(min, 0), rMap(max, 7),
@@ -152,6 +154,8 @@ void SUBnoteParameters::defaults()


Pfixedfreq = 0; Pfixedfreq = 0;
PfixedfreqET = 0; PfixedfreqET = 0;
PBendAdjust = 88; // 64 + 24
POffsetHz = 64;
Pnumstages = 2; Pnumstages = 2;
Pbandwidth = 40; Pbandwidth = 40;
Phmagtype = 0; Phmagtype = 0;
@@ -232,6 +236,8 @@ void SUBnoteParameters::add2XML(XMLwrapper& xml)
xml.beginbranch("FREQUENCY_PARAMETERS"); xml.beginbranch("FREQUENCY_PARAMETERS");
xml.addparbool("fixed_freq", Pfixedfreq); xml.addparbool("fixed_freq", Pfixedfreq);
xml.addpar("fixed_freq_et", PfixedfreqET); xml.addpar("fixed_freq_et", PfixedfreqET);
xml.addpar("bend_adjust", PBendAdjust);
xml.addpar("offset_hz", POffsetHz);


xml.addpar("detune", PDetune); xml.addpar("detune", PDetune);
xml.addpar("coarse_detune", PCoarseDetune); xml.addpar("coarse_detune", PCoarseDetune);
@@ -352,6 +358,8 @@ void SUBnoteParameters::paste(SUBnoteParameters &sub)
doPaste(PDetune); doPaste(PDetune);
doPaste(PCoarseDetune); doPaste(PCoarseDetune);
doPaste(PDetuneType); doPaste(PDetuneType);
doPaste(PBendAdjust);
doPaste(POffsetHz);
doPaste(PFreqEnvelopeEnabled); doPaste(PFreqEnvelopeEnabled);
doPPaste(FreqEnvelope); doPPaste(FreqEnvelope);
doPaste(PBandWidthEnvelopeEnabled); doPaste(PBandWidthEnvelopeEnabled);
@@ -423,6 +431,8 @@ void SUBnoteParameters::getfromXML(XMLwrapper& xml)
if(xml.enterbranch("FREQUENCY_PARAMETERS")) { if(xml.enterbranch("FREQUENCY_PARAMETERS")) {
Pfixedfreq = xml.getparbool("fixed_freq", Pfixedfreq); Pfixedfreq = xml.getparbool("fixed_freq", Pfixedfreq);
PfixedfreqET = xml.getpar127("fixed_freq_et", PfixedfreqET); PfixedfreqET = xml.getpar127("fixed_freq_et", PfixedfreqET);
PBendAdjust = xml.getpar127("bend_adjust", PBendAdjust);
POffsetHz = xml.getpar127("offset_hz", POffsetHz);


PDetune = xml.getpar("detune", PDetune, 0, 16383); PDetune = xml.getpar("detune", PDetune, 0, 16383);
PCoarseDetune = xml.getpar("coarse_detune", PCoarseDetune, 0, 16383); PCoarseDetune = xml.getpar("coarse_detune", PCoarseDetune, 0, 16383);


+ 2
- 0
source/native-plugins/zynaddsubfx/Params/SUBnoteParameters.h View File

@@ -54,6 +54,8 @@ class SUBnoteParameters:public Presets
EnvelopeParams *FreqEnvelope; EnvelopeParams *FreqEnvelope;
unsigned char PBandWidthEnvelopeEnabled; unsigned char PBandWidthEnvelopeEnabled;
EnvelopeParams *BandWidthEnvelope; EnvelopeParams *BandWidthEnvelope;
unsigned char PBendAdjust;
unsigned char POffsetHz;


//Filter Parameters (Global) //Filter Parameters (Global)
unsigned char PGlobalFilterEnabled; unsigned char PGlobalFilterEnabled;


+ 145
- 75
source/native-plugins/zynaddsubfx/Synth/ADnote.cpp View File

@@ -105,15 +105,36 @@ ADnote::ADnote(ADnoteParameters *pars_, SynthParams &spars)
continue; //the voice is disabled continue; //the voice is disabled
} }


int BendAdj = pars.VoicePar[nvoice].PBendAdjust - 64;
if (BendAdj % 24 == 0)
NoteVoicePar[nvoice].BendAdjust = BendAdj / 24;
else
NoteVoicePar[nvoice].BendAdjust = BendAdj / 24.0f;

float offset_val = (pars.VoicePar[nvoice].POffsetHz - 64)/64.0f;
NoteVoicePar[nvoice].OffsetHz =
15.0f*(offset_val * sqrtf(fabsf(offset_val)));

unison_stereo_spread[nvoice] = unison_stereo_spread[nvoice] =
pars.VoicePar[nvoice].Unison_stereo_spread / 127.0f; pars.VoicePar[nvoice].Unison_stereo_spread / 127.0f;

int unison = pars.VoicePar[nvoice].Unison_size; int unison = pars.VoicePar[nvoice].Unison_size;
if(unison < 1) if(unison < 1)
unison = 1; unison = 1;


// Since noise unison of greater than two is touch goofy...
if (pars.VoicePar[nvoice].Type != 0 && unison > 2)
unison = 2;
bool is_pwm = pars.VoicePar[nvoice].PFMEnabled == PW_MOD;

if (pars.VoicePar[nvoice].Type != 0) {
// Since noise unison of greater than two is touch goofy...
if (unison > 2)
unison = 2;
} else if (is_pwm) {
/* Pulse width mod uses pairs of subvoices. */
unison *= 2;
// This many is likely to sound like noise anyhow.
if (unison > 64)
unison = 64;
}


//compute unison //compute unison
unison_size[nvoice] = unison; unison_size[nvoice] = unison;
@@ -127,8 +148,8 @@ ADnote::ADnote(ADnoteParameters *pars_, SynthParams &spars)
float unison_vibratto_a = float unison_vibratto_a =
pars.VoicePar[nvoice].Unison_vibratto / 127.0f; //0.0f .. 1.0f pars.VoicePar[nvoice].Unison_vibratto / 127.0f; //0.0f .. 1.0f


switch(unison) {
int true_unison = unison / (is_pwm ? 2 : 1);
switch(true_unison) {
case 1: case 1:
unison_base_freq_rap[nvoice][0] = 1.0f; //if the unison is not used, always make the only subvoice to have the default note unison_base_freq_rap[nvoice][0] = 1.0f; //if the unison is not used, always make the only subvoice to have the default note
break; break;
@@ -138,11 +159,11 @@ ADnote::ADnote(ADnoteParameters *pars_, SynthParams &spars)
}; };
break; break;
default: { //unison for more than 2 subvoices default: { //unison for more than 2 subvoices
float unison_values[unison];
float unison_values[true_unison];
float min = -1e-6, max = 1e-6; float min = -1e-6, max = 1e-6;
for(int k = 0; k < unison; ++k) {
float step = (k / (float) (unison - 1)) * 2.0f - 1.0f; //this makes the unison spread more uniform
float val = step + (RND * 2.0f - 1.0f) / (unison - 1);
for(int k = 0; k < true_unison; ++k) {
float step = (k / (float) (true_unison - 1)) * 2.0f - 1.0f; //this makes the unison spread more uniform
float val = step + (RND * 2.0f - 1.0f) / (true_unison - 1);
unison_values[k] = val; unison_values[k] = val;
if (min > val) { if (min > val) {
min = val; min = val;
@@ -152,7 +173,7 @@ ADnote::ADnote(ADnoteParameters *pars_, SynthParams &spars)
} }
} }
float diff = max - min; float diff = max - min;
for(int k = 0; k < unison; ++k) {
for(int k = 0; k < true_unison; ++k) {
unison_values[k] = unison_values[k] =
(unison_values[k] - (max + min) * 0.5f) / diff; //the lowest value will be -1 and the highest will be 1 (unison_values[k] - (max + min) * 0.5f) / diff; //the lowest value will be -1 and the highest will be 1
unison_base_freq_rap[nvoice][k] = unison_base_freq_rap[nvoice][k] =
@@ -160,9 +181,16 @@ ADnote::ADnote(ADnoteParameters *pars_, SynthParams &spars)
} }
}; };
} }
if (is_pwm)
for (int i = true_unison - 1; i >= 0; i--) {
unison_base_freq_rap[nvoice][2*i + 1] =
unison_base_freq_rap[nvoice][i];
unison_base_freq_rap[nvoice][2*i] =
unison_base_freq_rap[nvoice][i];
}


//unison vibrattos //unison vibrattos
if(unison > 1)
if(unison > 2 || (!is_pwm && unison > 1))
for(int k = 0; k < unison; ++k) //reduce the frequency difference for larger vibrattos for(int k = 0; k < unison; ++k) //reduce the frequency difference for larger vibrattos
unison_base_freq_rap[nvoice][k] = 1.0f unison_base_freq_rap[nvoice][k] = 1.0f
+ (unison_base_freq_rap[ + (unison_base_freq_rap[
@@ -186,12 +214,27 @@ ADnote::ADnote(ADnoteParameters *pars_, SynthParams &spars)
if(RND < 0.5f) if(RND < 0.5f)
m = -m; m = -m;
unison_vibratto[nvoice].step[k] = m; unison_vibratto[nvoice].step[k] = m;

// Ugly, but the alternative is likely uglier.
if (is_pwm)
for (int i = 0; i < unison; i += 2) {
unison_vibratto[nvoice].step[i+1] =
unison_vibratto[nvoice].step[i];
unison_vibratto[nvoice].position[i+1] =
unison_vibratto[nvoice].position[i];
}
} }


if(unison == 1) { //no vibratto for a single voice
unison_vibratto[nvoice].step[0] = 0.0f;
unison_vibratto[nvoice].position[0] = 0.0f;
unison_vibratto[nvoice].amplitude = 0.0f;
if(unison <= 2) { //no vibratto for a single voice
if (is_pwm) {
unison_vibratto[nvoice].step[1] = 0.0f;
unison_vibratto[nvoice].position[1] = 0.0f;
}
if (is_pwm || unison == 1) {
unison_vibratto[nvoice].step[0] = 0.0f;
unison_vibratto[nvoice].position[0] = 0.0f;
unison_vibratto[nvoice].amplitude = 0.0f;
}
} }


//phase invert for unison //phase invert for unison
@@ -286,17 +329,21 @@ ADnote::ADnote(ADnoteParameters *pars_, SynthParams &spars)
getvoicebasefreq(nvoice), getvoicebasefreq(nvoice),
pars.VoicePar[nvoice].Presonance); pars.VoicePar[nvoice].Presonance);


//Find range of generated wave
float min = NoteVoicePar[nvoice].OscilSmp[0];
float max = min;
float *smpls = &(NoteVoicePar[nvoice].OscilSmp[1]);
for (int i = synth.oscilsize-1; i--; smpls++)
if (*smpls > max)
max = *smpls;
else if (*smpls < min)
min = *smpls;
NoteVoicePar[nvoice].OscilSmpMin = min;
NoteVoicePar[nvoice].OscilSmpMax = max;
// This code was planned for biasing the carrier in MOD_RING
// but that's on hold for the moment. Disabled 'cos small
// machines run this stuff too.
//
// //Find range of generated wave
// float min = NoteVoicePar[nvoice].OscilSmp[0];
// float max = min;
// float *smpls = &(NoteVoicePar[nvoice].OscilSmp[1]);
// for (int i = synth.oscilsize-1; i--; smpls++)
// if (*smpls > max)
// max = *smpls;
// else if (*smpls < min)
// min = *smpls;
// NoteVoicePar[nvoice].OscilSmpMin = min;
// NoteVoicePar[nvoice].OscilSmpMax = max;


//I store the first elments to the last position for speedups //I store the first elments to the last position for speedups
for(int i = 0; i < OSCIL_SMP_EXTRA_SAMPLES; ++i) for(int i = 0; i < OSCIL_SMP_EXTRA_SAMPLES; ++i)
@@ -304,9 +351,11 @@ ADnote::ADnote(ADnoteParameters *pars_, SynthParams &spars)
+ i] = + i] =
NoteVoicePar[nvoice].OscilSmp[i]; NoteVoicePar[nvoice].OscilSmp[i];


oscposhi_start +=
NoteVoicePar[nvoice].phase_offset =
(int)((pars.VoicePar[nvoice].Poscilphase (int)((pars.VoicePar[nvoice].Poscilphase
- 64.0f) / 128.0f * synth.oscilsize + synth.oscilsize * 4);
- 64.0f) / 128.0f * synth.oscilsize
+ synth.oscilsize * 4);
oscposhi_start += NoteVoicePar[nvoice].phase_offset;


int kth_start = oscposhi_start; int kth_start = oscposhi_start;
for(int k = 0; k < unison; ++k) { for(int k = 0; k < unison; ++k) {
@@ -337,29 +386,34 @@ ADnote::ADnote(ADnoteParameters *pars_, SynthParams &spars)
NoteVoicePar[nvoice].filterbypass = NoteVoicePar[nvoice].filterbypass =
pars.VoicePar[nvoice].Pfilterbypass; pars.VoicePar[nvoice].Pfilterbypass;


switch(pars.VoicePar[nvoice].PFMEnabled) {
case 1:
NoteVoicePar[nvoice].FMEnabled = MORPH;
break;
case 2:
NoteVoicePar[nvoice].FMEnabled = RING_MOD;
break;
case 3:
NoteVoicePar[nvoice].FMEnabled = PHASE_MOD;
break;
case 4:
NoteVoicePar[nvoice].FMEnabled = FREQ_MOD;
break;
case 5:
NoteVoicePar[nvoice].FMEnabled = PITCH_MOD;
break;
default:
NoteVoicePar[nvoice].FMEnabled = NONE;
}
if (pars.VoicePar[nvoice].Type != 0)
NoteVoicePar[nvoice].FMEnabled = NONE;
else
switch(pars.VoicePar[nvoice].PFMEnabled) {
case 1:
NoteVoicePar[nvoice].FMEnabled = MORPH;
break;
case 2:
NoteVoicePar[nvoice].FMEnabled = RING_MOD;
break;
case 3:
NoteVoicePar[nvoice].FMEnabled = PHASE_MOD;
break;
case 4:
NoteVoicePar[nvoice].FMEnabled = FREQ_MOD;
break;
case 5:
NoteVoicePar[nvoice].FMEnabled = PW_MOD;
break;
default:
NoteVoicePar[nvoice].FMEnabled = NONE;
}


NoteVoicePar[nvoice].FMVoice = pars.VoicePar[nvoice].PFMVoice; NoteVoicePar[nvoice].FMVoice = pars.VoicePar[nvoice].PFMVoice;
NoteVoicePar[nvoice].FMFreqEnvelope = NULL; NoteVoicePar[nvoice].FMFreqEnvelope = NULL;
NoteVoicePar[nvoice].FMAmpEnvelope = NULL; NoteVoicePar[nvoice].FMAmpEnvelope = NULL;
NoteVoicePar[nvoice].FMFreqFixed = pars.VoicePar[nvoice].PFMFixedFreq;



//Compute the Voice's modulator volume (incl. damping) //Compute the Voice's modulator volume (incl. damping)
float fmvoldamp = powf(440.0f / getvoicebasefreq( float fmvoldamp = powf(440.0f / getvoicebasefreq(
@@ -368,6 +422,7 @@ ADnote::ADnote(ADnoteParameters *pars_, SynthParams &spars)
- 1.0f); - 1.0f);
switch(NoteVoicePar[nvoice].FMEnabled) { switch(NoteVoicePar[nvoice].FMEnabled) {
case PHASE_MOD: case PHASE_MOD:
case PW_MOD:
fmvoldamp = fmvoldamp =
powf(440.0f / getvoicebasefreq( powf(440.0f / getvoicebasefreq(
nvoice), pars.VoicePar[nvoice].PFMVolumeDamp nvoice), pars.VoicePar[nvoice].PFMVolumeDamp
@@ -381,8 +436,6 @@ ADnote::ADnote(ADnoteParameters *pars_, SynthParams &spars)
(expf(pars.VoicePar[nvoice].PFMVolume / 127.0f (expf(pars.VoicePar[nvoice].PFMVolume / 127.0f
* FM_AMP_MULTIPLIER) - 1.0f) * fmvoldamp * 4.0f; * FM_AMP_MULTIPLIER) - 1.0f) * fmvoldamp * 4.0f;
break; break;
// case PITCH_MOD:NoteVoicePar[nvoice].FMVolume=(pars.VoicePar[nvoice].PFMVolume/127.0f*8.0f)*fmvoldamp;//???????????
// break;
default: default:
if(fmvoldamp > 1.0f) if(fmvoldamp > 1.0f)
fmvoldamp = 1.0f; fmvoldamp = 1.0f;
@@ -546,6 +599,7 @@ void ADnote::legatonote(LegatoParams lpars)


switch(NoteVoicePar[nvoice].FMEnabled) { switch(NoteVoicePar[nvoice].FMEnabled) {
case PHASE_MOD: case PHASE_MOD:
case PW_MOD:
fmvoldamp = fmvoldamp =
powf(440.0f / getvoicebasefreq( powf(440.0f / getvoicebasefreq(
nvoice), pars.VoicePar[nvoice].PFMVolumeDamp nvoice), pars.VoicePar[nvoice].PFMVolumeDamp
@@ -559,8 +613,6 @@ void ADnote::legatonote(LegatoParams lpars)
(expf(pars.VoicePar[nvoice].PFMVolume / 127.0f (expf(pars.VoicePar[nvoice].PFMVolume / 127.0f
* FM_AMP_MULTIPLIER) - 1.0f) * fmvoldamp * 4.0f; * FM_AMP_MULTIPLIER) - 1.0f) * fmvoldamp * 4.0f;
break; break;
// case PITCH_MOD:NoteVoicePar[nvoice].FMVolume=(pars.VoicePar[nvoice].PFMVolume/127.0f*8.0f)*fmvoldamp;//???????????
// break;
default: default:
if(fmvoldamp > 1.0f) if(fmvoldamp > 1.0f)
fmvoldamp = 1.0f; fmvoldamp = 1.0f;
@@ -1084,20 +1136,28 @@ void ADnote::computecurrentparameters()
/ 100.0f; / 100.0f;
voicefreq = getvoicebasefreq(nvoice) voicefreq = getvoicebasefreq(nvoice)
* powf(2, (voicepitch + globalpitch) / 12.0f); //Hz frequency * powf(2, (voicepitch + globalpitch) / 12.0f); //Hz frequency
voicefreq *= ctl.pitchwheel.relfreq; //change the frequency by the controller
setfreq(nvoice, voicefreq * portamentofreqrap);
voicefreq *=
powf(ctl.pitchwheel.relfreq, NoteVoicePar[nvoice].BendAdjust); //change the frequency by the controller
setfreq(nvoice, voicefreq * portamentofreqrap + NoteVoicePar[nvoice].OffsetHz);


/***************/ /***************/
/* Modulator */ /* Modulator */
/***************/ /***************/


if(NoteVoicePar[nvoice].FMEnabled != NONE) { if(NoteVoicePar[nvoice].FMEnabled != NONE) {
FMrelativepitch = NoteVoicePar[nvoice].FMDetune / 100.0f; FMrelativepitch = NoteVoicePar[nvoice].FMDetune / 100.0f;
if(NoteVoicePar[nvoice].FMFreqEnvelope) if(NoteVoicePar[nvoice].FMFreqEnvelope)
FMrelativepitch += FMrelativepitch +=
NoteVoicePar[nvoice].FMFreqEnvelope->envout() / 100; NoteVoicePar[nvoice].FMFreqEnvelope->envout() / 100;
FMfreq =
powf(2.0f, FMrelativepitch
/ 12.0f) * voicefreq * portamentofreqrap;
if (NoteVoicePar[nvoice].FMFreqFixed)
FMfreq =
powf(2.0f, FMrelativepitch
/ 12.0f) * 440.0f;
else
FMfreq =
powf(2.0f, FMrelativepitch
/ 12.0f) * voicefreq * portamentofreqrap;
setfreqFM(nvoice, FMfreq); setfreqFM(nvoice, FMfreq);


FMoldamplitude[nvoice] = FMnewamplitude[nvoice]; FMoldamplitude[nvoice] = FMnewamplitude[nvoice];
@@ -1332,7 +1392,11 @@ inline void ADnote::ComputeVoiceOscillatorFrequencyModulation(int nvoice,
for(int k = 0; k < unison_size[nvoice]; ++k) { for(int k = 0; k < unison_size[nvoice]; ++k) {
float *tw = tmpwave_unison[k]; float *tw = tmpwave_unison[k];
const float *smps = NoteVoicePar[NoteVoicePar[nvoice].FMVoice].VoiceOut; const float *smps = NoteVoicePar[NoteVoicePar[nvoice].FMVoice].VoiceOut;
memcpy(tw, smps, synth.bufferbytes);
if (FMmode == PW_MOD && (k & 1))
for (int i = 0; i < synth.buffersize; ++i)
tw[i] = -smps[i];
else
memcpy(tw, smps, synth.bufferbytes);
} }
} else { } else {
//Compute the modulator and store it in tmpwave_unison[][] //Compute the modulator and store it in tmpwave_unison[][]
@@ -1346,7 +1410,10 @@ inline void ADnote::ComputeVoiceOscillatorFrequencyModulation(int nvoice,


for(int i = 0; i < synth.buffersize; ++i) { for(int i = 0; i < synth.buffersize; ++i) {
tw[i] = (smps[poshiFM] * ((1<<24) - posloFM) tw[i] = (smps[poshiFM] * ((1<<24) - posloFM)
+ smps[poshiFM + 1] * posloFM) / (1.0f*(1<<24));
+ smps[poshiFM + 1] * posloFM) / (1.0f*(1<<24));
if (FMmode == PW_MOD && (k & 1))
tw[i] = -tw[i];

posloFM += freqloFM; posloFM += freqloFM;
if(posloFM >= (1<<24)) { if(posloFM >= (1<<24)) {
posloFM &= 0xffffff;//fmod(posloFM, 1.0f); posloFM &= 0xffffff;//fmod(posloFM, 1.0f);
@@ -1380,7 +1447,7 @@ inline void ADnote::ComputeVoiceOscillatorFrequencyModulation(int nvoice,




//normalize: makes all sample-rates, oscil_sizes to produce same sound //normalize: makes all sample-rates, oscil_sizes to produce same sound
if(FMmode != 0) { //Frequency modulation
if(FMmode == FREQ_MOD) { //Frequency modulation
const float normalize = synth.oscilsize_f / 262144.0f * 44100.0f const float normalize = synth.oscilsize_f / 262144.0f * 44100.0f
/ synth.samplerate_f; / synth.samplerate_f;
for(int k = 0; k < unison_size[nvoice]; ++k) { for(int k = 0; k < unison_size[nvoice]; ++k) {
@@ -1393,7 +1460,7 @@ inline void ADnote::ComputeVoiceOscillatorFrequencyModulation(int nvoice,
FMoldsmp[nvoice][k] = fmold; FMoldsmp[nvoice][k] = fmold;
} }
} }
else { //Phase modulation
else { //Phase or PWM modulation
const float normalize = synth.oscilsize_f / 262144.0f; const float normalize = synth.oscilsize_f / 262144.0f;
for(int k = 0; k < unison_size[nvoice]; ++k) { for(int k = 0; k < unison_size[nvoice]; ++k) {
float *tw = tmpwave_unison[k]; float *tw = tmpwave_unison[k];
@@ -1421,6 +1488,8 @@ inline void ADnote::ComputeVoiceOscillatorFrequencyModulation(int nvoice,
//carrier //carrier
int carposhi = poshi + FMmodfreqhi; int carposhi = poshi + FMmodfreqhi;
int carposlo = poslo + FMmodfreqlo; int carposlo = poslo + FMmodfreqlo;
if (FMmode == PW_MOD && (k & 1))
carposhi += NoteVoicePar[nvoice].phase_offset;


if(carposlo >= (1<<24)) { if(carposlo >= (1<<24)) {
carposhi++; carposhi++;
@@ -1446,12 +1515,6 @@ inline void ADnote::ComputeVoiceOscillatorFrequencyModulation(int nvoice,
} }




/*Calculeaza Oscilatorul cu PITCH MODULATION*/
inline void ADnote::ComputeVoiceOscillatorPitchModulation(int /*nvoice*/)
{
//TODO
}

/* /*
* Computes the Noise * Computes the Noise
*/ */
@@ -1514,13 +1577,12 @@ int ADnote::noteout(float *outl, float *outr)
case RING_MOD: case RING_MOD:
ComputeVoiceOscillatorRingModulation(nvoice); ComputeVoiceOscillatorRingModulation(nvoice);
break; break;
case PHASE_MOD:
ComputeVoiceOscillatorFrequencyModulation(nvoice, 0);
break;
case FREQ_MOD: case FREQ_MOD:
ComputeVoiceOscillatorFrequencyModulation(nvoice, 1);
case PHASE_MOD:
case PW_MOD:
ComputeVoiceOscillatorFrequencyModulation(nvoice,
NoteVoicePar[nvoice].FMEnabled);
break; break;
//case PITCH_MOD:ComputeVoiceOscillatorPitchModulation(nvoice);break;
default: default:
ComputeVoiceOscillator_LinearInterpolation(nvoice); ComputeVoiceOscillator_LinearInterpolation(nvoice);
//if (config.cfg.Interpolation) ComputeVoiceOscillator_CubicInterpolation(nvoice); //if (config.cfg.Interpolation) ComputeVoiceOscillator_CubicInterpolation(nvoice);
@@ -1544,10 +1606,17 @@ int ADnote::noteout(float *outl, float *outr)
float *tw = tmpwave_unison[k]; float *tw = tmpwave_unison[k];
if(stereo) { if(stereo) {
float stereo_pos = 0; float stereo_pos = 0;
if(unison_size[nvoice] > 1)
bool is_pwm = NoteVoicePar[nvoice].FMEnabled == PW_MOD;
if (is_pwm) {
if(unison_size[nvoice] > 2)
stereo_pos = k/2
/ (float)(unison_size[nvoice]/2
- 1) * 2.0f - 1.0f;
} else if(unison_size[nvoice] > 1) {
stereo_pos = k stereo_pos = k
/ (float)(unison_size[nvoice]
- 1) * 2.0f - 1.0f;
/ (float)(unison_size[nvoice]
- 1) * 2.0f - 1.0f;
}
float stereo_spread = unison_stereo_spread[nvoice] * 2.0f; //between 0 and 2.0f float stereo_spread = unison_stereo_spread[nvoice] * 2.0f; //between 0 and 2.0f
if(stereo_spread > 1.0f) { if(stereo_spread > 1.0f) {
float stereo_pos_1 = (stereo_pos >= 0.0f) ? 1.0f : -1.0f; float stereo_pos_1 = (stereo_pos >= 0.0f) ? 1.0f : -1.0f;
@@ -1559,7 +1628,8 @@ int ADnote::noteout(float *outl, float *outr)
else else
stereo_pos *= stereo_spread; stereo_pos *= stereo_spread;


if(unison_size[nvoice] == 1)
if(unison_size[nvoice] == 1 ||
(is_pwm && unison_size[nvoice] == 2))
stereo_pos = 0.0f; stereo_pos = 0.0f;
float panning = (stereo_pos + 1.0f) * 0.5f; float panning = (stereo_pos + 1.0f) * 0.5f;




+ 10
- 1
source/native-plugins/zynaddsubfx/Synth/ADnote.h View File

@@ -105,7 +105,6 @@ class ADnote:public SynthNote
/**Fadein in a way that removes clicks but keep sound "punchy"*/ /**Fadein in a way that removes clicks but keep sound "punchy"*/
inline void fadein(float *smps) const; inline void fadein(float *smps) const;



//GLOBALS //GLOBALS
ADnoteParameters &pars; ADnoteParameters &pars;
unsigned char stereo; //if the note is stereo (allows note Panning) unsigned char stereo; //if the note is stereo (allows note Panning)
@@ -187,6 +186,9 @@ class ADnote:public SynthNote
/* Waveform of the Voice */ /* Waveform of the Voice */
float *OscilSmp; float *OscilSmp;


/* preserved for phase mod PWM emulation. */
int phase_offset;

/* Range of waveform */ /* Range of waveform */
float OscilSmpMin, OscilSmpMax; float OscilSmpMin, OscilSmpMax;


@@ -199,6 +201,11 @@ class ADnote:public SynthNote
// cents = basefreq*VoiceDetune // cents = basefreq*VoiceDetune
float Detune, FineDetune; float Detune, FineDetune;


// Bend adjustment
float BendAdjust;

float OffsetHz;

Envelope *FreqEnvelope; Envelope *FreqEnvelope;
LFO *FreqLfo; LFO *FreqLfo;


@@ -234,6 +241,8 @@ class ADnote:public SynthNote


FMTYPE FMEnabled; FMTYPE FMEnabled;


unsigned char FMFreqFixed;

int FMVoice; int FMVoice;


// Voice Output used by other voices if use this as modullator // Voice Output used by other voices if use this as modullator


+ 9
- 2
source/native-plugins/zynaddsubfx/Synth/LFO.cpp View File

@@ -29,7 +29,8 @@
#include <cmath> #include <cmath>


LFO::LFO(const LFOParams &lfopars, float basefreq, const AbsTime &t) LFO::LFO(const LFOParams &lfopars, float basefreq, const AbsTime &t)
:delayTime(t, lfopars.Pdelay / 127.0f * 4.0f), //0..4 sec
:first_half(-1),
delayTime(t, lfopars.Pdelay / 127.0f * 4.0f), //0..4 sec
waveShape(lfopars.PLFOtype), waveShape(lfopars.PLFOtype),
deterministic(!lfopars.Pfreqrand), deterministic(!lfopars.Pfreqrand),
dt_(t.dt()), dt_(t.dt()),
@@ -88,7 +89,7 @@ LFO::LFO(const LFOParams &lfopars, float basefreq, const AbsTime &t)
LFO::~LFO() LFO::~LFO()
{} {}


float LFO::baseOut(const char waveShape, const float phase) const
float LFO::baseOut(const char waveShape, const float phase)
{ {
switch(waveShape) { switch(waveShape) {
case LFO_TRIANGLE: case LFO_TRIANGLE:
@@ -109,6 +110,12 @@ float LFO::baseOut(const char waveShape, const float phase) const
case LFO_RAMPDOWN: return (0.5f - phase) * 2.0f; case LFO_RAMPDOWN: return (0.5f - phase) * 2.0f;
case LFO_EXP_DOWN1: return powf(0.05f, phase) * 2.0f - 1.0f; case LFO_EXP_DOWN1: return powf(0.05f, phase) * 2.0f - 1.0f;
case LFO_EXP_DOWN2: return powf(0.001f, phase) * 2.0f - 1.0f; case LFO_EXP_DOWN2: return powf(0.001f, phase) * 2.0f - 1.0f;
case LFO_RANDOM:
if ((phase < 0.5) != first_half) {
first_half = phase < 0.5;
last_random = 2*RND-1;
}
return last_random;
default: return cosf(phase * 2.0f * PI); //LFO_SINE default: return cosf(phase * 2.0f * PI); //LFO_SINE
} }
} }


+ 5
- 1
source/native-plugins/zynaddsubfx/Synth/LFO.h View File

@@ -41,7 +41,7 @@ class LFO
float lfoout(); float lfoout();
float amplfoout(); float amplfoout();
private: private:
float baseOut(const char waveShape, const float phase) const;
float baseOut(const char waveShape, const float phase);
//Phase of Oscillator //Phase of Oscillator
float phase; float phase;
//Phase Increment Per Frame //Phase Increment Per Frame
@@ -51,6 +51,10 @@ class LFO
//Amplitude Randomness //Amplitude Randomness
float amp1, amp2; float amp1, amp2;


// RND mode
int first_half;
float last_random;

//Intensity of the wave //Intensity of the wave
float lfointensity; float lfointensity;
//Amount Randomness //Amount Randomness


+ 1
- 0
source/native-plugins/zynaddsubfx/Synth/OscilGen.cpp View File

@@ -171,6 +171,7 @@ const rtosc::Ports OscilGen::non_realtime_ports = {
printf("fowarding...\n"); d.forward();} printf("fowarding...\n"); d.forward();}
const rtosc::Ports OscilGen::realtime_ports{ const rtosc::Ports OscilGen::realtime_ports{
rSelf(OscilGen), rSelf(OscilGen),
rPresetType,
rParamZyn(Prand, "Oscilator Phase Randomness: smaller than 0 is \"" rParamZyn(Prand, "Oscilator Phase Randomness: smaller than 0 is \""
"group\", larger than 0 is for each harmonic"), "group\", larger than 0 is for each harmonic"),
rParamZyn(Pamprandpower, rParamZyn(Pamprandpower,


+ 9
- 2
source/native-plugins/zynaddsubfx/Synth/PADnote.cpp View File

@@ -63,7 +63,13 @@ void PADnote::setup(float freq,
basefreq *= powf(3.0f, tmp); basefreq *= powf(3.0f, tmp);
} }
} }

int BendAdj = pars.PBendAdjust - 64;
if (BendAdj % 24 == 0)
BendAdjust = BendAdj / 24;
else
BendAdjust = BendAdj / 24.0f;
float offset_val = (pars.POffsetHz - 64)/64.0f;
OffsetHz = 15.0f*(offset_val * sqrtf(fabsf(offset_val)));
firsttime = true; firsttime = true;
realfreq = basefreq; realfreq = basefreq;
if(!legato) if(!legato)
@@ -255,7 +261,8 @@ void PADnote::computecurrentparameters()
} }


realfreq = basefreq * portamentofreqrap realfreq = basefreq * portamentofreqrap
* powf(2.0f, globalpitch / 12.0f) * ctl.pitchwheel.relfreq;
* powf(2.0f, globalpitch / 12.0f)
* powf(ctl.pitchwheel.relfreq, BendAdjust) + OffsetHz;
} }






+ 2
- 0
source/native-plugins/zynaddsubfx/Synth/PADnote.h View File

@@ -52,6 +52,8 @@ class PADnote:public SynthNote
float poslo; float poslo;


float basefreq; float basefreq;
float BendAdjust;
float OffsetHz;
bool firsttime; bool firsttime;


int nsample, portamento; int nsample, portamento;


+ 13
- 3
source/native-plugins/zynaddsubfx/Synth/SUBnote.cpp View File

@@ -78,6 +78,13 @@ void SUBnote::setup(float freq,
basefreq *= powf(3.0f, tmp); basefreq *= powf(3.0f, tmp);
} }
} }
int BendAdj = pars.PBendAdjust - 64;
if (BendAdj % 24 == 0)
BendAdjust = BendAdj / 24;
else
BendAdjust = BendAdj / 24.0f;
float offset_val = (pars.POffsetHz - 64)/64.0f;
OffsetHz = 15.0f*(offset_val * sqrtf(fabsf(offset_val)));
float detune = getdetune(pars.PDetuneType, float detune = getdetune(pars.PDetuneType,
pars.PCoarseDetune, pars.PCoarseDetune,
pars.PDetune); pars.PDetune);
@@ -178,9 +185,11 @@ void SUBnote::setup(float freq,
float amp = 1.0f; float amp = 1.0f;
if(nph == 0) if(nph == 0)
amp = gain; amp = gain;
initfilter(lfilter[nph + n * numstages], freq, bw, amp, hgain);
initfilter(lfilter[nph + n * numstages], freq + OffsetHz, bw,
amp, hgain);
if(stereo) if(stereo)
initfilter(rfilter[nph + n * numstages], freq, bw, amp, hgain);
initfilter(rfilter[nph + n * numstages], freq + OffsetHz, bw,
amp, hgain);
} }
} }


@@ -432,7 +441,8 @@ void SUBnote::computecurrentparameters()
envfreq = FreqEnvelope->envout() / 1200; envfreq = FreqEnvelope->envout() / 1200;
envfreq = powf(2.0f, envfreq); envfreq = powf(2.0f, envfreq);
} }
envfreq *= ctl.pitchwheel.relfreq; //pitch wheel
envfreq *=
powf(ctl.pitchwheel.relfreq, BendAdjust); //pitch wheel
if(portamento) { //portamento is used if(portamento) { //portamento is used
envfreq *= ctl.portamento.freqrap; envfreq *= ctl.portamento.freqrap;
if(!ctl.portamento.used) //the portamento has finished if(!ctl.portamento.used) //the portamento has finished


+ 2
- 0
source/native-plugins/zynaddsubfx/Synth/SUBnote.h View File

@@ -59,6 +59,8 @@ class SUBnote:public SynthNote
int firstnumharmonics; //To keep track of the first note's numharmonics value, useful in legato mode. int firstnumharmonics; //To keep track of the first note's numharmonics value, useful in legato mode.
int start; //how the harmonics start int start; //how the harmonics start
float basefreq; float basefreq;
float BendAdjust;
float OffsetHz;
float panning; float panning;
Envelope *AmpEnvelope; Envelope *AmpEnvelope;
Envelope *FreqEnvelope; Envelope *FreqEnvelope;


+ 71
- 48
source/native-plugins/zynaddsubfx/UI/ADnoteUI.fl View File

@@ -87,9 +87,9 @@ class PhaseSlider {: {public Fl_Osc_TSlider}
Function {PhaseSlider(int x,int y, int w, int h, const char *label=0) Function {PhaseSlider(int x,int y, int w, int h, const char *label=0)
:Fl_Osc_TSlider(x,y,w,h,label)} {open :Fl_Osc_TSlider(x,y,w,h,label)} {open
} { code { } { code {
setRounding(1);
set_rounding(1);
reset_value=0; reset_value=0;
setTransform(180.0/64, 0);
set_transform([](float x){return 180.0f*x/64.0f;});
} {}} } {}}
Function {set_scope(Fl_Oscilloscope *newscope)} { Function {set_scope(Fl_Oscilloscope *newscope)} {
} { code { oscope = newscope; } {} } } { code { oscope = newscope; } {} }
@@ -127,7 +127,7 @@ class ADvoicelistitem {open : {public Fl_Osc_Group}
} { } {
Fl_Value_Slider voicevolume { Fl_Value_Slider voicevolume {
tooltip Volume xywh {132 5 115 20} type {Horz Knob} box NO_BOX labelsize 8 align 5 maximum 127 step 1 tooltip Volume xywh {132 5 115 20} type {Horz Knob} box NO_BOX labelsize 8 align 5 maximum 127 step 1
code1 {o->init("PVolume");}
code1 {o->init("PVolume"); o->reset_value=100;}
class Fl_Osc_VSlider class Fl_Osc_VSlider
} }
Fl_Check_Button voiceresonanceenabled { Fl_Check_Button voiceresonanceenabled {
@@ -137,12 +137,12 @@ class ADvoicelistitem {open : {public Fl_Osc_Group}
} }
Fl_Value_Slider voicelfofreq { Fl_Value_Slider voicelfofreq {
tooltip {Frequency LFO amount} xywh {542 5 115 20} type {Horz Knob} box NO_BOX labelsize 8 align 5 maximum 127 step 1 tooltip {Frequency LFO amount} xywh {542 5 115 20} type {Horz Knob} box NO_BOX labelsize 8 align 5 maximum 127 step 1
code0 {o->init("FreqLfo/Pintensity", 'i');}
code0 {o->init("FreqLfo/Pintensity", 'i');o->reset_value=40;}
class Fl_Osc_VSlider class Fl_Osc_VSlider
} }
Fl_Dial voicepanning { Fl_Dial voicepanning {
tooltip {Panning (leftmost is Random)} xywh {257 5 20 20} box ROUND_UP_BOX labelsize 10 align 4 maximum 127 step 1 tooltip {Panning (leftmost is Random)} xywh {257 5 20 20} box ROUND_UP_BOX labelsize 10 align 4 maximum 127 step 1
code0 {o->init("PPanning");}
code0 {o->init("PPanning");o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Group voiceoscil {open Fl_Group voiceoscil {open
@@ -214,6 +214,7 @@ else
case 0: case 0:
whitenoiselabel->hide(); whitenoiselabel->hide();
pinknoiselabel->hide(); pinknoiselabel->hide();
oscil->Overlay = NULL;
voiceresonanceenabled->activate(); voiceresonanceenabled->activate();
detunevalueoutput->activate(); detunevalueoutput->activate();
voicedetune->activate(); voicedetune->activate();
@@ -223,10 +224,12 @@ else
case 1: case 1:
whitenoiselabel->show(); whitenoiselabel->show();
pinknoiselabel->hide(); pinknoiselabel->hide();
oscil->Overlay = whitenoiselabel;
break; break;
default: default:
pinknoiselabel->show(); pinknoiselabel->show();
whitenoiselabel->hide(); whitenoiselabel->hide();
oscil->Overlay = pinknoiselabel;
} }


voiceresonanceenabled->deactivate(); voiceresonanceenabled->deactivate();
@@ -310,15 +313,15 @@ class ADvoiceUI {open : {public Fl_Group}
} { } {
Fl_Group voiceFMparametersgroup { Fl_Group voiceFMparametersgroup {
label MODULATOR open label MODULATOR open
xywh {530 5 230 580} box UP_FRAME color 48 labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
xywh {530 5 230 585} box UP_FRAME color 48 labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
} { } {
Fl_Group modfrequency { Fl_Group modfrequency {
label {Mod.FREQUENCY} label {Mod.FREQUENCY}
xywh {535 220 220 155} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
xywh {535 219 220 174} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
} { } {
Fl_Group voiceFMfreqenvgroup { Fl_Group voiceFMfreqenvgroup {
label {ADSynth Modulator - Frequency Envelope} label {ADSynth Modulator - Frequency Envelope}
xywh {540 300 210 70} box FLAT_BOX color 51 align 144
xywh {540 315 210 70} box FLAT_BOX color 51 align 144
code0 {o->init(ENV_ASR, osc_i, loc, "FMFreqEnvelope/");} code0 {o->init(ENV_ASR, osc_i, loc, "FMFreqEnvelope/");}
class EnvelopeUI class EnvelopeUI
} {} } {}
@@ -327,20 +330,20 @@ class ADvoiceUI {open : {public Fl_Group}
callback {if (o->value()==0) voiceFMfreqenvgroup->deactivate(); callback {if (o->value()==0) voiceFMfreqenvgroup->deactivate();
else voiceFMfreqenvgroup->activate(); else voiceFMfreqenvgroup->activate();
o->redraw();} o->redraw();}
tooltip {Forced Release} xywh {545 305 50 10} down_box DOWN_BOX labelfont 1 labelsize 11
tooltip {Forced Release} xywh {545 322 50 10} down_box DOWN_BOX labelfont 1 labelsize 11
code0 {o->init("PFMFreqEnvelopeEnabled");} code0 {o->init("PFMFreqEnvelopeEnabled");}
class Fl_Osc_Check class Fl_Osc_Check
} }
Fl_Counter {} { Fl_Counter {} {
label {Coarse Det.} label {Coarse Det.}
tooltip {Coarse Detune} xywh {685 280 60 15} labelsize 10 align 1 minimum -64 maximum 63 step 1 textfont 1 textsize 11
tooltip {Coarse Detune} xywh {685 295 60 15} labelsize 10 align 1 minimum -64 maximum 63 step 1 textfont 1 textsize 11
code0 {o->init("FMcoarsedetune");} code0 {o->init("FMcoarsedetune");}
code3 {o->lstep(10);} code3 {o->lstep(10);}
class Fl_Osc_Counter class Fl_Osc_Counter
} }
Fl_Counter {} { Fl_Counter {} {
label Octave label Octave
tooltip Octave xywh {625 280 45 15} type Simple labelsize 10 align 1 minimum -8 maximum 7 step 1 textfont 1 textsize 11
tooltip Octave xywh {625 295 45 15} type Simple labelsize 10 align 1 minimum -8 maximum 7 step 1 textfont 1 textsize 11
code0 {o->init("FMoctave");} code0 {o->init("FMoctave");}
class Fl_Osc_Counter class Fl_Osc_Counter
} }
@@ -352,18 +355,26 @@ o->redraw();}
} }
Fl_Value_Output fmdetunevalueoutput { Fl_Value_Output fmdetunevalueoutput {
label Detune label Detune
xywh {540 245 45 18} labelsize 8 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 8
xywh {540 247 45 18} labelsize 8 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 8
code0 {o->init("FMdetunevalue");} code0 {o->init("FMdetunevalue");}
class Fl_Osc_Output class Fl_Osc_Output
} }
Fl_Choice {} { Fl_Choice {} {
label {Detune Type} label {Detune Type}
callback {fmdetunevalueoutput->update();} open callback {fmdetunevalueoutput->update();} open
xywh {540 280 75 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
xywh {540 294 75 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
code0 {o->add("Default");o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");} code0 {o->add("Default");o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");}
code1 {o->init("PFMDetuneType");} code1 {o->init("PFMDetuneType");}
class Fl_Osc_Choice class Fl_Osc_Choice
} {} } {}
Fl_Check_Button {} {
label 440Hz
callback {if (o->value()==0) fixedfreqetdial->deactivate();
else fixedfreqetdial->activate();} selected
tooltip {Set the modulator base frequency to 440Hz} xywh {683 266 55 15} down_box DOWN_BOX labelfont 1 labelsize 11
code0 {o->init("PFMFixedFreq");}
class Fl_Osc_Check
}
} }
Fl_Group {} { Fl_Group {} {
label {Mod.AMPLITUDE} label {Mod.AMPLITUDE}
@@ -371,19 +382,19 @@ o->redraw();}
} { } {
Fl_Value_Slider {} { Fl_Value_Slider {} {
label Vol label Vol
tooltip Volume xywh {540 80 160 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 maximum 127 step 1
code0 {o->init("PFMVolume", 'i');}
tooltip Volume xywh {540 80 155 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 maximum 127 step 1
code0 {o->init("PFMVolume", 'i');o->reset_value=90;}
class Fl_Osc_VSlider class Fl_Osc_VSlider
} }
Fl_Value_Slider {} { Fl_Value_Slider {} {
label {V.Sns} label {V.Sns}
tooltip {Velocity Sensing Function (rightmost to disable)} xywh {540 100 160 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 maximum 127 step 1 tooltip {Velocity Sensing Function (rightmost to disable)} xywh {540 100 160 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 maximum 127 step 1
code0 {o->init("PFMVelocityScaleFunction");}
code0 {o->init("PFMVelocityScaleFunction");o->reset_value=64;}
class Fl_Osc_VSlider class Fl_Osc_VSlider
} }
Fl_Group voiceFMampenvgroup { Fl_Group voiceFMampenvgroup {
label {ADSynth Modulator - Amplitude Envelope} open label {ADSynth Modulator - Amplitude Envelope} open
xywh {540 145 205 70} box FLAT_BOX color 51 align 144
xywh {540 140 205 70} box FLAT_BOX color 51 align 144
code0 {o->init(//pars->VoicePar[nvoice].FMAmpEnvelope, code0 {o->init(//pars->VoicePar[nvoice].FMAmpEnvelope,
ENV_ADSR, osc_i, loc, "FMAmpEnvelope/");} ENV_ADSR, osc_i, loc, "FMAmpEnvelope/");}
class EnvelopeUI class EnvelopeUI
@@ -405,10 +416,10 @@ o->redraw();}
} }
} }
Fl_Group modoscil {open Fl_Group modoscil {open
xywh {535 365 220 220}
xywh {535 390 220 195}
} { } {
Fl_Group fmoscil {open Fl_Group fmoscil {open
xywh {535 440 220 140} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179
xywh {535 445 220 140} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179
code0 {fmoscil->base = loc; fmoscil->ext="FMSmp/";fmoscil->osc = osc_i;fmoscil->begin();} code0 {fmoscil->base = loc; fmoscil->ext="FMSmp/";fmoscil->osc = osc_i;fmoscil->begin();}
code1 {oscFM=new Fl_Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");} code1 {oscFM=new Fl_Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");}
code2 {//int nv=nvoice; if (pars->VoicePar[nvoice].PextFMoscil>=0) nv=pars->VoicePar[nvoice].PextFMoscil;} code2 {//int nv=nvoice; if (pars->VoicePar[nvoice].PextFMoscil>=0) nv=pars->VoicePar[nvoice].PextFMoscil;}
@@ -417,7 +428,7 @@ o->redraw();}
} {} } {}
Fl_Box {} { Fl_Box {} {
label {Mod.Oscillator} label {Mod.Oscillator}
xywh {535 375 155 20} labelfont 1 align 20
xywh {535 393 155 20} labelfont 1 align 20
} }
Fl_Button changeFMoscilbutton { Fl_Button changeFMoscilbutton {
label Change label Change
@@ -428,13 +439,13 @@ o->redraw();}
oscedit=new OscilEditor(true,loc+"FMSmp/", osc_i); oscedit=new OscilEditor(true,loc+"FMSmp/", osc_i);
else else
oscedit=new OscilEditor(true,loc+"../VoicePar"+to_s(extFMoscil->value()-1)+"/FMSmp/", osc_i);} oscedit=new OscilEditor(true,loc+"../VoicePar"+to_s(extFMoscil->value()-1)+"/FMSmp/", osc_i);}
xywh {700 380 55 15} box THIN_UP_BOX labelfont 1 labelsize 11
xywh {700 398 55 15} box THIN_UP_BOX labelfont 1 labelsize 11
code0 {(void)o;/*if (extFMoscil->value()>=0) o->labelcolor(FL_BLUE);*/} code0 {(void)o;/*if (extFMoscil->value()>=0) o->labelcolor(FL_BLUE);*/}
} }
Fl_Slider {} { Fl_Slider {} {
label Phase label Phase
xywh {645 415 105 15} type {Horz Knob} box NO_BOX labelsize 10 align 5 minimum -63 maximum 64 step 1
code0 { o->init("PFMoscilphase", 'i'); o->set_scope(oscFM); }
xywh {645 425 105 15} type {Horz Knob} box NO_BOX labelsize 10 align 5 minimum -63 maximum 64 step 1
code0 {o->init("PFMoscilphase", 'i'); o->set_scope(oscFM);}
class PhaseSlider class PhaseSlider
} }
Fl_Choice extFMoscil { Fl_Choice extFMoscil {
@@ -451,7 +462,7 @@ fmoscil->rebase(loc);
else else
fmoscil->rebase(loc+"../VoicePar"+to_s(o->value()-1)+"/"); fmoscil->rebase(loc+"../VoicePar"+to_s(o->value()-1)+"/");
voiceFMparametersgroup->redraw();} open voiceFMparametersgroup->redraw();} open
xywh {560 410 75 20} down_box BORDER_BOX labelsize 10 textfont 1 textsize 10
xywh {560 420 75 20} down_box BORDER_BOX labelsize 10 textfont 1 textsize 10
code0 {o->add("Internal");} code0 {o->add("Internal");}
code1 {char tmp[50]; for (int i=0;i<nvoice;i++) {sprintf(tmp,"ExtM.%2d",i+1);o->add(tmp);};} code1 {char tmp[50]; for (int i=0;i<nvoice;i++) {sprintf(tmp,"ExtM.%2d",i+1);o->add(tmp);};}
code3 {o->init("PextFMoscil",-1);} code3 {o->init("PextFMoscil",-1);}
@@ -506,8 +517,8 @@ o->redraw();}
xywh {80 80 100 20} labelfont 1 xywh {80 80 100 20} labelfont 1
} }
MenuItem {} { MenuItem {} {
label PITCH
xywh {90 90 100 20} labelfont 1 deactivate
label PWM
xywh {80 80 100 20} labelfont 1
} }
} }
Fl_Group {} { Fl_Group {} {
@@ -558,6 +569,18 @@ o->redraw();}
code3 {o->lstep(10);} code3 {o->lstep(10);}
class Fl_Osc_Counter class Fl_Osc_Counter
} }
Fl_Dial bendadjdial {
label Bend
tooltip {How the frequency varies according to the pitch wheel} xywh {60 270 15 15} box ROUND_UP_BOX labelsize 10 align 8 minimum -64 maximum 63 step 1
code0 {o->init("PBendAdjust");o->reset_value=24;o->set_transform([](float x){return x/24.0f;});o->set_rounding(2);}
class Fl_Osc_Dial
}
Fl_Dial offsethzdial {
label Offset
tooltip {Offset of frequency in Hz} xywh {110 270 15 15} box ROUND_UP_BOX labelsize 10 align 8 minimum -64 maximum 63 step 1
code0 {o->init("POffsetHz"); o->set_rounding(2); o->set_transform([](float x){x/=64; return 15*(x*sqrtf(fabsf(x)));});}
class Fl_Osc_Dial
}
Fl_Slider {} { Fl_Slider {} {
callback {detunevalueoutput->update();} callback {detunevalueoutput->update();}
tooltip {Fine Detune (cents)} xywh {58 287 392 13} type {Horz Knob} box NO_BOX minimum -8192 maximum 8191 step 1 tooltip {Fine Detune (cents)} xywh {58 287 392 13} type {Horz Knob} box NO_BOX minimum -8192 maximum 8191 step 1
@@ -580,7 +603,7 @@ o->redraw();}
} }
Fl_Dial fixedfreqetdial { Fl_Dial fixedfreqetdial {
label {Eq.T.} label {Eq.T.}
tooltip {How the frequency varies acording to the keyboard (leftmost for fixed frequency)} xywh {405 270 15 15} box ROUND_UP_BOX labelsize 10 align 8 maximum 127 step 1
tooltip {How the frequency varies according to the keyboard (leftmost for fixed frequency)} xywh {405 270 15 15} box ROUND_UP_BOX labelsize 10 align 8 maximum 127 step 1
code0 {o->init("PfixedfreqET");} code0 {o->init("PfixedfreqET");}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
@@ -654,7 +677,7 @@ voiceonbutton->redraw();} open
Fl_Dial {} { Fl_Dial {} {
label Vibrato label Vibrato
tooltip Vibrato xywh {364 555 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 tooltip Vibrato xywh {364 555 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
code0 {o->init("Unison_vibratto");}
code0 {o->init("Unison_vibratto");o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Choice {} { Fl_Choice {} {
@@ -668,7 +691,7 @@ voiceonbutton->redraw();} open
label {Frequency Spread} label {Frequency Spread}
callback {unisonspreadoutput->update();} callback {unisonspreadoutput->update();}
tooltip {Frequency Spread of the Unison} xywh {95 562 125 13} type {Horz Knob} box NO_BOX labelsize 12 align 1 maximum 127 step 1 value 64 tooltip {Frequency Spread of the Unison} xywh {95 562 125 13} type {Horz Knob} box NO_BOX labelsize 12 align 1 maximum 127 step 1 value 64
code0 {o->init("Unison_frequency_spread", 'i');}
code0 {o->init("Unison_frequency_spread", 'i');o->reset_value=60;}
class Fl_Osc_Slider class Fl_Osc_Slider
} }
Fl_Value_Output unisonspreadoutput { Fl_Value_Output unisonspreadoutput {
@@ -680,19 +703,19 @@ voiceonbutton->redraw();} open
Fl_Dial {} { Fl_Dial {} {
label {V.speed} label {V.speed}
tooltip {Vibrato Average Speed} xywh {406 555 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 tooltip {Vibrato Average Speed} xywh {406 555 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
code0 {o->init("Unison_vibratto_speed");}
code0 {o->init("Unison_vibratto_speed");o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Dial {} { Fl_Dial {} {
label {Ph.rand} label {Ph.rand}
tooltip {Phase randomness} xywh {280 555 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 tooltip {Phase randomness} xywh {280 555 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
code0 {o->init("Unison_phase_randomness");}
code0 {o->init("Unison_phase_randomness");o->reset_value=127;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Dial {} { Fl_Dial {} {
label Stereo label Stereo
tooltip {Stereo Spread} xywh {322 555 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 tooltip {Stereo Spread} xywh {322 555 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
code0 {o->init("Unison_stereo_spread");}
code0 {o->init("Unison_stereo_spread");o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
} }
@@ -704,13 +727,13 @@ voiceonbutton->redraw();} open
Fl_Value_Slider {} { Fl_Value_Slider {} {
label Vol label Vol
tooltip Volume xywh {10 60 160 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 maximum 127 step 1 tooltip Volume xywh {10 60 160 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 maximum 127 step 1
code0 {o->init("PVolume");}
code0 {o->init("PVolume");o->reset_value=100;}
class Fl_Osc_VSlider class Fl_Osc_VSlider
} }
Fl_Value_Slider {} { Fl_Value_Slider {} {
label {V.Sns} label {V.Sns}
tooltip {Velocity Sensing Function (rightmost to disable)} xywh {10 80 160 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 maximum 127 step 1 tooltip {Velocity Sensing Function (rightmost to disable)} xywh {10 80 160 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 maximum 127 step 1
code0 {o->init("PAmpVelocityScaleFunction");}
code0 {o->init("PAmpVelocityScaleFunction");o->reset_value=127;}
class Fl_Osc_VSlider class Fl_Osc_VSlider
} }
Fl_Group voiceampenvgroup { Fl_Group voiceampenvgroup {
@@ -723,7 +746,7 @@ voiceonbutton->redraw();} open
Fl_Dial {} { Fl_Dial {} {
label Pan label Pan
tooltip {Panning (leftmost is Random)} xywh {212 65 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 tooltip {Panning (leftmost is Random)} xywh {212 65 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
code0 {o->init("PPanning");}
code0 {o->init("PPanning");o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Check_Button {} { Fl_Check_Button {} {
@@ -806,9 +829,9 @@ o->redraw();}
} {} } {}
Fl_Choice {} { Fl_Choice {} {
callback {switch (o->value()) { callback {switch (o->value()) {
case 0: voicemodegroup->activate(); whitenoiselabel->hide(); pinknoiselabel->hide(); break;
case 1: voicemodegroup->deactivate(); whitenoiselabel->show(); pinknoiselabel->hide(); break;
default: voicemodegroup->deactivate(); whitenoiselabel->hide(); pinknoiselabel->show(); break;
case 0: voicemodegroup->activate(); whitenoiselabel->hide(); pinknoiselabel->hide(); osc->Overlay=NULL; break;
case 1: voicemodegroup->deactivate(); whitenoiselabel->show(); pinknoiselabel->hide(); osc->Overlay=whitenoiselabel; break;
default: voicemodegroup->deactivate(); whitenoiselabel->hide(); pinknoiselabel->show(); osc->Overlay=pinknoiselabel; break;
}} open }} open
tooltip {Oscillator Type (sound/noise)} xywh {5 515 65 20} down_box BORDER_BOX labelsize 10 textfont 1 textsize 10 tooltip {Oscillator Type (sound/noise)} xywh {5 515 65 20} down_box BORDER_BOX labelsize 10 textfont 1 textsize 10
code0 {o->init("Type");} code0 {o->init("Type");}
@@ -820,11 +843,11 @@ o->redraw();}
} }
MenuItem {} { MenuItem {} {
label White label White
xywh {15 15 100 20} labelfont 1 labelsize 11 labelcolor 55
xywh {15 15 100 20} labelfont 1 labelsize 11
} }
MenuItem {} { MenuItem {} {
label Pink label Pink
xywh {25 25 100 20} labelfont 1 labelsize 11 labelcolor 212
xywh {25 25 100 20} labelfont 1 labelsize 11
} }
} }
Fl_Check_Button bypassfiltercheckbutton { Fl_Check_Button bypassfiltercheckbutton {
@@ -1019,7 +1042,7 @@ class ADnoteUI {open : {public PresetsUI_}
voicelistitem[i]->refreshlist(); voicelistitem[i]->refreshlist();
};} };}
tooltip {Bandwidth - how the relative fine detune of the voice are changed} xywh {505 295 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 tooltip {Bandwidth - how the relative fine detune of the voice are changed} xywh {505 295 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
code0 {o->init("PBandwidth");}
code0 {o->init("PBandwidth");o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
} }
@@ -1030,25 +1053,25 @@ class ADnoteUI {open : {public PresetsUI_}
Fl_Value_Slider volume { Fl_Value_Slider volume {
label Vol label Vol
tooltip Volume xywh {10 30 160 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 maximum 127 step 1 tooltip Volume xywh {10 30 160 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 maximum 127 step 1
code0 {o->init("PVolume");}
code0 {o->init("PVolume");o->reset_value=90;}
class Fl_Osc_VSlider class Fl_Osc_VSlider
} }
Fl_Value_Slider vsns { Fl_Value_Slider vsns {
label {V.Sns} label {V.Sns}
tooltip {Velocity Sensing Function (rightmost to disable)} xywh {10 50 160 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 maximum 127 step 1 tooltip {Velocity Sensing Function (rightmost to disable)} xywh {10 50 160 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 maximum 127 step 1
code0 {o->init("PAmpVelocityScaleFunction");}
code0 {o->init("PAmpVelocityScaleFunction");o->reset_value=64;}
class Fl_Osc_VSlider class Fl_Osc_VSlider
} }
Fl_Dial pan { Fl_Dial pan {
label Pan label Pan
tooltip {Panning (leftmost is Random)} xywh {210 25 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 tooltip {Panning (leftmost is Random)} xywh {210 25 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
code0 {o->init("PPanning");}
code0 {o->init("PPanning");o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Dial {} { Fl_Dial {} {
label De-pop selected label De-pop selected
tooltip {Pop suppression} xywh {208 228 20 20} type Float labelsize 10 maximum 127 step 1 textfont 1 textsize 11 tooltip {Pop suppression} xywh {208 228 20 20} type Float labelsize 10 maximum 127 step 1 textfont 1 textsize 11
code0 {o->init("Fadein_adjustment");}
code0 {o->init("Fadein_adjustment");o->reset_value=20;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }


@@ -1061,19 +1084,19 @@ class ADnoteUI {open : {public PresetsUI_}
Fl_Dial pt { Fl_Dial pt {
label {P.t.} label {P.t.}
tooltip {Punch Time (duration)} xywh {108 237 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 tooltip {Punch Time (duration)} xywh {108 237 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
code0 {o->init("PPunchTime");}
code0 {o->init("PPunchTime");o->reset_value=60;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Dial pstc { Fl_Dial pstc {
label {P.Stc.} label {P.Stc.}
tooltip {Punch Stretch} xywh {138 237 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 tooltip {Punch Stretch} xywh {138 237 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
code0 {o->init("PPunchStretch");}
code0 {o->init("PPunchStretch");o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Dial pvel { Fl_Dial pvel {
label {P.Vel.} label {P.Vel.}
tooltip {Punch Velocity Sensing} xywh {168 237 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 tooltip {Punch Velocity Sensing} xywh {168 237 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
code0 {o->init("PPunchVelocitySensing");}
code0 {o->init("PPunchVelocitySensing");o->reset_value=72;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Group ampenv { Fl_Group ampenv {


+ 9
- 1
source/native-plugins/zynaddsubfx/UI/Fl_Osc_Slider.cpp View File

@@ -103,6 +103,7 @@ int Fl_Osc_Slider::handle(int ev, int X, int Y, int W, int H)
just_pushed = true; just_pushed = true;
mod_state = Fl::event_state() & MOD_MASK; mod_state = Fl::event_state() & MOD_MASK;
slow_state = 0; slow_state = 0;
start_pos = horizontal() ? Fl::event_x() : Fl::event_y();
handled = mod_state ? 1 : Fl_Slider::handle(ev, X, Y, W, H); handled = mod_state ? 1 : Fl_Slider::handle(ev, X, Y, W, H);
break; break;
case FL_MOUSEWHEEL: case FL_MOUSEWHEEL:
@@ -146,8 +147,13 @@ int Fl_Osc_Slider::handle(int ev, int X, int Y, int W, int H)
case FL_DRAG: { case FL_DRAG: {
old_mod_state = mod_state; old_mod_state = mod_state;
mod_state = Fl::event_state() & MOD_MASK; mod_state = Fl::event_state() & MOD_MASK;
if (slow_state == 0 && mod_state == 0)
if (slow_state == 0 && mod_state == 0) {
int delta = (horizontal() ? Fl::event_x() : Fl::event_y())
- start_pos;
if (delta < -1 || delta > 1)
Fl::event_clicks(0);
return Fl_Slider::handle(ev, X, Y, W, H); return Fl_Slider::handle(ev, X, Y, W, H);
}


if (mod_state != 0) { if (mod_state != 0) {
slow_state = 1; slow_state = 1;
@@ -185,6 +191,8 @@ int Fl_Osc_Slider::handle(int ev, int X, int Y, int W, int H)


int delta = (horizontal() ? Fl::event_x() : Fl::event_y()) int delta = (horizontal() ? Fl::event_x() : Fl::event_y())
- start_pos; - start_pos;
if (delta < -1 || delta > 1)
Fl::event_clicks(0);
float new_value; float new_value;
if (slow_state == 1) { if (slow_state == 1) {
new_value = old_value + delta / denominator; new_value = old_value + delta / denominator;


+ 3
- 5
source/native-plugins/zynaddsubfx/UI/Fl_Osc_TSlider.H View File

@@ -10,12 +10,10 @@ class Fl_Osc_TSlider:public Fl_Osc_Slider
Fl_Osc_TSlider(int x, int y, int w, int h, const char *label = 0); Fl_Osc_TSlider(int x, int y, int w, int h, const char *label = 0);
~Fl_Osc_TSlider(); ~Fl_Osc_TSlider();
int handle(int event); int handle(int event);
void setTransform(float scale = 1.0, float offset = 0.0);
float transform(float x);
void setRounding(unsigned int digits = 0);
void set_transform(float (*transformer)(float));
void set_rounding(unsigned int digits = 0);
private: private:
class TipWin * tipwin; class TipWin * tipwin;
float value_offset;
float value_scale;
float (*transform)(float);
}; };
#endif #endif

+ 10
- 12
source/native-plugins/zynaddsubfx/UI/Fl_Osc_TSlider.cpp View File

@@ -3,15 +3,19 @@
//Copyright (c) 2015 Christopher Oliver //Copyright (c) 2015 Christopher Oliver
//License: GNU GPL version 2 or later //License: GNU GPL version 2 or later


static float identity(float value)
{
return value;
}


Fl_Osc_TSlider::Fl_Osc_TSlider(int x, int y, int w, int h, const char *label) Fl_Osc_TSlider::Fl_Osc_TSlider(int x, int y, int w, int h, const char *label)
:Fl_Osc_Slider(x, y, w, h, label), value_offset(0.0), value_scale(1.0)
:Fl_Osc_Slider(x, y, w, h, label), transform(identity)
{ {
Fl_Group *save = Fl_Group::current(); Fl_Group *save = Fl_Group::current();
tipwin = new TipWin(); tipwin = new TipWin();
tipwin->hide(); tipwin->hide();
Fl_Group::current(save); Fl_Group::current(save);
tipwin->setRounding();
tipwin->set_rounding();
} }


Fl_Osc_TSlider::~Fl_Osc_TSlider() Fl_Osc_TSlider::~Fl_Osc_TSlider()
@@ -20,9 +24,9 @@ Fl_Osc_TSlider::~Fl_Osc_TSlider()
delete tipwin; delete tipwin;
} }


void Fl_Osc_TSlider::setRounding(unsigned int digits)
void Fl_Osc_TSlider::set_rounding(unsigned int digits)
{ {
tipwin->setRounding(digits);
tipwin->set_rounding(digits);
} }




@@ -53,13 +57,7 @@ int Fl_Osc_TSlider::handle(int event)
return super; return super;
} }


void Fl_Osc_TSlider::setTransform(float scale, float offset)
{
value_offset = offset;
value_scale = scale;
}

float Fl_Osc_TSlider::transform(float x)
void Fl_Osc_TSlider::set_transform(float (*transformer)(float))
{ {
return value_scale * x + value_offset;
transform = transformer;
} }

+ 6
- 1
source/native-plugins/zynaddsubfx/UI/Fl_Oscilloscope.h View File

@@ -17,7 +17,8 @@ class Fl_Oscilloscope : public Fl_Box, public Fl_Osc_Widget
{ {
public: public:
Fl_Oscilloscope(int x,int y, int w, int h, const char *label=0) Fl_Oscilloscope(int x,int y, int w, int h, const char *label=0)
:Fl_Box(x,y,w,h,label), Fl_Osc_Widget(this), smps(0), oscilsize(0)
:Fl_Box(x,y,w,h,label), Fl_Osc_Widget(this), smps(0), oscilsize(0),
Overlay(NULL)
{ {
phase=64; phase=64;
box(FL_FLAT_BOX); box(FL_FLAT_BOX);
@@ -129,6 +130,8 @@ class Fl_Oscilloscope : public Fl_Box, public Fl_Osc_Widget
fl_rect(ox-1,oy-1,lx+2,ly+2); fl_rect(ox-1,oy-1,lx+2,ly+2);


fl_line_style(FL_SOLID,0); fl_line_style(FL_SOLID,0);
if (Overlay)
Overlay->redraw();
} }


//allows UI to manipuate phase of displayed waveform //allows UI to manipuate phase of displayed waveform
@@ -149,4 +152,6 @@ class Fl_Oscilloscope : public Fl_Box, public Fl_Osc_Widget
float *smps; float *smps;
int oscilsize; int oscilsize;
Fl_Color bkgnd; Fl_Color bkgnd;
public:
Fl_Box *Overlay;
}; };

+ 5
- 1
source/native-plugins/zynaddsubfx/UI/LFOUI.fl View File

@@ -131,10 +131,14 @@ hide();} {}
label E2dn label E2dn
xywh {70 70 100 20} labelfont 1 labelsize 10 xywh {70 70 100 20} labelfont 1 labelsize 10
} }
MenuItem {} {
label RND
xywh {80 80 100 20} labelfont 1 labelsize 10
}
} }
Fl_Check_Button continous { Fl_Check_Button continous {
label {C.} label {C.}
tooltip {Continous LFO} xywh {165 35 15 15} down_box DOWN_BOX labelsize 10 align 2
tooltip {Continuous LFO} xywh {165 35 15 15} down_box DOWN_BOX labelsize 10 align 2
code0 {o->init("Pcontinous");} code0 {o->init("Pcontinous");}
class Fl_Osc_Check class Fl_Osc_Check
} }


+ 6
- 6
source/native-plugins/zynaddsubfx/UI/MasterUI.fl View File

@@ -148,7 +148,7 @@ bankui->show();}
} }
Fl_Slider partvolume { Fl_Slider partvolume {
xywh {10 65 30 110} type {Vert Knob} box NO_BOX minimum 127 maximum 0 step 1 value 127 xywh {10 65 30 110} type {Vert Knob} box NO_BOX minimum 127 maximum 0 step 1 value 127
code0 {o->init("Pvolume", 'i');}
code0 {o->init("Pvolume", 'i');o->reset_value=96;}
class Fl_Osc_TSlider class Fl_Osc_TSlider
} }
Fl_Dial partpanning { Fl_Dial partpanning {
@@ -508,7 +508,7 @@ if (fl_choice("The file *might* exist. \\nOverwrite it?","No","Yes",NULL)) {
Fl_Dial mastervolumedial { Fl_Dial mastervolumedial {
label {Master Volume} label {Master Volume}
tooltip {Master Volume} xywh {15 32 55 55} box ROUND_UP_BOX labelsize 9 align 130 maximum 127 step 1 tooltip {Master Volume} xywh {15 32 55 55} box ROUND_UP_BOX labelsize 9 align 130 maximum 127 step 1
code2 {o->init("volume"); o->selection_color(FL_RED);}
code2 {o->init("volume"); o->selection_color(FL_RED); o->reset_value=80;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Counter masterkeyshiftcounter { Fl_Counter masterkeyshiftcounter {
@@ -856,7 +856,7 @@ globalfinedetuneslider->do_callback();}
Fl_Dial globalfinedetuneslider { Fl_Dial globalfinedetuneslider {
label {Fine Detune} label {Fine Detune}
tooltip {global fine detune} xywh {90 68 45 45} box ROUND_UP_BOX labelsize 9 align 130 maximum 127 step 1 value 64 tooltip {global fine detune} xywh {90 68 45 45} box ROUND_UP_BOX labelsize 9 align 130 maximum 127 step 1 value 64
code0 {o->init("microtonal/Pglobalfinedetune");}
code0 {o->init("microtonal/Pglobalfinedetune");o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
} }
@@ -1102,7 +1102,7 @@ virkeys->midich=(int) o->value();} open
} {} } {}
Fl_Dial partvolume { Fl_Dial partvolume {
xywh {135 95 45 40} labelsize 9 maximum 127 step 1 xywh {135 95 45 40} labelsize 9 maximum 127 step 1
code0 {o->init("Pvolume");}
code0 {o->init("Pvolume"); o->reset_value=96;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Box {} { Fl_Box {} {
@@ -1422,7 +1422,7 @@ pthread_mutex_unlock(&master->mutex);*/}
Fl_Dial simplemastervolumedial { Fl_Dial simplemastervolumedial {
label {Master Volume} label {Master Volume}
tooltip {Master Volume} xywh {10 35 40 40} box ROUND_UP_BOX labelfont 1 labelsize 11 align 130 maximum 127 step 1 tooltip {Master Volume} xywh {10 35 40 40} box ROUND_UP_BOX labelfont 1 labelsize 11 align 130 maximum 127 step 1
code0 {o->init("Pvolume");}
code0 {o->init("Pvolume");o->reset_value=80;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Counter simplemasterkeyshiftcounter { Fl_Counter simplemasterkeyshiftcounter {
@@ -1448,7 +1448,7 @@ simpleglobalfinedetuneslider->do_callback();}
Fl_Dial simpleglobalfinedetuneslider { Fl_Dial simpleglobalfinedetuneslider {
label {Fine Detune} label {Fine Detune}
tooltip {global fine detune} xywh {80 50 30 30} box ROUND_UP_BOX labelsize 11 align 130 maximum 127 step 1 value 64 tooltip {global fine detune} xywh {80 50 30 30} box ROUND_UP_BOX labelsize 11 align 130 maximum 127 step 1 value 64
code0 {o->init("microtonal/Pglobalfinedetune");}
code0 {o->init("microtonal/Pglobalfinedetune");o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Counter simplenpartcounter { Fl_Counter simplenpartcounter {


+ 15
- 15
source/native-plugins/zynaddsubfx/UI/OscilGenUI.fl View File

@@ -195,12 +195,12 @@ make_window();
mag->osc = osc; mag->osc = osc;
mag->loc = loc; mag->loc = loc;
mag->reset_value = 63; mag->reset_value = 63;
mag->setTransform(-1, 63);
mag->set_transform([](float x){return 63.0f - x;});
phase->osc = osc; phase->osc = osc;
phase->loc = loc; phase->loc = loc;
phase->reset_value = 64; phase->reset_value = 64;
phase->setRounding(1);
phase->setTransform(-180.0/64, 180.0);
phase->set_rounding(1);
phase->set_transform([](float x){return 180*(1 - x/64.0f);});


osc->createLink(loc+"magnitude"+to_s(n), mag); osc->createLink(loc+"magnitude"+to_s(n), mag);
osc->createLink(loc+"phase"+to_s(n), phase); osc->createLink(loc+"phase"+to_s(n), phase);
@@ -303,7 +303,7 @@ class OscilEditor {open : {public PresetsUI_}
} }
Fl_Dial hrnddial { Fl_Dial hrnddial {
tooltip {Oscillator's spectrum adjust parameter} xywh {345 285 18 18} maximum 127 step 1 tooltip {Oscillator's spectrum adjust parameter} xywh {345 285 18 18} maximum 127 step 1
code0 {o->init("Pamprandpower");}
code0 {o->init("Pamprandpower");o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
} }
@@ -485,19 +485,19 @@ redrawoscil();}
Fl_Dial bfmodpar1 { Fl_Dial bfmodpar1 {
callback {redrawoscil();} callback {redrawoscil();}
tooltip {Oscillator's modulation parameter 1} xywh {664 286 15 15} maximum 127 step 1 tooltip {Oscillator's modulation parameter 1} xywh {664 286 15 15} maximum 127 step 1
code0 {o->init("Pbasefuncmodulationpar1");}
code0 {o->init("Pbasefuncmodulationpar1");o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Dial bfmodpar2 { Fl_Dial bfmodpar2 {
callback {redrawoscil();} callback {redrawoscil();}
tooltip {Oscillator's modulation parameter 2} xywh {684 286 15 15} maximum 127 step 1 tooltip {Oscillator's modulation parameter 2} xywh {684 286 15 15} maximum 127 step 1
code0 {o->init("Pbasefuncmodulationpar2");}
code0 {o->init("Pbasefuncmodulationpar2");o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Dial bfmodpar3 { Fl_Dial bfmodpar3 {
callback {redrawoscil();} selected callback {redrawoscil();} selected
tooltip {Oscillator's modulation parameter 3} xywh {704 286 15 15} maximum 127 step 1 tooltip {Oscillator's modulation parameter 3} xywh {704 286 15 15} maximum 127 step 1
code0 {o->init("Pbasefuncmodulationpar3");}
code0 {o->init("Pbasefuncmodulationpar3");o->reset_value=32;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
} }
@@ -718,7 +718,7 @@ redrawoscil();}
Fl_Dial filtervalue1 { Fl_Dial filtervalue1 {
callback {redrawoscil();} callback {redrawoscil();}
tooltip {Oscillator's filter parameter1} xywh {372 318 20 20} maximum 127 step 1 tooltip {Oscillator's filter parameter1} xywh {372 318 20 20} maximum 127 step 1
code0 {o->init("Pfilterpar1");}
code0 {o->init("Pfilterpar1");o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Check_Button filterpref { Fl_Check_Button filterpref {
@@ -729,7 +729,7 @@ redrawoscil();}
Fl_Dial filtervalue2 { Fl_Dial filtervalue2 {
callback {redrawoscil();} callback {redrawoscil();}
tooltip {Oscillator's filter parameter2} xywh {395 318 20 20} maximum 127 step 1 tooltip {Oscillator's filter parameter2} xywh {395 318 20 20} maximum 127 step 1
code0 {o->init("Pfilterpar2");}
code0 {o->init("Pfilterpar2");o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
} }
@@ -763,7 +763,7 @@ redrawoscil();}
Fl_Dial sadjpar { Fl_Dial sadjpar {
callback {redrawoscil();} callback {redrawoscil();}
tooltip {Oscillator's spectrum adjust parameter} xywh {700 318 20 20} maximum 127 step 1 tooltip {Oscillator's spectrum adjust parameter} xywh {700 318 20 20} maximum 127 step 1
code0 {o->init("Psapar");}
code0 {o->init("Psapar");o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
} }
@@ -843,14 +843,14 @@ redrawoscil();}
label pow label pow
callback {redrawoscil();} callback {redrawoscil();}
tooltip {Adaptive harmonics power} xywh {705 465 25 25} labelsize 10 maximum 200 step 1 tooltip {Adaptive harmonics power} xywh {705 465 25 25} labelsize 10 maximum 200 step 1
code0 {o->init("Padaptiveharmonicspower");}
code0 {o->init("Padaptiveharmonicspower");o->reset_value=100;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Dial adhrbf { Fl_Dial adhrbf {
label baseF label baseF
callback {redrawoscil();} callback {redrawoscil();}
tooltip {Adaptive harmonics base frequency} xywh {675 465 25 25} labelsize 10 maximum 255 step 1 tooltip {Adaptive harmonics base frequency} xywh {675 465 25 25} labelsize 10 maximum 255 step 1
code0 {o->init("Padaptiveharmonicsbasefreq");}
code0 {o->init("Padaptiveharmonicsbasefreq");o->reset_value=128;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Slider adhrpar { Fl_Slider adhrpar {
@@ -890,19 +890,19 @@ redrawoscil();}
Fl_Dial modpar1 { Fl_Dial modpar1 {
callback {redrawoscil();} callback {redrawoscil();}
tooltip {Oscillator's modulation parameter 1} xywh {535 320 15 15} maximum 127 step 1 tooltip {Oscillator's modulation parameter 1} xywh {535 320 15 15} maximum 127 step 1
code0 {o->init("Pmodulationpar1");}
code0 {o->init("Pmodulationpar1");o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Dial modpar2 { Fl_Dial modpar2 {
callback {redrawoscil();} callback {redrawoscil();}
tooltip {Oscillator's modulation parameter 2} xywh {555 320 15 15} maximum 127 step 1 tooltip {Oscillator's modulation parameter 2} xywh {555 320 15 15} maximum 127 step 1
code0 {o->init("Pmodulationpar2");}
code0 {o->init("Pmodulationpar2");o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Dial modpar3 { Fl_Dial modpar3 {
callback {redrawoscil();} callback {redrawoscil();}
tooltip {Oscillator's modulation parameter 3} xywh {575 320 15 15} maximum 127 step 1 tooltip {Oscillator's modulation parameter 3} xywh {575 320 15 15} maximum 127 step 1
code0 {o->init("Pmodulationpar3");}
code0 {o->init("Pmodulationpar3");o->reset_value=32;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
} }


+ 31
- 19
source/native-plugins/zynaddsubfx/UI/PADnoteUI.fl View File

@@ -136,7 +136,7 @@ initialized = true;} {}
callback {if(hpui) hpui->update(); callback {if(hpui) hpui->update();
cbwidget->do_callback();} cbwidget->do_callback();}
xywh {20 75 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 xywh {20 75 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
code2 {o->init("Php.base.par1");}
code2 {o->init("Php.base.par1");o->reset_value=80;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Choice hpbasetype { Fl_Choice hpbasetype {
@@ -182,7 +182,7 @@ cbwidget->do_callback();}
callback {hpui->update(); callback {hpui->update();
cbwidget->do_callback();} cbwidget->do_callback();}
xywh {40 115 20 20} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 xywh {40 115 20 20} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
code0 {o->init("Php.modulator.freq");}
code0 {o->init("Php.modulator.freq");o->reset_value=30;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Group {} { Fl_Group {} {
@@ -244,7 +244,7 @@ cbwidget->do_callback();}}
callback {hpui->update(); callback {hpui->update();
cbwidget->do_callback();} cbwidget->do_callback();}
xywh {15 235 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 xywh {15 235 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
code0 {o->init("Php.amp.par1");}
code0 {o->init("Php.amp.par1");o->reset_value=80;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Dial hpamppar2 { Fl_Dial hpamppar2 {
@@ -252,7 +252,7 @@ cbwidget->do_callback();}
callback {hpui->update(); callback {hpui->update();
cbwidget->do_callback();} cbwidget->do_callback();}
xywh {55 235 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 xywh {55 235 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
code0 {o->init("Php.amp.par2");}
code0 {o->init("Php.amp.par2");o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
} }
@@ -293,7 +293,7 @@ cbwidget->do_callback();}}
callback {hpui->update(); callback {hpui->update();
cbwidget->do_callback();} cbwidget->do_callback();}
xywh {65 115 20 20} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 xywh {65 115 20 20} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
code0 {o->init("Php.width");}
code0 {o->init("Php.width");o->reset_value=127;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
} }
@@ -328,7 +328,7 @@ resui->setcbwidget(cbwidget,applybutton);}
label BandWidth label BandWidth
callback {o->oscWrite("bandwidthvalue");cbwidget->do_callback();} callback {o->oscWrite("bandwidthvalue");cbwidget->do_callback();}
xywh {15 295 35 35} box ROUND_UP_BOX labelsize 10 maximum 1000 step 1 xywh {15 295 35 35} box ROUND_UP_BOX labelsize 10 maximum 1000 step 1
code0 {o->init("Pbandwidth");}
code0 {o->init("Pbandwidth");o->reset_value=500;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Value_Output bwcents { Fl_Value_Output bwcents {
@@ -387,7 +387,7 @@ cbwidget->do_callback();}}
hpui->update(); hpui->update();
cbwidget->do_callback();} cbwidget->do_callback();}
xywh {425 310 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 xywh {425 310 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
code0 {o->init("Phrpos.par1");}
code0 {o->init("Phrpos.par1");o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Dial hrpospar2 { Fl_Dial hrpospar2 {
@@ -395,7 +395,7 @@ cbwidget->do_callback();}
callback {opui->update(); callback {opui->update();
cbwidget->do_callback();} cbwidget->do_callback();}
xywh {460 310 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 xywh {460 310 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
code0 {o->init("Phrpos.par2");}
code0 {o->init("Phrpos.par2");o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Dial hrpospar3 { Fl_Dial hrpospar3 {
@@ -651,7 +651,7 @@ cbwidget->do_callback();}
xywh {125 125 100 20} labelfont 1 labelsize 11 xywh {125 125 100 20} labelfont 1 labelsize 11
} }
MenuItem {} { MenuItem {} {
label Continous
label Continuous
xywh {115 115 100 20} labelfont 1 labelsize 11 xywh {115 115 100 20} labelfont 1 labelsize 11
} }
} }
@@ -691,13 +691,13 @@ cbwidget->do_callback();}
} {} } {}
Fl_Slider detune { Fl_Slider detune {
callback {o->oscWrite("detunevalue");} callback {o->oscWrite("detunevalue");}
tooltip {Fine Detune (cents)} xywh {60 295 295 15} type {Horz Knob} box NO_BOX minimum -8192 maximum 8191 step 1
tooltip {Fine Detune (cents)} xywh {60 296 295 15} type {Horz Knob} box NO_BOX minimum -8192 maximum 8191 step 1
code0 {o->init("PDetune", 'i');} code0 {o->init("PDetune", 'i');}
class Fl_Osc_Slider class Fl_Osc_Slider
} }
Fl_Value_Output detunevalueoutput { Fl_Value_Output detunevalueoutput {
label Detune label Detune
xywh {12 295 45 15} labelsize 10 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 10
xywh {12 296 45 15} labelsize 10 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 10
code0 {o->init("detunevalue");} code0 {o->init("detunevalue");}
class Fl_Osc_Output class Fl_Osc_Output
} }
@@ -709,6 +709,18 @@ cbwidget->do_callback();}
code1 {o->init("PDetuneType",1);} code1 {o->init("PDetuneType",1);}
class Fl_Osc_Choice class Fl_Osc_Choice
} {} } {}
Fl_Dial bendadjustdial {
label Bend
tooltip {How the frequency varies according to the pitch wheel} xywh {60 278 15 15} box ROUND_UP_BOX labelsize 10 align 8 minimum -64 maximum 63 step 1
code0 {o->init("PBendAdjust");o->reset_value=24;o->set_transform([](float x){return x/24.0f;});o->set_rounding(2);}
class Fl_Osc_Dial
}
Fl_Dial offsethzdial {
label Offset
tooltip {Offset of frequency in Hz} xywh {110 278 15 15} box ROUND_UP_BOX labelsize 10 align 8 minimum -64 maximum 63 step 1
code0 {o->init("POffsetHz"); o->set_rounding(2); o->set_transform([](float x){x/=64; return 15*(x*sqrtf(fabsf(x)));});}
class Fl_Osc_Dial
}
Fl_Check_Button hz440 { Fl_Check_Button hz440 {
label 440Hz label 440Hz
callback {if (o->value()==0) fixedfreqetdial->deactivate(); callback {if (o->value()==0) fixedfreqetdial->deactivate();
@@ -719,7 +731,7 @@ cbwidget->do_callback();}
} }
Fl_Dial fixedfreqetdial { Fl_Dial fixedfreqetdial {
label {Eq.T.} label {Eq.T.}
tooltip {How the frequency varies acording to the keyboard (leftmost for fixed frequency)} xywh {420 295 15 15} box ROUND_UP_BOX labelsize 10 align 8 maximum 127 step 1
tooltip {How the frequency varies according to the keyboard (leftmost for fixed frequency)} xywh {420 295 15 15} box ROUND_UP_BOX labelsize 10 align 8 maximum 127 step 1
code0 {o->init("PfixedfreqET");} code0 {o->init("PfixedfreqET");}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
@@ -731,25 +743,25 @@ cbwidget->do_callback();}
Fl_Value_Slider volume { Fl_Value_Slider volume {
label Vol label Vol
tooltip Volume xywh {10 50 160 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 maximum 127 step 1 tooltip Volume xywh {10 50 160 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 maximum 127 step 1
code0 {o->init("PVolume", 'i');}
code0 {o->init("PVolume", 'i');o->reset_value=90;}
class Fl_Osc_VSlider class Fl_Osc_VSlider
} }
Fl_Value_Slider vsns { Fl_Value_Slider vsns {
label {V.Sns} label {V.Sns}
tooltip {Velocity Sensing Function (rightmost to disable)} xywh {10 70 160 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 maximum 127 step 1 tooltip {Velocity Sensing Function (rightmost to disable)} xywh {10 70 160 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 maximum 127 step 1
code0 {o->init("PAmpVelocityScaleFunction");}
code0 {o->init("PAmpVelocityScaleFunction");o->reset_value=64;}
class Fl_Osc_VSlider class Fl_Osc_VSlider
} }
Fl_Dial pan { Fl_Dial pan {
label Pan label Pan
tooltip {Panning (leftmost is Random)} xywh {210 45 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 tooltip {Panning (leftmost is Random)} xywh {210 45 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
code0 {o->init("PPanning");}
code0 {o->init("PPanning");o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Dial {} { Fl_Dial {} {
label De-pop selected label De-pop selected
tooltip {Pop suppression} xywh {208 238 20 20} type Float labelsize 10 maximum 127 step 1 textfont 1 textsize 11 tooltip {Pop suppression} xywh {208 238 20 20} type Float labelsize 10 maximum 127 step 1 textfont 1 textsize 11
code0 {o->init("Fadein_adjustment");}
code0 {o->init("Fadein_adjustment");o->reset_value=20;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Dial pstr { Fl_Dial pstr {
@@ -761,19 +773,19 @@ cbwidget->do_callback();}
Fl_Dial pt { Fl_Dial pt {
label {P.t.} label {P.t.}
tooltip {Punch Time (duration)} xywh {108 247 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 tooltip {Punch Time (duration)} xywh {108 247 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
code0 {o->init("PPunchTime");}
code0 {o->init("PPunchTime");o->reset_value=60;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Dial pstc { Fl_Dial pstc {
label {P.Stc.} label {P.Stc.}
tooltip {Punch Stretch} xywh {138 247 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 tooltip {Punch Stretch} xywh {138 247 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
code0 {o->init("PPunchStretch");}
code0 {o->init("PPunchStretch");o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Dial pvel { Fl_Dial pvel {
label {P.Vel.} label {P.Vel.}
tooltip {Punch Velocity Sensing} xywh {168 247 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 tooltip {Punch Velocity Sensing} xywh {168 247 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
code0 {o->init("PPunchVelocitySensing");}
code0 {o->init("PPunchVelocitySensing");o->reset_value=72;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Group ampenv { Fl_Group ampenv {


+ 15
- 15
source/native-plugins/zynaddsubfx/UI/PartUI.fl View File

@@ -279,7 +279,7 @@ class PartUI {open : {public Fl_Osc_Group}
Fl_Dial {} { Fl_Dial {} {
label Pan label Pan
xywh {50 40 25 25} box ROUND_UP_BOX labelsize 11 maximum 127 step 1 xywh {50 40 25 25} box ROUND_UP_BOX labelsize 11 maximum 127 step 1
code0 {o->init("Ppanning");}
code0 {o->init("Ppanning"); o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Counter {} { Fl_Counter {} {
@@ -344,19 +344,19 @@ if (event==FL_RIGHT_MOUSE){
Fl_Dial {} { Fl_Dial {} {
label Volume label Volume
tooltip {Part Volume} xywh {10 35 30 30} box ROUND_UP_BOX labelsize 11 maximum 127 step 1 tooltip {Part Volume} xywh {10 35 30 30} box ROUND_UP_BOX labelsize 11 maximum 127 step 1
code0 {o->init("Pvolume");}
code0 {o->init("Pvolume"); o->reset_value=96;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Dial {} { Fl_Dial {} {
label {Vel.Ofs.} label {Vel.Ofs.}
tooltip {Velocity Offset} xywh {135 40 25 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 tooltip {Velocity Offset} xywh {135 40 25 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
code0 {o->init("Pveloffs");}
code0 {o->init("Pveloffs"); o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Dial {} { Fl_Dial {} {
label {Vel.Sns.} label {Vel.Sns.}
tooltip {Velocity Sensing Function} xywh {95 40 25 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 tooltip {Velocity Sensing Function} xywh {95 40 25 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
code0 {o->init("Pvelsns");}
code0 {o->init("Pvelsns"); o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Button {} { Fl_Button {} {
@@ -453,31 +453,31 @@ if (event==FL_RIGHT_MOUSE){
Fl_Dial {} { Fl_Dial {} {
label PanDpth label PanDpth
tooltip {Panning Depth} xywh {10 55 30 30} labelsize 10 maximum 127 step 1 tooltip {Panning Depth} xywh {10 55 30 30} labelsize 10 maximum 127 step 1
code0 {o->init("panning.depth");}
code0 {o->init("panning.depth");o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Dial {} { Fl_Dial {} {
label FltCut label FltCut
tooltip {Filter Cutoff depth} xywh {90 55 30 30} labelsize 10 maximum 127 step 1 tooltip {Filter Cutoff depth} xywh {90 55 30 30} labelsize 10 maximum 127 step 1
code0 {o->init("filtercutoff.depth");}
code0 {o->init("filtercutoff.depth");o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Dial {} { Fl_Dial {} {
label FltQ label FltQ
tooltip {Filter Q depth} xywh {50 55 30 30} labelsize 10 maximum 127 step 1 tooltip {Filter Q depth} xywh {50 55 30 30} labelsize 10 maximum 127 step 1
code0 {o->init("filterq.depth");}
code0 {o->init("filterq.depth");o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Dial {} { Fl_Dial {} {
label BwDpth label BwDpth
tooltip {BandWidth depth} xywh {125 10 30 30} labelsize 10 maximum 127 step 1 tooltip {BandWidth depth} xywh {125 10 30 30} labelsize 10 maximum 127 step 1
code0 {o->init("bandwidth.depth");}
code0 {o->init("bandwidth.depth");o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Dial {} { Fl_Dial {} {
label ModWh label ModWh
tooltip {Modulation Wheel depth} xywh {50 10 30 30} labelsize 10 maximum 127 step 1 tooltip {Modulation Wheel depth} xywh {50 10 30 30} labelsize 10 maximum 127 step 1
code0 {o->init("modwheel.depth");}
code0 {o->init("modwheel.depth");o->reset_value=80;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Check_Button benddir { Fl_Check_Button benddir {
@@ -551,7 +551,7 @@ else {bendrng->oscMove("pitchwheel.bendrange");}}
Fl_Dial {} { Fl_Dial {} {
label time label time
tooltip {Portamento time} xywh {285 60 25 25} labelsize 10 maximum 127 step 1 tooltip {Portamento time} xywh {285 60 25 25} labelsize 10 maximum 127 step 1
code0 {o->init("portamento.time");}
code0 {o->init("portamento.time");o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Counter {} { Fl_Counter {} {
@@ -573,19 +573,19 @@ else {bendrng->oscMove("pitchwheel.bendrange");}}
Fl_Dial {} { Fl_Dial {} {
label {t.dn/up} label {t.dn/up}
tooltip {Portamento time stretch (up/down)} xywh {315 60 25 25} labelsize 10 maximum 127 step 1 tooltip {Portamento time stretch (up/down)} xywh {315 60 25 25} labelsize 10 maximum 127 step 1
code0 {o->init("portamento.updowntimestretch");}
code0 {o->init("portamento.updowntimestretch");o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Dial propta { Fl_Dial propta {
label {Prp.Rate} label {Prp.Rate}
tooltip {Distance required to double change from nonpropotinal portamento time} xywh {405 20 25 25} labelsize 9 maximum 127 step 1 tooltip {Distance required to double change from nonpropotinal portamento time} xywh {405 20 25 25} labelsize 9 maximum 127 step 1
code0 {o->init("portamento.propRate");}
code0 {o->init("portamento.propRate");o->reset_value=80;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Dial proptb { Fl_Dial proptb {
label {Prp.Dpth} label {Prp.Dpth}
tooltip {The difference from nonproportinal portamento} xywh {405 60 25 25} labelsize 9 maximum 127 step 1 tooltip {The difference from nonproportinal portamento} xywh {405 60 25 25} labelsize 9 maximum 127 step 1
code0 {o->init("portamento.propDepth");}
code0 {o->init("portamento.propDepth");o->reset_value=90;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Check_Button {} { Fl_Check_Button {} {
@@ -605,13 +605,13 @@ else {propta->deactivate();proptb->deactivate();}}
Fl_Dial {} { Fl_Dial {} {
label BWdpth label BWdpth
tooltip {BandWidth controller depth} xywh {455 60 25 25} labelsize 10 maximum 127 step 1 tooltip {BandWidth controller depth} xywh {455 60 25 25} labelsize 10 maximum 127 step 1
code0 {o->init("resonancebandwidth.depth");}
code0 {o->init("resonancebandwidth.depth");o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Dial {} { Fl_Dial {} {
label CFdpth label CFdpth
tooltip {Center Frequency controller Depth} xywh {455 20 25 25} labelsize 10 maximum 127 step 1 tooltip {Center Frequency controller Depth} xywh {455 20 25 25} labelsize 10 maximum 127 step 1
code0 {o->init("resonancecenter.depth");}
code0 {o->init("resonancecenter.depth");o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
} }


+ 2
- 2
source/native-plugins/zynaddsubfx/UI/ResonanceUI.fl View File

@@ -169,14 +169,14 @@ redrawPADnoteApply();}
callback {centerfreqvo->do_callback(); callback {centerfreqvo->do_callback();
redrawPADnoteApply();} redrawPADnoteApply();}
xywh {260 268 90 14} box FLAT_BOX type {Horz Knob} labelsize 10 maximum 127 step 1 xywh {260 268 90 14} box FLAT_BOX type {Horz Knob} labelsize 10 maximum 127 step 1
code0 {o->init("Pcenterfreq", 'i');}
code0 {o->init("Pcenterfreq", 'i');o->reset_value=64;}
class Fl_Osc_Slider class Fl_Osc_Slider
} }
Fl_Slider octavesfreq { Fl_Slider octavesfreq {
callback {octavesfreqvo->do_callback(); callback {octavesfreqvo->do_callback();
redrawPADnoteApply();} redrawPADnoteApply();}
xywh {260 286 90 14} box FLAT_BOX type {Horz Knob} labelsize 10 maximum 127 step 1 xywh {260 286 90 14} box FLAT_BOX type {Horz Knob} labelsize 10 maximum 127 step 1
code0 {o->init("Poctavesfreq", 'i');}
code0 {o->init("Poctavesfreq", 'i');o->reset_value=64;}
class Fl_Osc_Slider class Fl_Osc_Slider
} }
Fl_Button {} { Fl_Button {} {


+ 19
- 7
source/native-plugins/zynaddsubfx/UI/SUBnoteUI.fl View File

@@ -107,11 +107,11 @@ harmonic->show();
mag->reset_value=127; mag->reset_value=127;
mag->ext = "Phmag" + to_s(n); mag->ext = "Phmag" + to_s(n);
mag->oscRegister(mag->ext.c_str()); mag->oscRegister(mag->ext.c_str());
mag->setTransform(-1, 127);
mag->set_transform([](float x){return 127.0f - x;});
bw->reset_value=63; bw->reset_value=63;
bw->ext = "Phrelbw" + to_s(n); bw->ext = "Phrelbw" + to_s(n);
bw->oscRegister(bw->ext.c_str()); bw->oscRegister(bw->ext.c_str());
bw->setTransform(-1, 63);
bw->set_transform([](float x){return 63.0f - x;});
osc->requestValue(base+"Phrelbw"+to_s(n)); osc->requestValue(base+"Phrelbw"+to_s(n));


end();} {} end();} {}
@@ -164,19 +164,19 @@ class SUBnoteUI {open : {public PresetsUI_}
Fl_Value_Slider vol { Fl_Value_Slider vol {
label Vol label Vol
tooltip Volume xywh {10 25 140 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 maximum 127 step 1 tooltip Volume xywh {10 25 140 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 maximum 127 step 1
code0 {o->init("PVolume");}
code0 {o->init("PVolume");o->reset_value=96;}
class Fl_Osc_VSlider class Fl_Osc_VSlider
} }
Fl_Value_Slider vsns { Fl_Value_Slider vsns {
label {V.Sns} label {V.Sns}
tooltip {Velocity Sensing Function (rightmost to disable)} xywh {10 45 140 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 maximum 127 step 1 tooltip {Velocity Sensing Function (rightmost to disable)} xywh {10 45 140 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 maximum 127 step 1
code0 {o->init("PAmpVelocityScaleFunction");}
code0 {o->init("PAmpVelocityScaleFunction");o->reset_value=90;}
class Fl_Osc_VSlider class Fl_Osc_VSlider
} }
Fl_Dial pan { Fl_Dial pan {
label Pan label Pan
tooltip {Panning (leftmost is Random)} xywh {185 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1 tooltip {Panning (leftmost is Random)} xywh {185 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
code0 {o->init("PPanning");}
code0 {o->init("PPanning");o->reset_value=64;}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
Fl_Group ampenv { Fl_Group ampenv {
@@ -287,6 +287,18 @@ freqsettingsui->redraw();}
code0 {o->init("detunevalue");} code0 {o->init("detunevalue");}
class Fl_Osc_Output class Fl_Osc_Output
} }
Fl_Dial bendadjdial {
label Bend
tooltip {How the frequency varies according to the pitch wheel} xywh {448 53 15 15} box ROUND_UP_BOX labelsize 10 align 8 minimum -64 maximum 63 step 1
code0 {o->init("PBendAdjust"); o->reset_value=24;o->set_transform([](float x){return x/24.0f;});o->set_rounding(2);}
class Fl_Osc_Dial
}
Fl_Dial offsethzdial {
label Offset
tooltip {Offset of frequency in Hz} xywh {500 53 15 15} box ROUND_UP_BOX labelsize 10 align 8 minimum -64 maximum 63 step 1
code0 {o->init("POffsetHz"); o->set_rounding(2); o->set_transform([](float x){x/=64; return 15*(x*sqrtf(fabsf(x)));});}
class Fl_Osc_Dial
}
Fl_Check_Button hz440 { Fl_Check_Button hz440 {
label 440Hz label 440Hz
callback {if (o->value()==0) fixedfreqetdial->deactivate(); callback {if (o->value()==0) fixedfreqetdial->deactivate();
@@ -297,7 +309,7 @@ freqsettingsui->redraw();}
} }
Fl_Dial fixedfreqetdial { Fl_Dial fixedfreqetdial {
label {Eq.T.} label {Eq.T.}
tooltip {How the frequency varies acording to the keyboard (leftmost for fixed frequency)} xywh {610 53 15 15} box ROUND_UP_BOX labelsize 10 align 8 maximum 127 step 1
tooltip {How the frequency varies according to the keyboard (leftmost for fixed frequency)} xywh {610 53 15 15} box ROUND_UP_BOX labelsize 10 align 8 maximum 127 step 1
code0 {o->init("PfixedfreqET");} code0 {o->init("PfixedfreqET");}
class Fl_Osc_Dial class Fl_Osc_Dial
} }
@@ -352,7 +364,7 @@ bandwidthsettingsui->redraw();}
Fl_Value_Slider bandwidth { Fl_Value_Slider bandwidth {
label {Band Width} label {Band Width}
xywh {225 40 115 15} type {Horz Knob} box NO_BOX labelsize 10 align 1 maximum 127 step 1 xywh {225 40 115 15} type {Horz Knob} box NO_BOX labelsize 10 align 1 maximum 127 step 1
code0 {o->init("Pbandwidth");}
code0 {o->init("Pbandwidth");o->reset_value=40;}
class Fl_Osc_VSlider class Fl_Osc_VSlider
} }
Fl_Value_Slider bwidthscale { Fl_Value_Slider bwidthscale {


+ 1
- 1
source/native-plugins/zynaddsubfx/UI/TipWin.cpp View File

@@ -11,7 +11,7 @@ TipWin::TipWin(void):Fl_Menu_Window(1, 1)
end(); end();
} }


void TipWin::setRounding(unsigned int digits)
void TipWin::set_rounding(unsigned int digits)
{ {
format[3] = "0123456789"[digits < 9 ? digits : 9]; format[3] = "0123456789"[digits < 9 ? digits : 9];
} }


+ 1
- 1
source/native-plugins/zynaddsubfx/UI/TipWin.h View File

@@ -13,7 +13,7 @@ class TipWin:public Fl_Menu_Window
void showValue(float f); void showValue(float f);
void setText(const char *c); void setText(const char *c);
void showText(); void showText();
void setRounding(unsigned int digits = 0);
void set_rounding(unsigned int digits = 0);
private: private:
void redraw(); void redraw();
const char *getStr() const; const char *getStr() const;


+ 42
- 35
source/native-plugins/zynaddsubfx/UI/WidgetPDial.cpp View File

@@ -10,10 +10,15 @@


//static int numobj = 0; //static int numobj = 0;


static float identity(float value)
{
return value;
}

WidgetPDial::WidgetPDial(int x, int y, int w, int h, const char *label) WidgetPDial::WidgetPDial(int x, int y, int w, int h, const char *label)
:Fl_Dial(x, y, w, h, label), reset_value(0), integer_step(true), :Fl_Dial(x, y, w, h, label), reset_value(0), integer_step(true),
oldvalue(0.0f), pos(false), textset(false), value_offset(0.0),
value_scale(1.0)
use_rounding(false), oldvalue(0.0f), pos(false), textset(false),
transform(identity)
{ {
//cout << "[" << label << "] There are now " << ++numobj << endl; //cout << "[" << label << "] There are now " << ++numobj << endl;
Fl_Group *save = Fl_Group::current(); Fl_Group *save = Fl_Group::current();
@@ -28,9 +33,9 @@ WidgetPDial::~WidgetPDial()
delete tipwin; delete tipwin;
} }


void WidgetPDial::setRounding(unsigned int digits)
void WidgetPDial::set_rounding(unsigned int digits)
{ {
tipwin->setRounding(digits);
tipwin->set_rounding(digits);
} }


#define MOD_MASK (FL_CTRL | FL_SHIFT) #define MOD_MASK (FL_CTRL | FL_SHIFT)
@@ -55,15 +60,17 @@ int WidgetPDial::handle(int event)
switch(event) { switch(event) {
case FL_PUSH: case FL_PUSH:
mod_state = Fl::event_state() & MOD_MASK; mod_state = Fl::event_state() & MOD_MASK;
if (integer_step)
setRounding(0);
else if (mod_state == MOD_MASK)
setRounding(5);
else if (mod_state == FL_SHIFT)
setRounding(4);
else
setRounding((Fl::event_button3() || mod_state & FL_CTRL)
? 3 : 2);
if (!use_rounding) {
if (integer_step)
set_rounding(0);
else if (mod_state == MOD_MASK)
set_rounding(5);
else if (mod_state == FL_SHIFT)
set_rounding(4);
else
set_rounding((Fl::event_button3() || mod_state & FL_CTRL)
? 3 : 2);
}
oldvalue = value(); oldvalue = value();
old_y = Fl::event_y(); old_y = Fl::event_y();
case FL_DRAG: case FL_DRAG:
@@ -73,18 +80,23 @@ int WidgetPDial::handle(int event)
if (old_mod_state != mod_state) { if (old_mod_state != mod_state) {
oldvalue = value(); oldvalue = value();
old_y = Fl::event_y(); old_y = Fl::event_y();
if (integer_step)
setRounding(0);
else if (mod_state == MOD_MASK)
setRounding(5);
else if (mod_state == FL_SHIFT)
setRounding(4);
else
setRounding((Fl::event_button3() || mod_state & FL_CTRL)
? 3 : 2);
if (!use_rounding) {
if (integer_step)
set_rounding(0);
else if (mod_state == MOD_MASK)
set_rounding(5);
else if (mod_state == FL_SHIFT)
set_rounding(4);
else
set_rounding((Fl::event_button3() ||
mod_state & FL_CTRL)
? 3 : 2);
}
break; break;
} }
dy = old_y - Fl::event_y(); dy = old_y - Fl::event_y();
if (dy < -1 || dy > 1)
Fl::event_clicks(0);


if (!integer_step && mod_state == MOD_MASK) if (!integer_step && mod_state == MOD_MASK)
dragsize = 200000.0f; dragsize = 200000.0f;
@@ -107,7 +119,7 @@ int WidgetPDial::handle(int event)
dy = - Fl::event_dy(); dy = - Fl::event_dy();


if (integer_step) { if (integer_step) {
setRounding(0);
if (!use_rounding) set_rounding(0);
result = (int)(value() + result = (int)(value() +
dy * ((Fl::event_ctrl() || dy * ((Fl::event_ctrl() ||
Fl::event_shift()) ? 1 : 8)); Fl::event_shift()) ? 1 : 8));
@@ -115,16 +127,16 @@ int WidgetPDial::handle(int event)
float dragsize; float dragsize;
if (mod_state == MOD_MASK) { if (mod_state == MOD_MASK) {
dragsize = 100000.0; dragsize = 100000.0;
setRounding(5);
if (!use_rounding) set_rounding(5);
} else if (mod_state == FL_SHIFT) { } else if (mod_state == FL_SHIFT) {
dragsize = 10000.0; dragsize = 10000.0;
setRounding(4);
if (!use_rounding) set_rounding(4);
} else if (mod_state == FL_CTRL) { } else if (mod_state == FL_CTRL) {
dragsize = 1000.0; dragsize = 1000.0;
setRounding(3);
if (!use_rounding) set_rounding(3);
} else { } else {
dragsize = 100.0; dragsize = 100.0;
setRounding(2);
if (!use_rounding) set_rounding(2);
} }
result = value() + dy / dragsize * (max - min); result = value() + dy / dragsize * (max - min);
} }
@@ -248,13 +260,8 @@ void WidgetPDial::resetPos()
pos = false; pos = false;
} }


void WidgetPDial::set_transform(float scale, float offset)
{
value_offset = offset;
value_scale = scale;
}

float WidgetPDial::transform(float x)
void WidgetPDial::set_transform(float (*transformer)(float))
{ {
return value_scale * x + value_offset;
transform = transformer;
use_rounding = true;
} }

+ 4
- 5
source/native-plugins/zynaddsubfx/UI/WidgetPDial.h View File

@@ -15,12 +15,12 @@ class WidgetPDial:public Fl_Dial
void draw(); void draw();
void pdialcolor(int r, int g, int b); void pdialcolor(int r, int g, int b);
void tooltip(const char *c); void tooltip(const char *c);
void set_transform(float scale = 1.0, float offset = 0.0);
float transform(float x);
void setRounding(unsigned int digits = 0);
void set_transform(float (*transformer)(float));
void set_rounding(unsigned int digits = 0);
float reset_value; float reset_value;
protected: protected:
bool integer_step; bool integer_step;
bool use_rounding;
private: private:
void getPos(); void getPos();
void resetPos(); void resetPos();
@@ -29,8 +29,7 @@ class WidgetPDial:public Fl_Dial
bool pos; bool pos;
bool textset; bool textset;
class TipWin * tipwin; class TipWin * tipwin;
float value_offset;
float value_scale;
float (*transform)(float);
int mod_state; int mod_state;
}; };
#endif #endif

+ 1
- 1
source/native-plugins/zynaddsubfx/UI/guimain.cpp View File

@@ -578,7 +578,7 @@ int main(int argc, char *argv[])
help = true; help = true;


if(help) { if(help) {
printf(help_message);
puts(help_message);
return 1; return 1;
} }




+ 1
- 1
source/native-plugins/zynaddsubfx/main.cpp View File

@@ -372,7 +372,7 @@ int main(int argc, char *argv[])
<< " -a , --auto-connect\t\t\t AutoConnect when using JACK\n" << " -a , --auto-connect\t\t\t AutoConnect when using JACK\n"
<< " -p , --pid-in-client-name\t\t Append PID to (JACK) " << " -p , --pid-in-client-name\t\t Append PID to (JACK) "
"client name\n" "client name\n"
<< " -P , --prefered-port\t\t\t Prefered OSC Port\n"
<< " -P , --preferred-port\t\t\t Preferred OSC Port\n"
<< " -O , --output\t\t\t\t Set Output Engine\n" << " -O , --output\t\t\t\t Set Output Engine\n"
<< " -I , --input\t\t\t\t Set Input Engine\n" << " -I , --input\t\t\t\t Set Input Engine\n"
<< " -e , --exec-after-init\t\t Run post-initialization script\n" << " -e , --exec-after-init\t\t Run post-initialization script\n"


Loading…
Cancel
Save