Version 0.8.0

pull/1/head
asb2m10 10 years ago
parent a182f23eb8
commit 2681223566
  1. BIN
      Builds/MacOSX/Dexed.xcodeproj/project.xcworkspace/xcuserdata/asb2m10.xcuserdatad/UserInterfaceState.xcuserstate
  2. 5
      README.md
  3. 4
      Source/Dexed.h
  4. 28
      Source/GlobalEditor.cpp
  5. 47
      Source/OperatorEditor.cpp
  6. 2
      Source/OperatorEditor.h
  7. 12
      Source/PluginEditor.cpp
  8. 9
      Source/PluginProcessor.cpp
  9. 25
      Source/msfa/dx7note.cc
  10. 3
      Source/msfa/dx7note.h

@ -29,6 +29,7 @@ in normal operation it shouldn't crash and the VST state saving works. If you do
new version here but you see it in the change log, it's because this version is in development 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. (current sprint). Only officials (tested) builds are listed here.
* Version 0.8.0 [vst win32/x64](http://le-son666.com/software/dexed/dexed-0.8.0-win.zip) - [vst os x](http://le-son666.com/software/dexed/dexed-0.8.0-osx.vst.zip)
* Version 0.7.0 [vst win32/x64](http://le-son666.com/software/dexed/dexed-0.7.0-win.zip) - [vst os x](http://le-son666.com/software/dexed/dexed-0.7.0-osx.vst.zip) * Version 0.7.0 [vst win32/x64](http://le-son666.com/software/dexed/dexed-0.7.0-win.zip) - [vst os x](http://le-son666.com/software/dexed/dexed-0.7.0-osx.vst.zip)
* Version 0.6.1 [vst win32/x64](http://le-son666.com/software/dexed/dexed-0.6.1-win.zip) - [vst os x](http://le-son666.com/software/dexed/dexed-0.6.1-osx.vst.zip) * Version 0.6.1 [vst win32/x64](http://le-son666.com/software/dexed/dexed-0.6.1-win.zip) - [vst os x](http://le-son666.com/software/dexed/dexed-0.6.1-osx.vst.zip)
@ -36,7 +37,8 @@ Changelog
--------- ---------
#### Version 0.8.0 #### Version 0.8.0
* New UI by [AZur Studio](http://bji.yukihotaru.com/) * New UI by [AZur Studio](http://bji.yukihotaru.com/)
* Fixed mono mode ticks on lower frequencies * You can now copy/paste the operator/envelopes values by using the right-click mouse button on the operator
* Fixed some of mono mode ticks on lower frequencies
* SynprezFM preset are now in a submenu * SynprezFM preset are now in a submenu
#### Version 0.7.0 #### Version 0.7.0
@ -150,6 +152,7 @@ TODO - Dexed
* UI threaded messaging to avoid DAW automation 'clicks' * UI threaded messaging to avoid DAW automation 'clicks'
* Zomby UI changes: this occurs in Live and will be fixed in the 0.8.1 version. * Zomby UI changes: this occurs in Live and will be fixed in the 0.8.1 version.
* Various code cleanup * Various code cleanup
* More smothness in mono mode
* AU Version * AU Version
TODO - msfa TODO - msfa

@ -24,14 +24,14 @@
void dexed_trace(const char *source, const char *fmt, ...); void dexed_trace(const char *source, const char *fmt, ...);
#ifdef DEBUG #ifdef DEBUG
#define DEXED_VERSION "0.8.0b1 DEBUG" #define DEXED_VERSION "0.8.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 #else
#define DEXED_VERSION "0.8.0b1" #define DEXED_VERSION "0.8.0"
#define TRACE(fmt, ...) #define TRACE(fmt, ...)
#endif #endif

@ -318,7 +318,7 @@ void GlobalEditor::paint (Graphics& g)
Image myStrip = ImageCache::getFromMemory(BinaryData::Light_14x14_png, BinaryData::Light_14x14_pngSize); Image myStrip = ImageCache::getFromMemory(BinaryData::Light_14x14_png, BinaryData::Light_14x14_pngSize);
g.drawImage(myStrip, 300, 70, 14, 14, 0, monoMode->getToggleState() ? 14 : 0, 14, 14); g.drawImage(myStrip, 300, 70, 14, 14, 0, monoMode->getToggleState() ? 14 : 0, 14, 14);
g.drawImage(myStrip, 621, 102, 14, 14, 0, lfoSync->getToggleState() ? 14 : 0, 14, 14); g.drawImage(myStrip, 619, 102, 14, 14, 0, lfoSync->getToggleState() ? 14 : 0, 14, 14);
g.drawImage(myStrip, 705, 102, 14, 14, 0, oscSync->getToggleState() ? 14 : 0, 14, 14); g.drawImage(myStrip, 705, 102, 14, 14, 0, oscSync->getToggleState() ? 14 : 0, 14, 14);
//[/UserPaint] //[/UserPaint]
} }
@ -330,7 +330,7 @@ void GlobalEditor::resized()
lfoPitchDepth->setBounds (646, 50, 34, 34); lfoPitchDepth->setBounds (646, 50, 34, 34);
lfoDelay->setBounds (603, 50, 34, 34); lfoDelay->setBounds (603, 50, 34, 34);
cutoff->setBounds (234, 9, 34, 34); cutoff->setBounds (234, 9, 34, 34);
reso->setBounds (277, 9, 34, 34); reso->setBounds (278, 9, 34, 34);
pitchRate2->setBounds (767, 96, 34, 34); pitchRate2->setBounds (767, 96, 34, 34);
pitchRate3->setBounds (795, 96, 35, 34); pitchRate3->setBounds (795, 96, 35, 34);
pitchRate4->setBounds (823, 96, 34, 34); pitchRate4->setBounds (823, 96, 34, 34);
@ -342,7 +342,7 @@ void GlobalEditor::resized()
transpose->setBounds (202, 60, 34, 34); transpose->setBounds (202, 60, 34, 34);
oscSync->setBounds (650, 96, 48, 26); oscSync->setBounds (650, 96, 48, 26);
pitchModSens->setBounds (666, 5, 34, 34); pitchModSens->setBounds (666, 5, 34, 34);
lfoSync->setBounds (567, 96, 48, 26); lfoSync->setBounds (565, 96, 48, 26);
pitchEnvDisplay->setBounds (751, 10, 93, 30); pitchEnvDisplay->setBounds (751, 10, 93, 30);
algoDisplay->setBounds (335, 30, 152, 91); algoDisplay->setBounds (335, 30, 152, 91);
feedback->setBounds (501, 81, 34, 34); feedback->setBounds (501, 81, 34, 34);
@ -350,15 +350,15 @@ void GlobalEditor::resized()
lcdDisplay->setBounds (6, 87, 140, 13); lcdDisplay->setBounds (6, 87, 140, 13);
output->setBounds (157, 60, 34, 34); output->setBounds (157, 60, 34, 34);
vuOutput->setBounds (6, 103, 140, 8); vuOutput->setBounds (6, 103, 140, 8);
initButton->setBounds (3, 53, 50, 30); initButton->setBounds (3, 56, 50, 30);
parmButton->setBounds (51, 53, 50, 30); parmButton->setBounds (51, 56, 50, 30);
sendButton->setBounds (99, 53, 50, 30); sendButton->setBounds (99, 56, 50, 30);
cartButton->setBounds (3, 111, 50, 30); cartButton->setBounds (3, 111, 50, 30);
loadButton->setBounds (50, 111, 50, 30); loadButton->setBounds (50, 111, 50, 30);
saveButton->setBounds (98, 111, 50, 30); saveButton->setBounds (98, 111, 50, 30);
storeButton->setBounds (270, 109, 50, 30); storeButton->setBounds (270, 109, 50, 30);
monoMode->setBounds (249, 65, 48, 26); monoMode->setBounds (249, 65, 48, 26);
lfoType->setBounds (584, 8, 36, 26); lfoType->setBounds (583, 8, 36, 26);
programSelector->setBounds (153, 115, 112, 18); programSelector->setBounds (153, 115, 112, 18);
//[UserResized] Add your own custom resize handling here.. //[UserResized] Add your own custom resize handling here..
//[/UserResized] //[/UserResized]
@ -613,7 +613,7 @@ void GlobalEditor::updateVu(float f) {
} }
void GlobalEditor::setMonoState(bool state) { void GlobalEditor::setMonoState(bool state) {
monoMode->setState(state ? Button::ButtonState::buttonDown : Button::ButtonState::buttonNormal); monoMode->setToggleState(state ? Button::ButtonState::buttonDown : Button::ButtonState::buttonNormal, dontSendNotification);
} }
//[/MiscUserCode] //[/MiscUserCode]
@ -656,7 +656,7 @@ BEGIN_JUCER_METADATA
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="0" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="0"
textBoxWidth="80" 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="277 9 34 34" min="0" max="1" int="0" explicitFocusOrder="0" pos="278 9 34 34" min="0" max="1" int="0"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="0" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="0"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/> textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="pitchRate2" id="73f386b3c91d3de4" memberName="pitchRate2" <SLIDER name="pitchRate2" id="73f386b3c91d3de4" memberName="pitchRate2"
@ -703,7 +703,7 @@ BEGIN_JUCER_METADATA
max="7" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox" max="7" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" 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="567 96 48 26" buttonText="" connectedEdges="0" explicitFocusOrder="0" pos="565 96 48 26" buttonText="" connectedEdges="0"
needsCallback="1" radioGroupId="0" state="0"/> needsCallback="1" radioGroupId="0" state="0"/>
<GENERICCOMPONENT name="pitchEnvDisplay" id="9ddaae8ef924a038" memberName="pitchEnvDisplay" <GENERICCOMPONENT name="pitchEnvDisplay" id="9ddaae8ef924a038" memberName="pitchEnvDisplay"
virtualName="" explicitFocusOrder="0" pos="751 10 93 30" class="PitchEnvDisplay" virtualName="" explicitFocusOrder="0" pos="751 10 93 30" class="PitchEnvDisplay"
@ -729,13 +729,13 @@ BEGIN_JUCER_METADATA
<GENERICCOMPONENT name="vuOutput" id="dac75af912267f51" memberName="vuOutput" virtualName="" <GENERICCOMPONENT name="vuOutput" id="dac75af912267f51" memberName="vuOutput" virtualName=""
explicitFocusOrder="0" pos="6 103 140 8" class="VuMeter" params=""/> explicitFocusOrder="0" pos="6 103 140 8" class="VuMeter" params=""/>
<TEXTBUTTON name="initButton" id="92b278163c42e21d" memberName="initButton" <TEXTBUTTON name="initButton" id="92b278163c42e21d" memberName="initButton"
virtualName="" explicitFocusOrder="0" pos="3 53 50 30" buttonText="INIT" virtualName="" explicitFocusOrder="0" pos="3 56 50 30" buttonText="INIT"
connectedEdges="0" needsCallback="1" radioGroupId="0"/> connectedEdges="0" needsCallback="1" radioGroupId="0"/>
<TEXTBUTTON name="parmButton" id="d5cd6260b34be817" memberName="parmButton" <TEXTBUTTON name="parmButton" id="d5cd6260b34be817" memberName="parmButton"
virtualName="" explicitFocusOrder="0" pos="51 53 50 30" buttonText="PARM" virtualName="" explicitFocusOrder="0" pos="51 56 50 30" buttonText="PARM"
connectedEdges="0" needsCallback="1" radioGroupId="0"/> connectedEdges="0" needsCallback="1" radioGroupId="0"/>
<TEXTBUTTON name="sendButton" id="9b45b291c75c7b3f" memberName="sendButton" <TEXTBUTTON name="sendButton" id="9b45b291c75c7b3f" memberName="sendButton"
virtualName="" explicitFocusOrder="0" pos="99 53 50 30" buttonText="SEND" virtualName="" explicitFocusOrder="0" pos="99 56 50 30" buttonText="SEND"
connectedEdges="0" needsCallback="1" radioGroupId="0"/> connectedEdges="0" needsCallback="1" radioGroupId="0"/>
<TEXTBUTTON name="cartButton" id="465a101c3a0e744" memberName="cartButton" <TEXTBUTTON name="cartButton" id="465a101c3a0e744" memberName="cartButton"
virtualName="" explicitFocusOrder="0" pos="3 111 50 30" buttonText="CART" virtualName="" explicitFocusOrder="0" pos="3 111 50 30" buttonText="CART"
@ -753,7 +753,7 @@ BEGIN_JUCER_METADATA
explicitFocusOrder="0" pos="249 65 48 26" buttonText="" connectedEdges="0" explicitFocusOrder="0" pos="249 65 48 26" buttonText="" connectedEdges="0"
needsCallback="1" radioGroupId="0" state="0"/> needsCallback="1" radioGroupId="0" state="0"/>
<GENERICCOMPONENT name="lfoType" id="62f61dda9f76c8f" memberName="lfoType" virtualName="" <GENERICCOMPONENT name="lfoType" id="62f61dda9f76c8f" memberName="lfoType" virtualName=""
explicitFocusOrder="0" pos="584 8 36 26" class="ComboBoxImage" explicitFocusOrder="0" pos="583 8 36 26" class="ComboBoxImage"
params=""/> params=""/>
<GENERICCOMPONENT name="programSelector" id="990bbcccae72dbe6" memberName="programSelector" <GENERICCOMPONENT name="programSelector" id="990bbcccae72dbe6" memberName="programSelector"
virtualName="" explicitFocusOrder="0" pos="153 115 112 18" class="ProgramSelector" virtualName="" explicitFocusOrder="0" pos="153 115 112 18" class="ProgramSelector"

@ -244,7 +244,7 @@ void OperatorEditor::paint (Graphics& g)
//[UserPaint] Add your own custom painting code here.. //[UserPaint] Add your own custom painting code here..
g.setColour (Colours::white); g.setColour (Colours::white);
g.setFont(Font (30.00f, Font::plain)); g.setFont(Font (30.00f, Font::plain));
g.drawText(opNum, 242, 10, 30, 30, Justification::centred, true); g.drawText(opNum, 242, 8, 30, 30, Justification::centred, true);
Image myStrip = ImageCache::getFromMemory(BinaryData::Light_14x14_png, BinaryData::Light_14x14_pngSize); Image myStrip = ImageCache::getFromMemory(BinaryData::Light_14x14_png, BinaryData::Light_14x14_pngSize);
@ -253,7 +253,7 @@ void OperatorEditor::paint (Graphics& g)
// 129 x 24 // 129 x 24
g.drawImage(myStrip, 127, 24, 14, 14, 0, state ? 0 : 14, 14, 14); g.drawImage(myStrip, 127, 24, 14, 14, 0, state ? 0 : 14, 14, 14);
// 199 x 24 // 199 x 24
g.drawImage(myStrip, 199, 24, 14, 14, 0, !state ? 0 : 14, 14, 14); g.drawImage(myStrip, 198, 24, 14, 14, 0, !state ? 0 : 14, 14, 14);
//[/UserPaint] //[/UserPaint]
} }
@ -268,9 +268,9 @@ void OperatorEditor::resized()
s_egv2->setBounds (33, 169, 34, 34); s_egv2->setBounds (33, 169, 34, 34);
s_egv3->setBounds (61, 169, 34, 34); s_egv3->setBounds (61, 169, 34, 34);
s_egv4->setBounds (89, 169, 34, 34); s_egv4->setBounds (89, 169, 34, 34);
opLevel->setBounds (244, 74, 34, 34); opLevel->setBounds (245, 76, 34, 34);
opFine->setBounds (78, 24, 34, 34); opFine->setBounds (78, 24, 34, 34);
opCoarse->setBounds (41, 24, 34, 34); opCoarse->setBounds (43, 24, 34, 34);
khzDisplay->setBounds (15, 10, 95, 10); khzDisplay->setBounds (15, 10, 95, 10);
detune->setBounds (6, 24, 34, 34); detune->setBounds (6, 24, 34, 34);
envDisplay->setBounds (16, 83, 94, 30); envDisplay->setBounds (16, 83, 94, 30);
@ -278,12 +278,12 @@ void OperatorEditor::resized()
sclRightLevel->setBounds (241, 115, 34, 34); sclRightLevel->setBounds (241, 115, 34, 34);
sclLvlBrkPt->setBounds (178, 130, 54, 24); sclLvlBrkPt->setBounds (178, 130, 54, 24);
sclRateScaling->setBounds (186, 179, 34, 34); sclRateScaling->setBounds (186, 179, 34, 34);
keyVelSens->setBounds (204, 74, 34, 34); keyVelSens->setBounds (204, 76, 34, 34);
ampModSens->setBounds (141, 75, 34, 34); ampModSens->setBounds (140, 76, 34, 34);
vu->setBounds (132, 52, 140, 8); vu->setBounds (132, 52, 140, 8);
opMode->setBounds (147, 19, 48, 26); opMode->setBounds (146, 19, 48, 26);
kbdLeftCurve->setBounds (129, 170, 36, 26); kbdLeftCurve->setBounds (128, 170, 36, 26);
kbdRightCurve->setBounds (241, 170, 36, 26); kbdRightCurve->setBounds (240, 170, 36, 26);
//[UserResized] Add your own custom resize handling here.. //[UserResized] Add your own custom resize handling here..
//[/UserResized] //[/UserResized]
} }
@ -444,7 +444,7 @@ void OperatorEditor::bind(DexedAudioProcessor *parent, int op) {
int offset = parent->opCtrl[op].egRate[0]->getOffset(); int offset = parent->opCtrl[op].egRate[0]->getOffset();
envDisplay->pvalues = &(parent->data[offset]); envDisplay->pvalues = &(parent->data[offset]);
processor = parent; processor = parent;
opNum << op + 1; opNum << op + 1;
internalOp = 5-op; internalOp = 5-op;
} }
@ -489,16 +489,16 @@ void OperatorEditor::updateEnvPos(char pos) {
void OperatorEditor::mouseDown(const MouseEvent &event) { void OperatorEditor::mouseDown(const MouseEvent &event) {
if ( event.mods.isRightButtonDown() ) { if ( event.mods.isRightButtonDown() ) {
PopupMenu popup; PopupMenu popup;
popup.addItem(1, "Copy Operator Values"); popup.addItem(1, "Copy Operator Values");
popup.addItem(2, "Paste Enveloppes Values", processor->hasClipboardContent()); popup.addItem(2, "Paste Enveloppe Values", processor->hasClipboardContent());
popup.addItem(3, "Paste Operator Values", processor->hasClipboardContent()); popup.addItem(3, "Paste Operator Values", processor->hasClipboardContent());
switch(popup.show()) { switch(popup.show()) {
case 1: case 1:
processor->copyToClipboard(internalOp); processor->copyToClipboard(internalOp);
break; break;
case 2: case 2:
processor->pasteEnvFromClipboard(internalOp); processor->pasteEnvFromClipboard(internalOp);
break; break;
@ -507,7 +507,7 @@ void OperatorEditor::mouseDown(const MouseEvent &event) {
processor->pasteOpFromClipboard(internalOp); processor->pasteOpFromClipboard(internalOp);
break; break;
} }
} }
} }
@ -564,7 +564,7 @@ BEGIN_JUCER_METADATA
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/> textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="opLevel" id="f8521c8214fb8993" memberName="opLevel" virtualName="" <SLIDER name="opLevel" id="f8521c8214fb8993" memberName="opLevel" virtualName=""
explicitFocusOrder="0" pos="244 74 34 34" min="0" max="99" int="1" explicitFocusOrder="0" pos="245 76 34 34" min="0" max="99" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" 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=""
@ -572,14 +572,15 @@ BEGIN_JUCER_METADATA
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" 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="41 24 34 34" min="0" max="31" int="1" explicitFocusOrder="0" pos="43 24 34 34" min="0" max="31" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" 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="15 10 95 10" bkgCol="6a000000" textCol="ffffffff" explicitFocusOrder="0" pos="15 10 95 10" bkgCol="6a000000" textCol="ffffffff"
outlineCol="0" edTextCol="ff000000" edBkgCol="0" labelText="1,000 kHz" outlineCol="0" edTextCol="ff000000" edBkgCol="0" labelText="1,000 kHz"
editableSingleClick="0" editableDoubleClick="0" focusDiscardsChanges="0" editableSingleClick="0" editableDoubleClick="0" focusDiscardsChanges="0"
fontname="Default font" fontsize="12.6" bold="0" italic="0" justification="36"/> fontname="Default font" fontsize="12.599999999999999645" bold="0"
italic="0" justification="36"/>
<SLIDER name="detune" id="f093ec8defca2fc2" memberName="detune" virtualName="" <SLIDER name="detune" id="f093ec8defca2fc2" memberName="detune" virtualName=""
explicitFocusOrder="0" pos="6 24 34 34" min="-7" max="7" int="1" explicitFocusOrder="0" pos="6 24 34 34" min="-7" max="7" int="1"
style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="0" style="RotaryVerticalDrag" textBoxPos="NoTextBox" textBoxEditable="0"
@ -604,23 +605,23 @@ BEGIN_JUCER_METADATA
min="0" max="7" int="1" style="RotaryVerticalDrag" 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="204 74 34 34" min="0" virtualName="" explicitFocusOrder="0" pos="204 76 34 34" min="0"
max="7" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox" 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="ampModSens" id="634ceaa7b0f81a6c" memberName="ampModSens" <SLIDER name="ampModSens" id="634ceaa7b0f81a6c" memberName="ampModSens"
virtualName="" explicitFocusOrder="0" pos="141 75 34 34" min="0" virtualName="" explicitFocusOrder="0" pos="140 76 34 34" min="0"
max="3" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox" max="3" int="1" style="RotaryVerticalDrag" textBoxPos="NoTextBox"
textBoxEditable="1" 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="132 52 140 8" class="VuMeter" params=""/> explicitFocusOrder="0" pos="132 52 140 8" class="VuMeter" params=""/>
<TOGGLEBUTTON name="opMode" id="15db8e5c9dd13966" memberName="opMode" virtualName="" <TOGGLEBUTTON name="opMode" id="15db8e5c9dd13966" memberName="opMode" virtualName=""
explicitFocusOrder="0" pos="147 19 48 26" buttonText="" connectedEdges="0" explicitFocusOrder="0" pos="146 19 48 26" buttonText="" connectedEdges="0"
needsCallback="1" radioGroupId="0" state="0"/> needsCallback="1" radioGroupId="0" state="0"/>
<GENERICCOMPONENT name="kbdLeftCurve" id="ee4e60dfcd6cb790" memberName="kbdLeftCurve" <GENERICCOMPONENT name="kbdLeftCurve" id="ee4e60dfcd6cb790" memberName="kbdLeftCurve"
virtualName="" explicitFocusOrder="0" pos="129 170 36 26" class="ComboBoxImage" virtualName="" explicitFocusOrder="0" pos="128 170 36 26" class="ComboBoxImage"
params=""/> params=""/>
<GENERICCOMPONENT name="kbdRightCurve" id="f5ca44d67593488a" memberName="kbdRightCurve" <GENERICCOMPONENT name="kbdRightCurve" id="f5ca44d67593488a" memberName="kbdRightCurve"
virtualName="" explicitFocusOrder="0" pos="241 170 36 26" class="ComboBoxImage" virtualName="" explicitFocusOrder="0" pos="240 170 36 26" class="ComboBoxImage"
params=""/> params=""/>
</JUCER_COMPONENT> </JUCER_COMPONENT>

@ -70,7 +70,7 @@ private:
//[UserVariables] -- You can add your own custom variables in this section. //[UserVariables] -- You can add your own custom variables in this section.
String opNum; String opNum;
int internalOp; int internalOp;
DexedAudioProcessor *processor; DexedAudioProcessor *processor;
//[/UserVariables] //[/UserVariables]

@ -64,7 +64,7 @@ DexedAudioProcessorEditor::DexedAudioProcessorEditor (DexedAudioProcessor* owner
{ {
LookAndFeel::setDefaultLookAndFeel(&dx_lnf); LookAndFeel::setDefaultLookAndFeel(&dx_lnf);
setSize (866, ownerFilter->showKeyboard ? 677 : 583); setSize (866, ownerFilter->showKeyboard ? 674 : 581);
processor = ownerFilter; processor = ownerFilter;
@ -85,15 +85,15 @@ DexedAudioProcessorEditor::DexedAudioProcessorEditor (DexedAudioProcessor* owner
operators[2].bind(processor, 2); operators[2].bind(processor, 2);
addAndMakeVisible(&(operators[3])); addAndMakeVisible(&(operators[3]));
operators[3].setBounds(2, 220, 287, 218); operators[3].setBounds(2, 219, 287, 218);
operators[3].bind(processor, 3); operators[3].bind(processor, 3);
addAndMakeVisible(&(operators[4])); addAndMakeVisible(&(operators[4]));
operators[4].setBounds(290, 220, 287, 218); operators[4].setBounds(290, 219, 287, 218);
operators[4].bind(processor, 4); operators[4].bind(processor, 4);
addAndMakeVisible(&(operators[5])); addAndMakeVisible(&(operators[5]));
operators[5].setBounds(578, 220, 287, 218); operators[5].setBounds(578, 219, 287, 218);
operators[5].bind(processor, 5); operators[5].bind(processor, 5);
// add the midi keyboard component.. // add the midi keyboard component..
@ -102,10 +102,10 @@ DexedAudioProcessorEditor::DexedAudioProcessorEditor (DexedAudioProcessor* owner
// The DX7 is a badass on the bass, keep it that way // The DX7 is a badass on the bass, keep it that way
midiKeyboard.setLowestVisibleKey(24); midiKeyboard.setLowestVisibleKey(24);
midiKeyboard.setBounds(4, 583, getWidth() - 8, 90); midiKeyboard.setBounds(4, 581, getWidth() - 8, 90);
addAndMakeVisible(&global); addAndMakeVisible(&global);
global.setBounds(2,437,864,144); global.setBounds(2,436,864,144);
global.bind(this); global.bind(this);
sendPopup.addItem(1, "Send program to DX7"); sendPopup.addItem(1, "Send program to DX7");

@ -50,8 +50,8 @@ DexedAudioProcessor::DexedAudioProcessor() {
currentNote = -1; currentNote = -1;
vuSignal = 0; vuSignal = 0;
monoMode = 0;
initCtrl(); initCtrl();
setCurrentProgram(0);
sendSysexChange = true; sendSysexChange = true;
normalizeDxVelocity = false; normalizeDxVelocity = false;
sysexComm.listener = this; sysexComm.listener = this;
@ -73,6 +73,7 @@ DexedAudioProcessor::DexedAudioProcessor() {
for (int note = 0; note < MAX_ACTIVE_NOTES; ++note) { for (int note = 0; note < MAX_ACTIVE_NOTES; ++note) {
voices[note].dx7_note = NULL; voices[note].dx7_note = NULL;
} }
setCurrentProgram(0);
nextMidi = NULL; nextMidi = NULL;
midiMsg = NULL; midiMsg = NULL;
@ -344,9 +345,10 @@ void DexedAudioProcessor::keydown(uint8_t pitch, uint8_t velo) {
if ( monoMode ) { if ( monoMode ) {
for(int i=0; i<MAX_ACTIVE_NOTES; i++) { for(int i=0; i<MAX_ACTIVE_NOTES; i++) {
if ( voices[i].live ) { if ( voices[i].live ) {
// all keys are up, don't transfert anything // all keys are up, only transfert signal
if ( ! voices[i].keydown ) { if ( ! voices[i].keydown ) {
voices[i].live = false; voices[i].live = false;
voices[note].dx7_note->transferSignal(*voices[i].dx7_note);
break; break;
} }
if ( voices[i].midi_note < pitch ) { if ( voices[i].midi_note < pitch ) {
@ -407,6 +409,9 @@ void DexedAudioProcessor::panic() {
for(int i=0;i<MAX_ACTIVE_NOTES;i++) { for(int i=0;i<MAX_ACTIVE_NOTES;i++) {
voices[i].keydown = false; voices[i].keydown = false;
voices[i].live = false; voices[i].live = false;
if ( voices[i].dx7_note != NULL ) {
voices[i].dx7_note->firstUse();
}
} }
keyboardState.reset(); keyboardState.reset();
} }

@ -132,6 +132,13 @@ static const uint32_t ampmodsenstab[] = {
0, 4342338, 7171437, 16777216 0, 4342338, 7171437, 16777216
}; };
Dx7Note::Dx7Note() {
for(int op=0;op<6;op++) {
params_[op].phase = 0;
params_[op].gain_out = 0;
}
}
void Dx7Note::init(const char patch[156], int midinote, int velocity) { void Dx7Note::init(const char patch[156], int midinote, int velocity) {
int rates[4]; int rates[4];
int levels[4]; int levels[4];
@ -168,8 +175,8 @@ void Dx7Note::init(const char patch[156], int midinote, int velocity) {
int32_t freq = osc_freq(midinote, mode, coarse, fine, detune); int32_t freq = osc_freq(midinote, mode, coarse, fine, detune);
basepitch_[op] = freq; basepitch_[op] = freq;
// cout << op << " freq: " << freq << endl; // cout << op << " freq: " << freq << endl;
params_[op].phase = 0; //params_[op].phase = 0;
params_[op].gain_out = 0; //params_[op].gain_out = 0;
ampmodsens_[op] = ampmodsenstab[patch[off + 14] & 3]; ampmodsens_[op] = ampmodsenstab[patch[off + 14] & 3];
} }
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
@ -274,3 +281,17 @@ void Dx7Note::transferState(Dx7Note &src) {
} }
} }
void Dx7Note::transferSignal(Dx7Note &src) {
for (int i=0;i<6;i++) {
params_[i].gain_out = src.params_[i].gain_out;
params_[i].phase = src.params_[i].phase;
//params_[i].phase = 0;
}
}
void Dx7Note::firstUse() {
for (int i=0;i<6;i++) {
params_[i].gain_out = 0;
params_[i].phase = 0;
}
}

@ -35,6 +35,7 @@ struct VoiceStatus {
class Dx7Note { class Dx7Note {
public: public:
Dx7Note();
void init(const char patch[156], int midinote, int velocity); void init(const char patch[156], int midinote, int velocity);
// Note: this _adds_ to the buffer. Interesting question whether it's // Note: this _adds_ to the buffer. Interesting question whether it's
@ -53,6 +54,8 @@ class Dx7Note {
void update(const char patch[156], int midinote); void update(const char patch[156], int midinote);
void peekVoiceStatus(VoiceStatus &status); void peekVoiceStatus(VoiceStatus &status);
void transferState(Dx7Note& src); void transferState(Dx7Note& src);
void transferSignal(Dx7Note &src);
void firstUse();
private: private:
Env env_[6]; Env env_[6];

Loading…
Cancel
Save