Merge remote-tracking branch 'origin/master'

Conflicts:
	Builds/VisualStudio2012/Dexed.vcxproj
	Builds/VisualStudio2012/Dexed.vcxproj.filters
pull/1/head
Pascal Gauthier 10 years ago
commit e8e64c1120
  1. 4744
      Builds/MacOSX/Dexed.xcodeproj/project.pbxproj
  2. BIN
      Builds/MacOSX/Dexed.xcodeproj/project.xcworkspace/xcuserdata/asb2m10.xcuserdatad/UserInterfaceState.xcuserstate
  3. 83
      README.md
  4. 6
      Source/Dexed.h
  5. 102
      Source/GlobalEditor.cpp
  6. 96
      Source/OperatorEditor.cpp
  7. 54
      Source/ParamDialog.cpp
  8. 113
      Source/PluginData.cpp
  9. 13
      Source/PluginData.h
  10. 9
      Source/PluginEditor.cpp

File diff suppressed because it is too large Load Diff

@ -15,20 +15,34 @@ in the source folder) stays on the Apache 2.0 license to able to collaborate bet
Features Features
-------- --------
* Multi platform (OS X, Windows, Linux) and multi format (VST, AU and others that I don't use); by using JUCE * Multi platform (OS X, Windows or Linux) and multi format (VST, AU and others that I don't use); by using JUCE
* The sound engine [music-synthesizer-for-android](https://code.google.com/p/music-synthesizer-for-android) is closely modeled on the original DX7 characteristics * The sound engine [music-synthesizer-for-android](https://code.google.com/p/music-synthesizer-for-android) is closely modeled on the original DX7 characteristics
* 144 DAW automatable DX7 parameters available from one single panel * 144 DAW automatable DX7 parameters available from one single panel
* Fully supports DX7 input and output Sysex messages; including controller change. This means that you can use this with a native DX7/TX7 as a patch editor * Fully supports DX7 input and output Sysex messages; including controller change. This means that you can use this with a native DX7/TX7 as a patch editor and sysex manager
* Each operator have a realtime VU meter to know which one is active * Each operator have a realtime VU meter to know which one is active
* Can load/save any DX7/TX7 sysex programs. It is also possible to save a single program into a different sysex file. * Can load/save any DX7/TX7 sysex programs. It is also possible to save a single program into a different sysex file.
Binary downloads
----------------
Dexed is not a finished product but it is stable enough to be used in a DAW environment:
in normal operation it shouldn't crash and the VST state saving works. If you don't see the
new version here but you see it in the change log, it's because this version is in development
(current sprint). Only officials (tested) builds are listed here.
* Version 0.5.1 [vst win32](http://le-son666.com/software/dexed/dexed-0.5.1-win32.zip) - [vst win64](http://le-son666.com/software/dexed/dexed-0.5.1-win64.zip) - [vst os x](http://le-son666.com/software/dexed/dexed-0.5.1-osx.vst.zip)
* Version 0.5.0 [vst win32](http://le-son666.com/software/dexed/dexed-0.5.0a-win32.zip) - [vst win64](http://le-son666.com/software/dexed/dexed-0.5.0a-win64.zip) - [vst os x](http://le-son666.com/software/dexed/dexed-0.5.0-osx.vst.zip)
* Version 0.4.0 [vst win32](http://le-son666.com/software/dexed/dexed-0.4.0-win32.zip) - [vst win64](http://le-son666.com/software/dexed/dexed-0.4.0-win64.zip) - [vst os x](http://le-son666.com/software/dexed/dexed-0.4.0-osx.vst.zip)
* Version 0.3.0 [vst win32](http://le-son666.com/software/dexed/dexed-0.3.0-win32.zip) - [vst win64](http://le-son666.com/software/dexed/dexed-0.3.0-win64.zip) - [vst os x](http://le-son666.com/software/dexed/dexed-0.3.0-osx.vst.zip)
Changelog Changelog
--------- ---------
#### Version 0.6.0 (current sprint) #### Version 0.6.0 (current sprint)
* Added external midi interface to send / receive sysex messages * Added external midi interface to send / receive sysex messages
* Fix Tracktion crash upon startup * Fix Tracktion crash upon startup
* Middle C (transpose) now works * Middle C (transpose) now works
* Mouse over the interface controls now tells what it does without having to change it * Identify the parameter knob/switch by simply moving the mouse over it
* Knobs now works with vertical mouse drags
* User zipped DX7 cartridges
#### Version 0.5.1 #### Version 0.5.1
* Fix distortion issue with FL (DAW blocksize not multiple of 64) * Fix distortion issue with FL (DAW blocksize not multiple of 64)
@ -44,46 +58,43 @@ Changelog
* Pitchbend range / step * Pitchbend range / step
* Output/Volume VU status * Output/Volume VU status
Binary downloads
----------------
Dexed is not a finished product but it is stable enough to be used in a DAW environment:
in normal operation it shouldn't crash and the VST state saving works. If you don't see the
new version here but you see it in the change log, it's because this version is in development
(current sprint). Only officials (tested) builds are listed here.
* Version 0.5.1 [vst win32](http://le-son666.com/software/dexed/dexed-0.5.1-win32.zip) - [vst win64](http://le-son666.com/software/dexed/dexed-0.5.1-win64.zip) - [vst os x](http://le-son666.com/software/dexed/dexed-0.5.1-osx.vst.zip)
* Version 0.5.0 [vst win32](http://le-son666.com/software/dexed/dexed-0.5.0a-win32.zip) - [vst win64](http://le-son666.com/software/dexed/dexed-0.5.0a-win64.zip) - [vst os x](http://le-son666.com/software/dexed/dexed-0.5.0-osx.vst.zip)
* Version 0.4.0 [vst win32](http://le-son666.com/software/dexed/dexed-0.4.0-win32.zip) - [vst win64](http://le-son666.com/software/dexed/dexed-0.4.0-win64.zip) - [vst os x](http://le-son666.com/software/dexed/dexed-0.4.0-osx.vst.zip)
* Version 0.3.0 [vst win32](http://le-son666.com/software/dexed/dexed-0.3.0-win32.zip) - [vst win64](http://le-son666.com/software/dexed/dexed-0.3.0-win64.zip) - [vst os x](http://le-son666.com/software/dexed/dexed-0.3.0-osx.vst.zip)
Using as a DX7 editor Using as a DX7 editor
--------------------- ---------------------
You can use this plugin to edit your real DX7 patchs. Since midi send/receive are quirky for the You can use this plugin to edit your real DX7 patchs. Since midi sysex send/receive are quirky for the
majority of VST hosts, any sysex messages (editor messages) must be send or received with the external Dexed majority of VST hosts, any sysex messages (editor messages) must be send or received with the external Dexed
midi interface, configurable in the "PARM" panel. By setting a DX7 in / DX7 out, Dexed will midi interface. This is configurable in the "PARM" panel. By setting a DX7 in / DX7 out midi interface,
listen to specific program/cartridge changes from your DX7 and send controller/program/cartridge Dexed will listen to specific program/cartridge changes from your DX7 and send controller/program/cartridge
you edit. you edit.
### Prerequisite ### Prerequisite
* Before you use this interface, your DX7 must be configured to send or receive sysex messages. By hitting [FUNCTION] and [8] button : * Before you use this interface, your DX7 must be configured to send or receive sysex messages. Do this by hitting [FUNCTION] and [8] button
* The first one is the midi channel. By reading some of DX7 literature, most DX7 are supposed to support only 1 channel. Unless you are running a cluster of DX7, you should keep this to 1. * Check the midi channel. By reading some of DX7 literature, most DX7 are supposed to support only 1 channel. Unless you are running a cluster of DX7, you should keep this to 1.
* The second one (press [8] again) is "SYS INFO AVAIL" or "SYS INFO UNAVAIL". Keep it to "SYS INFO AVAIL" to be able to receive sysex messages. * Press [8] again and you should see: "SYS INFO AVAIL" or "SYS INFO UNAVAIL". Keep it to "SYS INFO AVAIL" to be able to receive sysex messages.
* The third one, you need to remove MEMORY PROTECT on the internal or cartridge memory to be able to receive a Dexed 32 voice bulk dump. * You need to remove MEMORY PROTECT on the internal or cartridge memory to be able to receive a Dexed 32 voice bulk dump. This is done by using the [MEMORY PROTECT] button and then by pushing [NO].
### To send to your DX7 ### To send to your DX7
* If the midi port is configured, any parameter change will be sent to your DX7. * If the midi out port is configured, any parameter change will be sent to your DX7.
* Use the [SEND] button on Dexed to send program or cartridge changes to your DX7. Be sure you have set [MEMORY PROTECT] to off so the cartridge (internal et external one) on the DX7 can be overridden. * If the midi out port is configured, you should see the [SEND] button, if not this button won't be available.
* You can use this [SEND] button on Dexed to send program or cartridge changes to your DX7. Be sure you have set [MEMORY PROTECT] is set to NO so the cartridge (internal or external one) on the DX7 can be overridden.
### To receive to your DX7 ### To receive from your DX7
* Receive a program by simply using [MEMORY SELECT] then the program you want to change ([1] to [32]). * The midi in port must be configured.
* Receive a program by simply using [MEMORY SELECT] then the program you want to transmit ([1] to [32]).
* Receive a cartridge by pressing [FUNCTION] then 3 times on [8] you should see " MIDI TRANSMIT ? ". If you hit yes, Dexed should receive the complete cartridge. * Receive a cartridge by pressing [FUNCTION] then 3 times on [8] you should see " MIDI TRANSMIT ? ". If you hit yes, Dexed should receive the complete cartridge.
### Troubleshooting ### Troubleshooting
* If the midi ports are opened correcly you should see a DX7 light flashing when you send or receive midi data from/to your DX7. If you don't see anything, or just the input, it because it was unable to open the output midi interface. * If you play on your DX7 keyboard, the |DX7 In| light should be flashing. Use this to test the midi in communication.
* If you play on your DX7 keyboard, the |DX7 In light| should be flashing. Use this to test the midi in communication. * If you click/play on the Dexed virtual keyboard, it will send the corresponding midi out note to the DX7 port; if configured. Use this to test the midi out communication.
* If you click/play on the Dexed virtual keyboard, it will send the correspoding midi note to the DX7 port; if configured. Use this to test the midi out communication. * If the data sent is corrupted (wrong checksum, DX7 crash), it might be the midi interface implementation. Default Windows USB midi driver are known to send corrupt sysex data. If it is the case, use a third party device (like the midiman uno) that have his own USB driver.
* If the data sent is corrupted (wrong checksum, DX7 crash); it might be the midi interface implementation. Default Windows USB midi driver can send corrupt sysex data. If it is the case, use a third party device (like the midiman uno) that have his own USB driver. * If you are unable to open the interface (error message after the using the [PARM] dialog), it might be because the midi driver doesn't support multiple clients (common on Windows). Be sure that there are no other applications that are using the same midi interface.
* If you are unable to open the interface (error message after the [PARM] dialog), it might be because the midi driver doesn't support multiple clients (common on Windows). Be sure that there are no other applications that are using the same midi interface.
User DX7 zip cartridges
-----------------------
It is possible to enjoy your DX7 sysex collection from one single zip file. Simply move your zipped
sysex content to where you have installed Dexed (VST plugins dir). The rename the zip file to
`Dexed_cart.zip`. You can modify this file anytime you want, Dexed will simply reparsed it when the
file is changed. Directories in the zip file is be a transformed into submenu when you hit the
[CART] button.
Randomized programs Randomized programs
------------------- -------------------
@ -101,8 +112,7 @@ valid checksum for your DX7 keyboard. I'm in now way responsible if this breaks
FAQ (possibly) FAQ (possibly)
-------------- --------------
* Some programs can generate distortion : This is because the voice summing still needs some tuning. You can simply lower the volume on those programs. * Some programs can generate distortion : This is because the voice summing still needs some tuning. You can simply lower the volume on those programs.
* Some sysex seems to be corrupted : Even if the sysex checksum doesn't match, Dexed will try to load it (this is a kind of randomize feature). Right now Dexed supports only original DX7 sysex, other DX family sysex (like the DX21) is considered as random data. * Some sysex files seems to be corrupted : Even if the sysex checksum doesn't match, Dexed will try to load it (this is a kind of randomize feature). Right now Dexed supports only original DX7 sysex, other DX family sysex (like the DX21) is considered as random data.
* Dexed doesn't receive/send parameter data from/to my DX7 : Most DX7 parameter change are done via sysex and very few VST host actually implements sysex. Configure this plugin to send sysex data to a specific midi interface (see PARM panel).
Credits & thanks Credits & thanks
---------------- ----------------
@ -112,10 +122,15 @@ Credits & thanks
* DX7 programs : Dave Benson, Frank Carvalho, Tim Conrardy, Jack Deckard, Chris Dodunski, Tim Garrett, Hitaye, Stephan Ibsen, Christian Jezreel, Narfman, Godric Wilkie * DX7 programs : Dave Benson, Frank Carvalho, Tim Conrardy, Jack Deckard, Chris Dodunski, Tim Garrett, Hitaye, Stephan Ibsen, Christian Jezreel, Narfman, Godric Wilkie
* markusthegeek direct implication for this project * markusthegeek direct implication for this project
Planned milestones
------------------
0.6 DX7 Editor + User cartridges
0.7 msfa engine tuning
0.8 Complete new UI
TODO - Dexed TODO - Dexed
------------ ------------
* Yamaha 4 operators (DX21/DX27/DX100) sysex import * Yamaha 4 operators (DX21/DX27/DX100) sysex import
* Implement a better DX look and feel (amp, pitch, algo) *** commin Q4 2014
* Various code cleanup * Various code cleanup
TODO - msfa TODO - msfa

@ -23,12 +23,16 @@
void dexed_trace(const char *source, const char *fmt, ...); void dexed_trace(const char *source, const char *fmt, ...);
#ifdef DEBUG
#define DEXED_VERSION "0.6.0 DEBUG"
#ifdef _MSC_VER #ifdef _MSC_VER
#define TRACE(fmt, ...) dexed_trace(__FUNCTION__,fmt,##__VA_ARGS__) #define TRACE(fmt, ...) dexed_trace(__FUNCTION__,fmt,##__VA_ARGS__)
#else #else
#define TRACE(fmt, ...) dexed_trace(__PRETTY_FUNCTION__,fmt,##__VA_ARGS__) #define TRACE(fmt, ...) dexed_trace(__PRETTY_FUNCTION__,fmt,##__VA_ARGS__)
#endif #endif
#else
#define DEXED_VERSION "0.6.0" #define DEXED_VERSION "0.6.0"
#define TRACE(fmt, ...)
#endif
#endif // DEXED_H_INCLUDED #endif // DEXED_H_INCLUDED

@ -50,79 +50,79 @@ GlobalEditor::GlobalEditor ()
addAndMakeVisible (lfoAmDepth = new Slider ("lfoAmDepth")); addAndMakeVisible (lfoAmDepth = new Slider ("lfoAmDepth"));
lfoAmDepth->setRange (0, 99, 1); lfoAmDepth->setRange (0, 99, 1);
lfoAmDepth->setSliderStyle (Slider::Rotary); lfoAmDepth->setSliderStyle (Slider::RotaryVerticalDrag);
lfoAmDepth->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); lfoAmDepth->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
lfoAmDepth->addListener (this); lfoAmDepth->addListener (this);
addAndMakeVisible (lfoPitchDepth = new Slider ("lfoPitchDepth")); addAndMakeVisible (lfoPitchDepth = new Slider ("lfoPitchDepth"));
lfoPitchDepth->setRange (0, 99, 1); lfoPitchDepth->setRange (0, 99, 1);
lfoPitchDepth->setSliderStyle (Slider::Rotary); lfoPitchDepth->setSliderStyle (Slider::RotaryVerticalDrag);
lfoPitchDepth->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); lfoPitchDepth->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
lfoPitchDepth->addListener (this); lfoPitchDepth->addListener (this);
addAndMakeVisible (lfoDelay = new Slider ("lfoDelay")); addAndMakeVisible (lfoDelay = new Slider ("lfoDelay"));
lfoDelay->setRange (0, 99, 1); lfoDelay->setRange (0, 99, 1);
lfoDelay->setSliderStyle (Slider::Rotary); lfoDelay->setSliderStyle (Slider::RotaryVerticalDrag);
lfoDelay->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); lfoDelay->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
lfoDelay->addListener (this); lfoDelay->addListener (this);
addAndMakeVisible (cutoff = new Slider ("cutoff")); addAndMakeVisible (cutoff = new Slider ("cutoff"));
cutoff->setRange (0, 1, 0); cutoff->setRange (0, 1, 0);
cutoff->setSliderStyle (Slider::Rotary); cutoff->setSliderStyle (Slider::RotaryVerticalDrag);
cutoff->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); cutoff->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
cutoff->addListener (this); cutoff->addListener (this);
addAndMakeVisible (reso = new Slider ("reso")); addAndMakeVisible (reso = new Slider ("reso"));
reso->setRange (0, 1, 0); reso->setRange (0, 1, 0);
reso->setSliderStyle (Slider::Rotary); reso->setSliderStyle (Slider::RotaryVerticalDrag);
reso->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); reso->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
reso->addListener (this); reso->addListener (this);
addAndMakeVisible (pitchRate2 = new Slider ("pitchRate2")); addAndMakeVisible (pitchRate2 = new Slider ("pitchRate2"));
pitchRate2->setRange (0, 99, 1); pitchRate2->setRange (0, 99, 1);
pitchRate2->setSliderStyle (Slider::Rotary); pitchRate2->setSliderStyle (Slider::RotaryVerticalDrag);
pitchRate2->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); pitchRate2->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
pitchRate2->addListener (this); pitchRate2->addListener (this);
addAndMakeVisible (pitchRate3 = new Slider ("pitchRate3")); addAndMakeVisible (pitchRate3 = new Slider ("pitchRate3"));
pitchRate3->setRange (0, 99, 1); pitchRate3->setRange (0, 99, 1);
pitchRate3->setSliderStyle (Slider::Rotary); pitchRate3->setSliderStyle (Slider::RotaryVerticalDrag);
pitchRate3->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); pitchRate3->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
pitchRate3->addListener (this); pitchRate3->addListener (this);
addAndMakeVisible (pitchRate4 = new Slider ("pitchRate4")); addAndMakeVisible (pitchRate4 = new Slider ("pitchRate4"));
pitchRate4->setRange (0, 99, 1); pitchRate4->setRange (0, 99, 1);
pitchRate4->setSliderStyle (Slider::Rotary); pitchRate4->setSliderStyle (Slider::RotaryVerticalDrag);
pitchRate4->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); pitchRate4->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
pitchRate4->addListener (this); pitchRate4->addListener (this);
addAndMakeVisible (pitchRate1 = new Slider ("pitchRate1")); addAndMakeVisible (pitchRate1 = new Slider ("pitchRate1"));
pitchRate1->setRange (0, 99, 1); pitchRate1->setRange (0, 99, 1);
pitchRate1->setSliderStyle (Slider::Rotary); pitchRate1->setSliderStyle (Slider::RotaryVerticalDrag);
pitchRate1->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); pitchRate1->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
pitchRate1->addListener (this); pitchRate1->addListener (this);
addAndMakeVisible (pitchLevel2 = new Slider ("pitchLevel2")); addAndMakeVisible (pitchLevel2 = new Slider ("pitchLevel2"));
pitchLevel2->setRange (0, 99, 1); pitchLevel2->setRange (0, 99, 1);
pitchLevel2->setSliderStyle (Slider::Rotary); pitchLevel2->setSliderStyle (Slider::RotaryVerticalDrag);
pitchLevel2->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); pitchLevel2->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
pitchLevel2->addListener (this); pitchLevel2->addListener (this);
addAndMakeVisible (pitchLevel3 = new Slider ("pitchLevel3")); addAndMakeVisible (pitchLevel3 = new Slider ("pitchLevel3"));
pitchLevel3->setRange (0, 99, 1); pitchLevel3->setRange (0, 99, 1);
pitchLevel3->setSliderStyle (Slider::Rotary); pitchLevel3->setSliderStyle (Slider::RotaryVerticalDrag);
pitchLevel3->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); pitchLevel3->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
pitchLevel3->addListener (this); pitchLevel3->addListener (this);
addAndMakeVisible (pitchLevel4 = new Slider ("pitchLevel4")); addAndMakeVisible (pitchLevel4 = new Slider ("pitchLevel4"));
pitchLevel4->setRange (0, 99, 1); pitchLevel4->setRange (0, 99, 1);
pitchLevel4->setSliderStyle (Slider::Rotary); pitchLevel4->setSliderStyle (Slider::RotaryVerticalDrag);
pitchLevel4->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); pitchLevel4->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
pitchLevel4->addListener (this); pitchLevel4->addListener (this);
addAndMakeVisible (pitchLevel1 = new Slider ("pitchLevel1")); addAndMakeVisible (pitchLevel1 = new Slider ("pitchLevel1"));
pitchLevel1->setRange (0, 99, 1); pitchLevel1->setRange (0, 99, 1);
pitchLevel1->setSliderStyle (Slider::Rotary); pitchLevel1->setSliderStyle (Slider::RotaryVerticalDrag);
pitchLevel1->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); pitchLevel1->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
pitchLevel1->addListener (this); pitchLevel1->addListener (this);
@ -137,7 +137,7 @@ GlobalEditor::GlobalEditor ()
addAndMakeVisible (pitchModSens = new Slider ("pitchModSens")); addAndMakeVisible (pitchModSens = new Slider ("pitchModSens"));
pitchModSens->setRange (0, 7, 0); pitchModSens->setRange (0, 7, 0);
pitchModSens->setSliderStyle (Slider::Rotary); pitchModSens->setSliderStyle (Slider::RotaryVerticalDrag);
pitchModSens->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); pitchModSens->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
pitchModSens->addListener (this); pitchModSens->addListener (this);
@ -152,13 +152,13 @@ GlobalEditor::GlobalEditor ()
addAndMakeVisible (feedback = new Slider ("feedback")); addAndMakeVisible (feedback = new Slider ("feedback"));
feedback->setRange (0, 7, 1); feedback->setRange (0, 7, 1);
feedback->setSliderStyle (Slider::Rotary); feedback->setSliderStyle (Slider::RotaryVerticalDrag);
feedback->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); feedback->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
feedback->addListener (this); feedback->addListener (this);
addAndMakeVisible (algo = new Slider ("algo")); addAndMakeVisible (algo = new Slider ("algo"));
algo->setRange (1, 32, 1); algo->setRange (1, 32, 1);
algo->setSliderStyle (Slider::Rotary); algo->setSliderStyle (Slider::RotaryVerticalDrag);
algo->setTextBoxStyle (Slider::NoTextBox, true, 80, 20); algo->setTextBoxStyle (Slider::NoTextBox, true, 80, 20);
algo->addListener (this); algo->addListener (this);
@ -167,7 +167,7 @@ GlobalEditor::GlobalEditor ()
addAndMakeVisible (output = new Slider ("cutoff")); addAndMakeVisible (output = new Slider ("cutoff"));
output->setRange (0, 1, 0); output->setRange (0, 1, 0);
output->setSliderStyle (Slider::Rotary); output->setSliderStyle (Slider::RotaryVerticalDrag);
output->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); output->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
output->addListener (this); output->addListener (this);
@ -504,56 +504,56 @@ BEGIN_JUCER_METADATA
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/> textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="lfoAmDepth" id="3e95a6206fa4a891" memberName="lfoAmDepth" <SLIDER name="lfoAmDepth" id="3e95a6206fa4a891" memberName="lfoAmDepth"
virtualName="" explicitFocusOrder="0" pos="672 64 24 24" min="0" virtualName="" explicitFocusOrder="0" pos="672 64 24 24" min="0"
max="99" int="1" style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1" max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/> textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="lfoPitchDepth" id="6ead769ca786c813" memberName="lfoPitchDepth" <SLIDER name="lfoPitchDepth" id="6ead769ca786c813" memberName="lfoPitchDepth"
virtualName="" explicitFocusOrder="0" pos="648 64 24 24" min="0" virtualName="" explicitFocusOrder="0" pos="648 64 24 24" min="0"
max="99" int="1" style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1" max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/> textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="lfoDelay" id="1fce68dc81619ef5" memberName="lfoDelay" virtualName="" <SLIDER name="lfoDelay" id="1fce68dc81619ef5" memberName="lfoDelay" virtualName=""
explicitFocusOrder="0" pos="624 64 24 24" min="0" max="99" int="1" explicitFocusOrder="0" pos="624 64 24 24" min="0" max="99" int="1"
style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1" textBoxWidth="80" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxHeight="20" skewFactor="1"/> textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="cutoff" id="40531f16bb0bd225" memberName="cutoff" virtualName="" <SLIDER name="cutoff" id="40531f16bb0bd225" memberName="cutoff" virtualName=""
explicitFocusOrder="0" pos="80 40 40 40" min="0" max="1" int="0" explicitFocusOrder="0" pos="80 40 40 40" min="0" max="1" int="0"
style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1" textBoxWidth="80" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxHeight="20" skewFactor="1"/> textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="reso" id="c8c13464e81a8d83" memberName="reso" virtualName="" <SLIDER name="reso" id="c8c13464e81a8d83" memberName="reso" virtualName=""
explicitFocusOrder="0" pos="128 40 40 40" min="0" max="1" int="0" explicitFocusOrder="0" pos="128 40 40 40" min="0" max="1" int="0"
style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1" textBoxWidth="80" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxHeight="20" skewFactor="1"/> textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="pitchRate2" id="73f386b3c91d3de4" memberName="pitchRate2" <SLIDER name="pitchRate2" id="73f386b3c91d3de4" memberName="pitchRate2"
virtualName="" explicitFocusOrder="0" pos="752 64 32 24" min="0" virtualName="" explicitFocusOrder="0" pos="752 64 32 24" min="0"
max="99" int="1" style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1" max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/> textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="pitchRate3" id="187c25b24413fccf" memberName="pitchRate3" <SLIDER name="pitchRate3" id="187c25b24413fccf" memberName="pitchRate3"
virtualName="" explicitFocusOrder="0" pos="776 64 32 24" min="0" virtualName="" explicitFocusOrder="0" pos="776 64 32 24" min="0"
max="99" int="1" style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1" max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/> textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="pitchRate4" id="1aeb2a8fbbcbeaab" memberName="pitchRate4" <SLIDER name="pitchRate4" id="1aeb2a8fbbcbeaab" memberName="pitchRate4"
virtualName="" explicitFocusOrder="0" pos="800 64 32 24" min="0" virtualName="" explicitFocusOrder="0" pos="800 64 32 24" min="0"
max="99" int="1" style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1" max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/> textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="pitchRate1" id="419d613b3fb9604e" memberName="pitchRate1" <SLIDER name="pitchRate1" id="419d613b3fb9604e" memberName="pitchRate1"
virtualName="" explicitFocusOrder="0" pos="728 64 32 24" min="0" virtualName="" explicitFocusOrder="0" pos="728 64 32 24" min="0"
max="99" int="1" style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1" max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/> textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="pitchLevel2" id="3a355ad2221887d9" memberName="pitchLevel2" <SLIDER name="pitchLevel2" id="3a355ad2221887d9" memberName="pitchLevel2"
virtualName="" explicitFocusOrder="0" pos="752 40 32 24" min="0" virtualName="" explicitFocusOrder="0" pos="752 40 32 24" min="0"
max="99" int="1" style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1" max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/> textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="pitchLevel3" id="5c5d782e8a7f3ad7" memberName="pitchLevel3" <SLIDER name="pitchLevel3" id="5c5d782e8a7f3ad7" memberName="pitchLevel3"
virtualName="" explicitFocusOrder="0" pos="776 40 32 24" min="0" virtualName="" explicitFocusOrder="0" pos="776 40 32 24" min="0"
max="99" int="1" style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1" max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/> textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="pitchLevel4" id="eb900b141fbad8ff" memberName="pitchLevel4" <SLIDER name="pitchLevel4" id="eb900b141fbad8ff" memberName="pitchLevel4"
virtualName="" explicitFocusOrder="0" pos="800 40 32 24" min="0" virtualName="" explicitFocusOrder="0" pos="800 40 32 24" min="0"
max="99" int="1" style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1" max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/> textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="pitchLevel1" id="344cbe26ec9fa128" memberName="pitchLevel1" <SLIDER name="pitchLevel1" id="344cbe26ec9fa128" memberName="pitchLevel1"
virtualName="" explicitFocusOrder="0" pos="728 40 32 24" min="0" virtualName="" explicitFocusOrder="0" pos="728 40 32 24" min="0"
max="99" int="1" style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1" max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/> textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="transpose" id="7d1266b1c1534947" memberName="transpose" <SLIDER name="transpose" id="7d1266b1c1534947" memberName="transpose"
virtualName="" explicitFocusOrder="0" pos="832 0 24 88" min="0" virtualName="" explicitFocusOrder="0" pos="832 0 24 88" min="0"
max="48" int="0" style="LinearVertical" textBoxPos="NoTextBox" max="48" int="0" style="LinearVertical" textBoxPos="NoTextBox"
@ -563,8 +563,8 @@ BEGIN_JUCER_METADATA
needsCallback="0" radioGroupId="0" state="0"/> needsCallback="0" radioGroupId="0" state="0"/>
<SLIDER name="pitchModSens" id="904f73df85a9f886" memberName="pitchModSens" <SLIDER name="pitchModSens" id="904f73df85a9f886" memberName="pitchModSens"
virtualName="" explicitFocusOrder="0" pos="696 64 24 24" min="0" virtualName="" explicitFocusOrder="0" pos="696 64 24 24" min="0"
max="7" int="0" style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1" max="7" int="0" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/> textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<TOGGLEBUTTON name="lfoSync" id="ff92bb0a5a4f7187" memberName="lfoSync" virtualName="" <TOGGLEBUTTON name="lfoSync" id="ff92bb0a5a4f7187" memberName="lfoSync" virtualName=""
explicitFocusOrder="0" pos="600 40 24 24" buttonText="" connectedEdges="0" explicitFocusOrder="0" pos="600 40 24 24" buttonText="" connectedEdges="0"
needsCallback="0" radioGroupId="0" state="0"/> needsCallback="0" radioGroupId="0" state="0"/>
@ -576,19 +576,19 @@ BEGIN_JUCER_METADATA
params=""/> params=""/>
<SLIDER name="feedback" id="4fac1940c29ab8c" memberName="feedback" virtualName="" <SLIDER name="feedback" id="4fac1940c29ab8c" memberName="feedback" virtualName=""
explicitFocusOrder="0" pos="568 32 24 24" min="0" max="7" int="1" explicitFocusOrder="0" pos="568 32 24 24" min="0" max="7" int="1"
style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1" textBoxWidth="80" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxHeight="20" skewFactor="1"/> textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="algo" id="8a226ddf9bbff752" memberName="algo" virtualName="" <SLIDER name="algo" id="8a226ddf9bbff752" memberName="algo" virtualName=""
explicitFocusOrder="0" pos="568 8 24 24" min="1" max="32" int="1" explicitFocusOrder="0" pos="568 8 24 24" min="1" max="32" int="1"
style="Rotary" textBoxPos="NoTextBox" textBoxEditable="0" textBoxWidth="80" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="0"
textBoxHeight="20" skewFactor="1"/> textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<GENERICCOMPONENT name="lcdDisplay" id="30c7bb8f114cbbe3" memberName="lcdDisplay" <GENERICCOMPONENT name="lcdDisplay" id="30c7bb8f114cbbe3" memberName="lcdDisplay"
virtualName="" explicitFocusOrder="0" pos="8 0 232 32" class="LcdDisplay" virtualName="" explicitFocusOrder="0" pos="8 0 232 32" class="LcdDisplay"
params=""/> params=""/>
<SLIDER name="cutoff" id="7697fdd54fd1593e" memberName="output" virtualName="" <SLIDER name="cutoff" id="7697fdd54fd1593e" memberName="output" virtualName=""
explicitFocusOrder="0" pos="32 40 40 40" min="0" max="1" int="0" explicitFocusOrder="0" pos="32 40 40 40" min="0" max="1" int="0"
style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1" textBoxWidth="80" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxHeight="20" skewFactor="1"/> textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<GENERICCOMPONENT name="vuOutput" id="dac75af912267f51" memberName="vuOutput" virtualName="" <GENERICCOMPONENT name="vuOutput" id="dac75af912267f51" memberName="vuOutput" virtualName=""
explicitFocusOrder="0" pos="8 44 16 38" class="VuMeter" params=""/> explicitFocusOrder="0" pos="8 44 16 38" class="VuMeter" params=""/>
</JUCER_COMPONENT> </JUCER_COMPONENT>

@ -31,49 +31,49 @@ OperatorEditor::OperatorEditor ()
{ {
addAndMakeVisible (s_egl1 = new Slider ("egl1")); addAndMakeVisible (s_egl1 = new Slider ("egl1"));
s_egl1->setRange (0, 99, 1); s_egl1->setRange (0, 99, 1);
s_egl1->setSliderStyle (Slider::Rotary); s_egl1->setSliderStyle (Slider::RotaryVerticalDrag);
s_egl1->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); s_egl1->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
s_egl1->addListener (this); s_egl1->addListener (this);
addAndMakeVisible (s_egl2 = new Slider ("egl2")); addAndMakeVisible (s_egl2 = new Slider ("egl2"));
s_egl2->setRange (0, 99, 1); s_egl2->setRange (0, 99, 1);
s_egl2->setSliderStyle (Slider::Rotary); s_egl2->setSliderStyle (Slider::RotaryVerticalDrag);
s_egl2->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); s_egl2->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
s_egl2->addListener (this); s_egl2->addListener (this);
addAndMakeVisible (s_egl3 = new Slider ("egl3")); addAndMakeVisible (s_egl3 = new Slider ("egl3"));
s_egl3->setRange (0, 99, 1); s_egl3->setRange (0, 99, 1);
s_egl3->setSliderStyle (Slider::Rotary); s_egl3->setSliderStyle (Slider::RotaryVerticalDrag);
s_egl3->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); s_egl3->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
s_egl3->addListener (this); s_egl3->addListener (this);
addAndMakeVisible (s_egl4 = new Slider ("egl4")); addAndMakeVisible (s_egl4 = new Slider ("egl4"));
s_egl4->setRange (0, 99, 1); s_egl4->setRange (0, 99, 1);
s_egl4->setSliderStyle (Slider::Rotary); s_egl4->setSliderStyle (Slider::RotaryVerticalDrag);
s_egl4->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); s_egl4->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
s_egl4->addListener (this); s_egl4->addListener (this);
addAndMakeVisible (s_egv1 = new Slider ("egr1")); addAndMakeVisible (s_egv1 = new Slider ("egr1"));
s_egv1->setRange (0, 99, 1); s_egv1->setRange (0, 99, 1);
s_egv1->setSliderStyle (Slider::Rotary); s_egv1->setSliderStyle (Slider::RotaryVerticalDrag);
s_egv1->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); s_egv1->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
s_egv1->addListener (this); s_egv1->addListener (this);
addAndMakeVisible (s_egv2 = new Slider ("egr3")); addAndMakeVisible (s_egv2 = new Slider ("egr3"));
s_egv2->setRange (0, 99, 1); s_egv2->setRange (0, 99, 1);
s_egv2->setSliderStyle (Slider::Rotary); s_egv2->setSliderStyle (Slider::RotaryVerticalDrag);
s_egv2->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); s_egv2->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
s_egv2->addListener (this); s_egv2->addListener (this);
addAndMakeVisible (s_egv3 = new Slider ("egr3")); addAndMakeVisible (s_egv3 = new Slider ("egr3"));
s_egv3->setRange (0, 99, 1); s_egv3->setRange (0, 99, 1);
s_egv3->setSliderStyle (Slider::Rotary); s_egv3->setSliderStyle (Slider::RotaryVerticalDrag);
s_egv3->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); s_egv3->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
s_egv3->addListener (this); s_egv3->addListener (this);
addAndMakeVisible (s_egv4 = new Slider ("egr4")); addAndMakeVisible (s_egv4 = new Slider ("egr4"));
s_egv4->setRange (0, 99, 1); s_egv4->setRange (0, 99, 1);
s_egv4->setSliderStyle (Slider::Rotary); s_egv4->setSliderStyle (Slider::RotaryVerticalDrag);
s_egv4->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); s_egv4->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
s_egv4->addListener (this); s_egv4->addListener (this);
@ -88,19 +88,19 @@ OperatorEditor::OperatorEditor ()
addAndMakeVisible (opLevel = new Slider ("opLevel")); addAndMakeVisible (opLevel = new Slider ("opLevel"));
opLevel->setRange (0, 99, 1); opLevel->setRange (0, 99, 1);
opLevel->setSliderStyle (Slider::Rotary); opLevel->setSliderStyle (Slider::RotaryVerticalDrag);
opLevel->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); opLevel->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
opLevel->addListener (this); opLevel->addListener (this);
addAndMakeVisible (opFine = new Slider ("opFine")); addAndMakeVisible (opFine = new Slider ("opFine"));
opFine->setRange (0, 99, 1); opFine->setRange (0, 99, 1);
opFine->setSliderStyle (Slider::Rotary); opFine->setSliderStyle (Slider::RotaryVerticalDrag);
opFine->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); opFine->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
opFine->addListener (this); opFine->addListener (this);
addAndMakeVisible (opCoarse = new Slider ("opCoarse")); addAndMakeVisible (opCoarse = new Slider ("opCoarse"));
opCoarse->setRange (0, 31, 1); opCoarse->setRange (0, 31, 1);
opCoarse->setSliderStyle (Slider::Rotary); opCoarse->setSliderStyle (Slider::RotaryVerticalDrag);
opCoarse->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); opCoarse->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
opCoarse->addListener (this); opCoarse->addListener (this);
@ -127,14 +127,14 @@ OperatorEditor::OperatorEditor ()
addAndMakeVisible (sclLeftLevel = new Slider ("sclLeftLevel")); addAndMakeVisible (sclLeftLevel = new Slider ("sclLeftLevel"));
sclLeftLevel->setTooltip (TRANS("Keyboard Scale Level Left Depth ")); sclLeftLevel->setTooltip (TRANS("Keyboard Scale Level Left Depth "));
sclLeftLevel->setRange (0, 99, 1); sclLeftLevel->setRange (0, 99, 1);
sclLeftLevel->setSliderStyle (Slider::Rotary); sclLeftLevel->setSliderStyle (Slider::RotaryVerticalDrag);
sclLeftLevel->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); sclLeftLevel->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
sclLeftLevel->addListener (this); sclLeftLevel->addListener (this);
addAndMakeVisible (sclRightLevel = new Slider ("sclRightLevel")); addAndMakeVisible (sclRightLevel = new Slider ("sclRightLevel"));
sclRightLevel->setTooltip (TRANS("Keyboard Scale Level Right Depth ")); sclRightLevel->setTooltip (TRANS("Keyboard Scale Level Right Depth "));
sclRightLevel->setRange (0, 99, 1); sclRightLevel->setRange (0, 99, 1);
sclRightLevel->setSliderStyle (Slider::Rotary); sclRightLevel->setSliderStyle (Slider::RotaryVerticalDrag);
sclRightLevel->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); sclRightLevel->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
sclRightLevel->addListener (this); sclRightLevel->addListener (this);
@ -163,26 +163,26 @@ OperatorEditor::OperatorEditor ()
addAndMakeVisible (sclLvlBrkPt = new Slider ("sclLvlBrkPt")); addAndMakeVisible (sclLvlBrkPt = new Slider ("sclLvlBrkPt"));
sclLvlBrkPt->setTooltip (TRANS("Scale Level Breakpoint")); sclLvlBrkPt->setTooltip (TRANS("Scale Level Breakpoint"));
sclLvlBrkPt->setRange (0, 99, 1); sclLvlBrkPt->setRange (0, 99, 1);
sclLvlBrkPt->setSliderStyle (Slider::Rotary); sclLvlBrkPt->setSliderStyle (Slider::RotaryVerticalDrag);
sclLvlBrkPt->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); sclLvlBrkPt->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
sclLvlBrkPt->addListener (this); sclLvlBrkPt->addListener (this);
addAndMakeVisible (sclRateScaling = new Slider ("sclRateScaling")); addAndMakeVisible (sclRateScaling = new Slider ("sclRateScaling"));
sclRateScaling->setTooltip (TRANS("Keyboard Rate Scaling")); sclRateScaling->setTooltip (TRANS("Keyboard Rate Scaling"));
sclRateScaling->setRange (0, 7, 1); sclRateScaling->setRange (0, 7, 1);
sclRateScaling->setSliderStyle (Slider::Rotary); sclRateScaling->setSliderStyle (Slider::RotaryVerticalDrag);
sclRateScaling->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); sclRateScaling->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
sclRateScaling->addListener (this); sclRateScaling->addListener (this);
addAndMakeVisible (keyVelSens = new Slider ("keyVelSens")); addAndMakeVisible (keyVelSens = new Slider ("keyVelSens"));
keyVelSens->setRange (0, 7, 1); keyVelSens->setRange (0, 7, 1);
keyVelSens->setSliderStyle (Slider::Rotary); keyVelSens->setSliderStyle (Slider::RotaryVerticalDrag);
keyVelSens->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); keyVelSens->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
keyVelSens->addListener (this); keyVelSens->addListener (this);
addAndMakeVisible (ampModSens = new Slider ("ampModSens")); addAndMakeVisible (ampModSens = new Slider ("ampModSens"));
ampModSens->setRange (0, 4, 1); ampModSens->setRange (0, 3, 1);
ampModSens->setSliderStyle (Slider::Rotary); ampModSens->setSliderStyle (Slider::RotaryVerticalDrag);
ampModSens->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); ampModSens->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
ampModSens->addListener (this); ampModSens->addListener (this);
@ -502,51 +502,51 @@ BEGIN_JUCER_METADATA
</BACKGROUND> </BACKGROUND>
<SLIDER name="egl1" id="dc070cc41347df47" memberName="s_egl1" virtualName="" <SLIDER name="egl1" id="dc070cc41347df47" memberName="s_egl1" virtualName=""
explicitFocusOrder="0" pos="136 40 24 24" min="0" max="99" int="1" explicitFocusOrder="0" pos="136 40 24 24" min="0" max="99" int="1"
style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1" textBoxWidth="80" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxHeight="20" skewFactor="1"/> textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="egl2" id="66f5195e9c374029" memberName="s_egl2" virtualName="" <SLIDER name="egl2" id="66f5195e9c374029" memberName="s_egl2" virtualName=""
explicitFocusOrder="0" pos="160 40 24 24" min="0" max="99" int="1" explicitFocusOrder="0" pos="160 40 24 24" min="0" max="99" int="1"
style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1" textBoxWidth="80" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxHeight="20" skewFactor="1"/> textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="egl3" id="9d57bd53203dcdb4" memberName="s_egl3" virtualName="" <SLIDER name="egl3" id="9d57bd53203dcdb4" memberName="s_egl3" virtualName=""
explicitFocusOrder="0" pos="184 40 24 24" min="0" max="99" int="1" explicitFocusOrder="0" pos="184 40 24 24" min="0" max="99" int="1"
style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1" textBoxWidth="80" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxHeight="20" skewFactor="1"/> textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="egl4" id="4f7c3ece3ea2cf9c" memberName="s_egl4" virtualName="" <SLIDER name="egl4" id="4f7c3ece3ea2cf9c" memberName="s_egl4" virtualName=""
explicitFocusOrder="0" pos="208 40 24 24" min="0" max="99" int="1" explicitFocusOrder="0" pos="208 40 24 24" min="0" max="99" int="1"
style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1" textBoxWidth="80" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxHeight="20" skewFactor="1"/> textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="egr1" id="2ca8137d80da46fb" memberName="s_egv1" virtualName="" <SLIDER name="egr1" id="2ca8137d80da46fb" memberName="s_egv1" virtualName=""
explicitFocusOrder="0" pos="136 64 24 24" min="0" max="99" int="1" explicitFocusOrder="0" pos="136 64 24 24" min="0" max="99" int="1"
style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1" textBoxWidth="80" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxHeight="20" skewFactor="1"/> textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="egr3" id="4ad6d0c532d15973" memberName="s_egv2" virtualName="" <SLIDER name="egr3" id="4ad6d0c532d15973" memberName="s_egv2" virtualName=""
explicitFocusOrder="0" pos="160 64 24 24" min="0" max="99" int="1" explicitFocusOrder="0" pos="160 64 24 24" min="0" max="99" int="1"
style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1" textBoxWidth="80" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxHeight="20" skewFactor="1"/> textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="egr3" id="8a2027f9ede16b4f" memberName="s_egv3" virtualName="" <SLIDER name="egr3" id="8a2027f9ede16b4f" memberName="s_egv3" virtualName=""
explicitFocusOrder="0" pos="184 64 24 24" min="0" max="99" int="1" explicitFocusOrder="0" pos="184 64 24 24" min="0" max="99" int="1"
style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1" textBoxWidth="80" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxHeight="20" skewFactor="1"/> textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="egr4" id="8c04f1c943d837e8" memberName="s_egv4" virtualName="" <SLIDER name="egr4" id="8c04f1c943d837e8" memberName="s_egv4" virtualName=""
explicitFocusOrder="0" pos="208 64 24 24" min="0" max="99" int="1" explicitFocusOrder="0" pos="208 64 24 24" min="0" max="99" int="1"
style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1" textBoxWidth="80" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxHeight="20" skewFactor="1"/> textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<COMBOBOX name="opMode" id="2cf8156bb94cdc40" memberName="opMode" virtualName="" <COMBOBOX name="opMode" id="2cf8156bb94cdc40" memberName="opMode" virtualName=""
explicitFocusOrder="0" pos="24 48 104 16" editable="0" layout="33" explicitFocusOrder="0" pos="24 48 104 16" editable="0" layout="33"
items="RATIO&#10;FIXED" textWhenNonSelected="" textWhenNoItems="(no choices)"/> items="RATIO&#10;FIXED" textWhenNonSelected="" textWhenNoItems="(no choices)"/>
<SLIDER name="opLevel" id="f8521c8214fb8993" memberName="opLevel" virtualName="" <SLIDER name="opLevel" id="f8521c8214fb8993" memberName="opLevel" virtualName=""
explicitFocusOrder="0" pos="232 56 32 32" min="0" max="99" int="1" explicitFocusOrder="0" pos="232 56 32 32" min="0" max="99" int="1"
style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1" textBoxWidth="80" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxHeight="20" skewFactor="1"/> textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="opFine" id="e445aa61bd6cddcb" memberName="opFine" virtualName="" <SLIDER name="opFine" id="e445aa61bd6cddcb" memberName="opFine" virtualName=""
explicitFocusOrder="0" pos="104 24 24 24" min="0" max="99" int="1" explicitFocusOrder="0" pos="104 24 24 24" min="0" max="99" int="1"
style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1" textBoxWidth="80" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxHeight="20" skewFactor="1"/> textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="opCoarse" id="4eec63d30d7488d2" memberName="opCoarse" virtualName="" <SLIDER name="opCoarse" id="4eec63d30d7488d2" memberName="opCoarse" virtualName=""
explicitFocusOrder="0" pos="80 24 24 24" min="0" max="31" int="1" explicitFocusOrder="0" pos="80 24 24 24" min="0" max="31" int="1"
style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1" textBoxWidth="80" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxHeight="20" skewFactor="1"/> textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<LABEL name="khz" id="eb961eed8902a6fc" memberName="khzDisplay" virtualName="" <LABEL name="khz" id="eb961eed8902a6fc" memberName="khzDisplay" virtualName=""
explicitFocusOrder="0" pos="32 8 88 16" bkgCol="6a000000" textCol="ffffffff" explicitFocusOrder="0" pos="32 8 88 16" bkgCol="6a000000" textCol="ffffffff"
outlineCol="0" edTextCol="ff000000" edBkgCol="0" labelText="1,000 kHz" outlineCol="0" edTextCol="ff000000" edBkgCol="0" labelText="1,000 kHz"
@ -561,11 +561,11 @@ BEGIN_JUCER_METADATA
params=""/> params=""/>
<SLIDER name="sclLeftLevel" id="bd6f338ae68e454f" memberName="sclLeftLevel" <SLIDER name="sclLeftLevel" id="bd6f338ae68e454f" memberName="sclLeftLevel"
virtualName="" explicitFocusOrder="0" pos="0 64 24 24" tooltip="Keyboard Scale Level Left Depth " virtualName="" explicitFocusOrder="0" pos="0 64 24 24" tooltip="Keyboard Scale Level Left Depth "
min="0" max="99" int="1" style="Rotary" textBoxPos="NoTextBox" min="0" max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/> textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="sclRightLevel" id="b9e23ed5187fc7e5" memberName="sclRightLevel" <SLIDER name="sclRightLevel" id="b9e23ed5187fc7e5" memberName="sclRightLevel"
virtualName="" explicitFocusOrder="0" pos="64 64 24 24" tooltip="Keyboard Scale Level Right Depth " virtualName="" explicitFocusOrder="0" pos="64 64 24 24" tooltip="Keyboard Scale Level Right Depth "
min="0" max="99" int="1" style="Rotary" textBoxPos="NoTextBox" min="0" max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/> textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<COMBOBOX name="kbdLeftCurve" id="a4b068d60be648ca" memberName="kbdLeftCurve" <COMBOBOX name="kbdLeftCurve" id="a4b068d60be648ca" memberName="kbdLeftCurve"
virtualName="" explicitFocusOrder="0" pos="24 68 40 16" editable="0" virtualName="" explicitFocusOrder="0" pos="24 68 40 16" editable="0"
@ -577,20 +577,20 @@ BEGIN_JUCER_METADATA
textWhenNoItems="(no choices)"/> textWhenNoItems="(no choices)"/>
<SLIDER name="sclLvlBrkPt" id="c563ac3116923bbc" memberName="sclLvlBrkPt" <SLIDER name="sclLvlBrkPt" id="c563ac3116923bbc" memberName="sclLvlBrkPt"
virtualName="" explicitFocusOrder="0" pos="0 40 24 24" tooltip="Scale Level Breakpoint" virtualName="" explicitFocusOrder="0" pos="0 40 24 24" tooltip="Scale Level Breakpoint"
min="0" max="99" int="1" style="Rotary" textBoxPos="NoTextBox" min="0" max="99" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/> textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="sclRateScaling" id="f0d17c8e09aa4c49" memberName="sclRateScaling" <SLIDER name="sclRateScaling" id="f0d17c8e09aa4c49" memberName="sclRateScaling"
virtualName="" explicitFocusOrder="0" pos="0 16 24 24" tooltip="Keyboard Rate Scaling" virtualName="" explicitFocusOrder="0" pos="0 16 24 24" tooltip="Keyboard Rate Scaling"
min="0" max="7" int="1" style="Rotary" textBoxPos="NoTextBox" min="0" max="7" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/> textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="keyVelSens" id="21795d045d07602b" memberName="keyVelSens" <SLIDER name="keyVelSens" id="21795d045d07602b" memberName="keyVelSens"
virtualName="" explicitFocusOrder="0" pos="240 24 24 24" min="0" virtualName="" explicitFocusOrder="0" pos="240 24 24 24" min="0"
max="7" int="1" style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1" max="7" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/> textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="ampModSens" id="634ceaa7b0f81a6c" memberName="ampModSens" <SLIDER name="ampModSens" id="634ceaa7b0f81a6c" memberName="ampModSens"
virtualName="" explicitFocusOrder="0" pos="240 0 24 24" min="0" virtualName="" explicitFocusOrder="0" pos="240 0 24 24" min="0"
max="4" int="1" style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1" max="3" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/> textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<GENERICCOMPONENT name="vu" id="6f952594ea99dc1e" memberName="vu" virtualName="" <GENERICCOMPONENT name="vu" id="6f952594ea99dc1e" memberName="vu" virtualName=""
explicitFocusOrder="0" pos="268 0 12 88" class="VuMeter" params=""/> explicitFocusOrder="0" pos="268 0 12 88" class="VuMeter" params=""/>
</JUCER_COMPONENT> </JUCER_COMPONENT>

@ -32,13 +32,13 @@ ParamDialog::ParamDialog ()
{ {
addAndMakeVisible (pitchRange = new Slider ("pitchRange")); addAndMakeVisible (pitchRange = new Slider ("pitchRange"));
pitchRange->setRange (0, 12, 1); pitchRange->setRange (0, 12, 1);
pitchRange->setSliderStyle (Slider::Rotary); pitchRange->setSliderStyle (Slider::RotaryVerticalDrag);
pitchRange->setTextBoxStyle (Slider::TextBoxLeft, false, 80, 20); pitchRange->setTextBoxStyle (Slider::TextBoxLeft, false, 80, 20);
pitchRange->addListener (this); pitchRange->addListener (this);
addAndMakeVisible (pitchStep = new Slider ("pitchStep")); addAndMakeVisible (pitchStep = new Slider ("pitchStep"));
pitchStep->setRange (0, 12, 1); pitchStep->setRange (0, 12, 1);
pitchStep->setSliderStyle (Slider::Rotary); pitchStep->setSliderStyle (Slider::RotaryVerticalDrag);
pitchStep->setTextBoxStyle (Slider::TextBoxLeft, false, 80, 20); pitchStep->setTextBoxStyle (Slider::TextBoxLeft, false, 80, 20);
pitchStep->addListener (this); pitchStep->addListener (this);
@ -58,7 +58,7 @@ ParamDialog::ParamDialog ()
addAndMakeVisible (sysexChl = new Slider ("sysexChl")); addAndMakeVisible (sysexChl = new Slider ("sysexChl"));
sysexChl->setRange (1, 16, 1); sysexChl->setRange (1, 16, 1);
sysexChl->setSliderStyle (Slider::Rotary); sysexChl->setSliderStyle (Slider::RotaryVerticalDrag);
sysexChl->setTextBoxStyle (Slider::TextBoxLeft, false, 80, 20); sysexChl->setTextBoxStyle (Slider::TextBoxLeft, false, 80, 20);
sysexChl->addListener (this); sysexChl->addListener (this);
@ -66,7 +66,7 @@ ParamDialog::ParamDialog ()
//[UserPreSize] //[UserPreSize]
//[/UserPreSize] //[/UserPreSize]
setSize (280, 300); setSize (330, 300);
//[Constructor] You can add your own custom stuff here.. //[Constructor] You can add your own custom stuff here..
@ -112,19 +112,19 @@ void ParamDialog::paint (Graphics& g)
g.setColour (Colours::white); g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain)); g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("Pitch Bend Range"), g.drawText (TRANS("Pitch Bend Range"),
19, 21, 205, 23, 20, 18, 276, 23,
Justification::centredLeft, true); Justification::centredLeft, true);
g.setColour (Colours::white); g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain)); g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("Pitch Bend Step"), g.drawText (TRANS("Pitch Bend Step"),
19, 61, 229, 23, 20, 58, 276, 23,
Justification::centredLeft, true); Justification::centredLeft, true);
g.setColour (Colours::white); g.setColour (Colours::white);
g.setFont (Font (15.00f, Font::plain)); g.setFont (Font (15.00f, Font::plain));
g.drawText (TRANS("DX7 In"), g.drawText (TRANS("DX7 In"),
19, 178, 131, 23, 20, 178, 131, 23,
Justification::centredLeft, true); Justification::centredLeft, true);
g.setColour (Colours::white); g.setColour (Colours::white);
@ -145,11 +145,11 @@ void ParamDialog::paint (Graphics& g)
void ParamDialog::resized() void ParamDialog::resized()
{ {
pitchRange->setBounds (192, 16, 72, 24); pitchRange->setBounds (240, 16, 72, 24);
pitchStep->setBounds (192, 56, 72, 24); pitchStep->setBounds (240, 56, 72, 24);
sysexIn->setBounds (104, 176, 152, 24); sysexIn->setBounds (96, 176, 208, 24);
sysexOut->setBounds (104, 216, 152, 24); sysexOut->setBounds (96, 216, 208, 24);
sysexChl->setBounds (184, 256, 72, 24); sysexChl->setBounds (240, 256, 72, 24);
//[UserResized] Add your own custom resize handling here.. //[UserResized] Add your own custom resize handling here..
//[/UserResized] //[/UserResized]
} }
@ -248,13 +248,13 @@ BEGIN_JUCER_METADATA
<JUCER_COMPONENT documentType="Component" className="ParamDialog" componentName="" <JUCER_COMPONENT documentType="Component" className="ParamDialog" componentName=""
parentClasses="public Component" constructorParams="" variableInitialisers="" parentClasses="public Component" constructorParams="" variableInitialisers=""
snapPixels="8" snapActive="1" snapShown="1" overlayOpacity="0.330" snapPixels="8" snapActive="1" snapShown="1" overlayOpacity="0.330"
fixedSize="1" initialWidth="280" initialHeight="300"> fixedSize="1" initialWidth="330" initialHeight="300">
<BACKGROUND backgroundColour="ff4e270d"> <BACKGROUND backgroundColour="ff4e270d">
<TEXT pos="19 21 205 23" fill="solid: ffffffff" hasStroke="0" text="Pitch Bend Range" <TEXT pos="20 18 276 23" fill="solid: ffffffff" hasStroke="0" text="Pitch Bend Range"
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/> fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
<TEXT pos="19 61 229 23" fill="solid: ffffffff" hasStroke="0" text="Pitch Bend Step" <TEXT pos="20 58 276 23" fill="solid: ffffffff" hasStroke="0" text="Pitch Bend Step"
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/> fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
<TEXT pos="19 178 131 23" fill="solid: ffffffff" hasStroke="0" text="DX7 In" <TEXT pos="20 178 131 23" fill="solid: ffffffff" hasStroke="0" text="DX7 In"
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/> fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
<TEXT pos="19 218 131 23" fill="solid: ffffffff" hasStroke="0" text="DX7 Out" <TEXT pos="19 218 131 23" fill="solid: ffffffff" hasStroke="0" text="DX7 Out"
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/> fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
@ -262,23 +262,23 @@ BEGIN_JUCER_METADATA
fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/> fontname="Default font" fontsize="15" bold="0" italic="0" justification="33"/>
</BACKGROUND> </BACKGROUND>
<SLIDER name="pitchRange" id="7409be5a8dfaa91" memberName="pitchRange" <SLIDER name="pitchRange" id="7409be5a8dfaa91" memberName="pitchRange"
virtualName="" explicitFocusOrder="0" pos="192 16 72 24" min="0" virtualName="" explicitFocusOrder="0" pos="240 16 72 24" min="0"
max="12" int="1" style="Rotary" textBoxPos="TextBoxLeft" textBoxEditable="1" max="12" int="1" style="RotaryVerticalDrag" textBoxPos="TextBoxLeft"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/> textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="pitchStep" id="b86af4b792e768ca" memberName="pitchStep" <SLIDER name="pitchStep" id="b86af4b792e768ca" memberName="pitchStep"
virtualName="" explicitFocusOrder="0" pos="192 56 72 24" min="0" virtualName="" explicitFocusOrder="0" pos="240 56 72 24" min="0"
max="12" int="1" style="Rotary" textBoxPos="TextBoxLeft" textBoxEditable="1" max="12" int="1" style="RotaryVerticalDrag" textBoxPos="TextBoxLeft"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/> textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<COMBOBOX name="sysexIn" id="3750642d8b5be11" memberName="sysexIn" virtualName="" <COMBOBOX name="sysexIn" id="3750642d8b5be11" memberName="sysexIn" virtualName=""
explicitFocusOrder="0" pos="104 176 152 24" editable="0" layout="33" explicitFocusOrder="0" pos="96 176 208 24" editable="0" layout="33"
items="" textWhenNonSelected="" textWhenNoItems="(no choices)"/> items="" textWhenNonSelected="" textWhenNoItems="(no choices)"/>
<COMBOBOX name="sysexOut" id="44730115841c2214" memberName="sysexOut" virtualName="" <COMBOBOX name="sysexOut" id="44730115841c2214" memberName="sysexOut" virtualName=""
explicitFocusOrder="0" pos="104 216 152 24" editable="0" layout="33" explicitFocusOrder="0" pos="96 216 208 24" editable="0" layout="33"
items="" textWhenNonSelected="" textWhenNoItems="(no choices)"/> items="" textWhenNonSelected="" textWhenNoItems="(no choices)"/>
<SLIDER name="sysexChl" id="7fdc8830f90a7c86" memberName="sysexChl" virtualName="" <SLIDER name="sysexChl" id="7fdc8830f90a7c86" memberName="sysexChl" virtualName=""
explicitFocusOrder="0" pos="184 256 72 24" min="1" max="16" int="1" explicitFocusOrder="0" pos="240 256 72 24" min="1" max="16" int="1"
style="Rotary" textBoxPos="TextBoxLeft" textBoxEditable="1" textBoxWidth="80" style="RotaryVerticalDrag" textBoxPos="TextBoxLeft" textBoxEditable="1"
textBoxHeight="20" skewFactor="1"/> textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
</JUCER_COMPONENT> </JUCER_COMPONENT>
END_JUCER_METADATA END_JUCER_METADATA

@ -313,6 +313,8 @@ void DexedAudioProcessor::setStateInformation(const void* source, int sizeInByte
updateUI(); updateUI();
} }
#define IDX_USER 1000
CartridgeManager::CartridgeManager() { CartridgeManager::CartridgeManager() {
MemoryInputStream *mis = new MemoryInputStream(BinaryData::builtin_pgm_zip, BinaryData::builtin_pgm_zipSize, false); MemoryInputStream *mis = new MemoryInputStream(BinaryData::builtin_pgm_zip, BinaryData::builtin_pgm_zipSize, false);
builtin_pgm = new ZipFile(mis, true); builtin_pgm = new ZipFile(mis, true);
@ -322,17 +324,126 @@ CartridgeManager::CartridgeManager() {
const ZipFile::ZipEntry *e = builtin_pgm->getEntry(i); const ZipFile::ZipEntry *e = builtin_pgm->getEntry(i);
cartNames.add(e->filename.dropLastCharacters(4)); cartNames.add(e->filename.dropLastCharacters(4));
} }
#if JUCE_MAC
userCartFile = File(File::getSpecialLocation(File::currentApplicationFile).getParentDirectory().getFullPathName() + File::separator + "Dexed_cart.zip");
#else
userCartFile = File(File::getSpecialLocation(File::currentApplicationFile).getFullPathName() + File::separator + "Dexed_cart.zip");
#endif
TRACE("Usercart file %s", userCartFile.getFullPathName().toRawUTF8());
}
CartridgeManager::~CartridgeManager() {
} }
void CartridgeManager::getSysex(int idx, char *dest) { void CartridgeManager::getSysex(int idx, char *dest) {
if ( idx < IDX_USER ) {
InputStream *is = builtin_pgm->createStreamForEntry(idx); InputStream *is = builtin_pgm->createStreamForEntry(idx);
if ( is == NULL ) { if ( is == NULL ) {
TRACE("ENTRY IN ZIP NOT FOUND"); TRACE("ENTRY IN ZIP NOT FOUND");
return; return;
} }
is->read(dest, 4104);
delete is;
return;
}
idx -= IDX_USER;
if ( ! userCartFile.exists() )
return;
ZipFile userZip(userCartFile);
userZip.sortEntriesByFilename();
if ( idx < userZip.getNumEntries() ) {
InputStream *is = userZip.createStreamForEntry(idx);
if ( is != NULL ) {
is->read(dest, 4104); is->read(dest, 4104);
delete is; delete is;
} else {
TRACE("USER ENTRY %d NULL ?", idx);
}
}
}
void CartridgeManager::rebuildMenu() {
TRACE("rebuild menu zip");
completeCarts.clear();
if ( userCartFile.exists() ) {
zipIdx = 0;
ZipFile userZip(userCartFile);
userZip.sortEntriesByFilename();
PopupMenu *user = fillContent("", &userZip);
if ( user != NULL ) {
completeCarts.addSubMenu("User", *user);
delete user;
}
lastModifiedUserCartFile = userCartFile.getLastModificationTime();
} else {
lastModifiedUserCartFile = Time(0);
}
for(int i=0;i<cartNames.size();i++) {
completeCarts.addItem(i+1, cartNames[i]);
}
} }
PopupMenu *CartridgeManager::getCarts() {
Time t = userCartFile.getLastModificationTime();
TRACE("DIFF TM: %s %s", t.toString(true, true).toRawUTF8(), lastModifiedUserCartFile.toString(true, true).toRawUTF8());
if ( t != lastModifiedUserCartFile || completeCarts.getNumItems() == 0 ) {
rebuildMenu();
}
return &completeCarts;
}
PopupMenu *CartridgeManager::fillContent(String root, ZipFile *userZip) {
PopupMenu *current = NULL;
while(zipIdx < userZip->getNumEntries() ) {
String path = userZip->getEntry(zipIdx)->filename;
if ( path.endsWith(".DS_Store") || path.startsWith("__MACOSX") ) {
zipIdx++;
continue;
}
if ( ( ! path.startsWith(root) ) && root.length() != 0 )
return current;
String tail = path.substring(root.length());
if ( tail.containsChar('/') ) {
String target = tail.upToFirstOccurrenceOf("/", true, false);
PopupMenu *child = fillContent(root + target, userZip);
if ( child == NULL )
continue;
if ( current == NULL )
current = new PopupMenu();
current->addSubMenu(tail.upToFirstOccurrenceOf("/", false, false), *child);
delete child;
} else {
zipIdx++;
if ( tail.length() == 0 )
continue;
if ( current == NULL )
current = new PopupMenu();
if ( tail.endsWithIgnoreCase(".syx") )
tail = tail.substring(0, tail.length()-4);
current->addItem(zipIdx + IDX_USER, tail);
}
}
return current;
}

@ -66,10 +66,21 @@ void packProgram(uint8_t *dest, uint8_t *src, int idx, String name);
class CartridgeManager { class CartridgeManager {
ScopedPointer<ZipFile> builtin_pgm; ScopedPointer<ZipFile> builtin_pgm;
public: Time lastModifiedUserCartFile;
File userCartFile;
StringArray cartNames; StringArray cartNames;
int zipIdx;
PopupMenu *fillContent(String root, ZipFile *userZip);
PopupMenu completeCarts;
void rebuildMenu();
public:
PopupMenu *getCarts();
CartridgeManager(); CartridgeManager();
~CartridgeManager();
void getSysex(int idx, char *data); void getSysex(int idx, char *data);
}; };

@ -27,8 +27,6 @@
#include "math.h" #include "math.h"
#include <fstream> #include <fstream>
using namespace ::std; using namespace ::std;
class AboutBox : public DialogWindow { class AboutBox : public DialogWindow {
@ -118,9 +116,6 @@ DexedAudioProcessorEditor::DexedAudioProcessorEditor (DexedAudioProcessor* owner
cartButton->setButtonText ("CART"); cartButton->setButtonText ("CART");
cartButton->addListener (this); cartButton->addListener (this);
cartButton->setBounds(5, 6, 50, 18); cartButton->setBounds(5, 6, 50, 18);
for(int i=0;i<processor->cartManager.cartNames.size();i++) {
cartPopup.addItem(i+1, processor->cartManager.cartNames[i]);
}
addAndMakeVisible (loadButton = new TextButton("LOAD")); addAndMakeVisible (loadButton = new TextButton("LOAD"));
loadButton->setButtonText ("LOAD"); loadButton->setButtonText ("LOAD");
@ -226,7 +221,7 @@ void DexedAudioProcessorEditor::paint (Graphics& g) {
void DexedAudioProcessorEditor::buttonClicked(Button *buttonThatWasClicked) { void DexedAudioProcessorEditor::buttonClicked(Button *buttonThatWasClicked) {
if (buttonThatWasClicked == cartButton) { if (buttonThatWasClicked == cartButton) {
int result = cartPopup.show(); int result = processor->cartManager.getCarts()->show();
if ( result < 1 ) if ( result < 1 )
return; return;
@ -367,7 +362,7 @@ void DexedAudioProcessorEditor::timerCallback() {
return; return;
for(int i=0;i<6;i++) { for(int i=0;i<6;i++) {
operators[i].updateGain(sqrt(processor->voiceStatus.amp[5 - i]) / 8196); operators[i].updateGain(sqrt(processor->voiceStatus.amp[5 - i]) / 8196); // TODO: FUGLY !!!! change this sqrt nonsens
operators[i].updateEnvPos(processor->voiceStatus.ampStep[5 - i]); operators[i].updateEnvPos(processor->voiceStatus.ampStep[5 - i]);
} }
global.updatePitchPos(processor->voiceStatus.pitchStep); global.updatePitchPos(processor->voiceStatus.pitchStep);

Loading…
Cancel
Save