DX Look And Feel and Sysex midiout

pull/1/head
asb2m10 11 years ago
parent 909d864af7
commit 9b4b92753e
  1. 2
      Builds/MacOSX/Dexed.xcodeproj/project.pbxproj
  2. BIN
      Builds/MacOSX/Dexed.xcodeproj/project.xcworkspace/xcuserdata/asb2m10.xcuserdatad/UserInterfaceState.xcuserstate
  3. 5
      Builds/MacOSX/Dexed.xcodeproj/xcuserdata/asb2m10.xcuserdatad/xcschemes/xcschememanagement.plist
  4. 38
      Builds/VisualStudio2012/Dexed.sln
  5. 3078
      Builds/VisualStudio2012/Dexed.vcxproj
  6. 5290
      Builds/VisualStudio2012/Dexed.vcxproj.filters
  7. 60
      Builds/VisualStudio2012/resources.rc
  8. 1
      Dexed.jucer
  9. 181
      JuceLibraryCode/BinaryData.cpp
  10. 3
      JuceLibraryCode/BinaryData.h
  11. 42
      Source/DXLookNFeel.cpp
  12. 16
      Source/DXLookNFeel.h
  13. 71
      Source/GlobalEditor.cpp
  14. 5
      Source/GlobalEditor.h
  15. 285
      Source/OperatorEditor.cpp
  16. 14
      Source/OperatorEditor.h
  17. 156
      Source/PluginEditor.cpp
  18. 17
      Source/PluginEditor.h
  19. 131
      Source/PluginParam.cpp
  20. 31
      Source/PluginParam.h
  21. 39
      Source/PluginProcessor.cpp
  22. 62
      Source/PluginProcessor.h

@ -142,6 +142,7 @@
1D31136D1C9D959792023095 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeTime.cpp"; path = "../../JuceLibraryCode/modules/juce_core/time/juce_RelativeTime.cpp"; sourceTree = "SOURCE_ROOT"; };
1D798858682A27299589F4E5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentListener.cpp"; path = "../../JuceLibraryCode/modules/juce_gui_basics/components/juce_ComponentListener.cpp"; sourceTree = "SOURCE_ROOT"; };
1D95A78059DCCC7B58782F07 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSampleBuffer.h"; path = "../../JuceLibraryCode/modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h"; sourceTree = "SOURCE_ROOT"; };
1DC9D8AC8B4311052BC86115 = { isa = PBXFileReference; lastKnownFileType = image.png; name = background.png; path = ../../Resources/background.png; sourceTree = "SOURCE_ROOT"; };
1E1A0627C2977D5FCB8440CC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel.h"; path = "../../JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h"; sourceTree = "SOURCE_ROOT"; };
1EB6398B6F537A4302092240 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditorKeyMapper.h"; path = "../../JuceLibraryCode/modules/juce_gui_basics/keyboard/juce_TextEditorKeyMapper.h"; sourceTree = "SOURCE_ROOT"; };
1F51658DEF590741920719FF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MACAddress.cpp"; path = "../../JuceLibraryCode/modules/juce_core/network/juce_MACAddress.cpp"; sourceTree = "SOURCE_ROOT"; };
@ -850,6 +851,7 @@
FF5B77AA3517B4637F862BD3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinatePositioner.cpp"; path = "../../JuceLibraryCode/modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.cpp"; sourceTree = "SOURCE_ROOT"; };
FF6607118B29435E76806DFA = { isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Dexed.component; sourceTree = "BUILT_PRODUCTS_DIR"; };
F472964B0FFEE5615B72CE3D = { isa = PBXGroup; children = (
1DC9D8AC8B4311052BC86115,
E93431088B4E40AC9A48D817 ); name = Resources; sourceTree = "<group>"; };
BDC5059F1563FD8DD69AD324 = { isa = PBXGroup; children = (
3715DFDD7A1B12083F051F5A,

@ -9,6 +9,11 @@
<key>orderHint</key>
<integer>0</integer>
</dict>
<key>Release.xcscheme</key>
<dict>
<key>orderHint</key>
<integer>1</integer>
</dict>
</dict>
<key>SuppressBuildableAutocreation</key>
<dict>

@ -1,19 +1,19 @@
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2012
Project("{BD26B4C3-163D-4785-A63F-D3E66858BFF3}") = "Dexed", "Dexed.vcxproj", "{1A9EF105-5BF5-9FB6-9634-A91A6D840866}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{1A9EF105-5BF5-9FB6-9634-A91A6D840866}.Debug|Win32.ActiveCfg = Debug|Win32
{1A9EF105-5BF5-9FB6-9634-A91A6D840866}.Debug|Win32.Build.0 = Debug|Win32
{1A9EF105-5BF5-9FB6-9634-A91A6D840866}.Release|Win32.ActiveCfg = Release|Win32
{1A9EF105-5BF5-9FB6-9634-A91A6D840866}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2012
Project("{BD26B4C3-163D-4785-A63F-D3E66858BFF3}") = "Dexed", "Dexed.vcxproj", "{1A9EF105-5BF5-9FB6-9634-A91A6D840866}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{1A9EF105-5BF5-9FB6-9634-A91A6D840866}.Debug|Win32.ActiveCfg = Debug|Win32
{1A9EF105-5BF5-9FB6-9634-A91A6D840866}.Debug|Win32.Build.0 = Debug|Win32
{1A9EF105-5BF5-9FB6-9634-A91A6D840866}.Release|Win32.ActiveCfg = Release|Win32
{1A9EF105-5BF5-9FB6-9634-A91A6D840866}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -1,30 +1,30 @@
#ifdef JUCE_USER_DEFINED_RC_FILE
#include JUCE_USER_DEFINED_RC_FILE
#else
#undef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,0
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904E4"
BEGIN
VALUE "CompanyName", "Digital Suburban\0"
VALUE "FileDescription", "Dexed\0"
VALUE "FileVersion", "1.0.0\0"
VALUE "ProductName", "Dexed\0"
VALUE "ProductVersion", "1.0.0\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 65001
END
END
#endif
#ifdef JUCE_USER_DEFINED_RC_FILE
#include JUCE_USER_DEFINED_RC_FILE
#else
#undef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,0
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904E4"
BEGIN
VALUE "CompanyName", "Digital Suburban\0"
VALUE "FileDescription", "Dexed\0"
VALUE "FileVersion", "1.0.0\0"
VALUE "ProductName", "Dexed\0"
VALUE "ProductVersion", "1.0.0\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 65001
END
END
#endif

@ -11,6 +11,7 @@
jucerVersion="3.1.0" companyName="Digital Suburban">
<MAINGROUP id="kHXTgw" name="Dexed">
<GROUP id="{F12593AE-639A-6F59-5819-ACE25AF86F95}" name="Resources">
<FILE id="oUNugM" name="background.png" compile="0" resource="1" file="Resources/background.png"/>
<FILE id="CGMSPp" name="startup.syx" compile="0" resource="1" file="Resources/startup.syx"/>
</GROUP>
<GROUP id="{EA38D88A-6B79-E394-8B57-FA22D50C4D86}" name="Source">

@ -7,8 +7,181 @@
namespace BinaryData
{
//================== startup.syx ==================
//================== background.png ==================
static const unsigned char temp_binary_data_0[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,3,97,0,0,1,164,8,6,0,0,1,207,177,29,135,0,0,0,6,98,75,71,68,0,0,0,0,0,0,249,67,187,127,0,0,0,9,112,72,89,115,0,0,22,37,0,0,22,37,1,73,82,36,240,0,0,0,7,116,73,77,69,7,221,12,23,5,36,39,56,99,177,80,0,
0,32,0,73,68,65,84,120,218,237,221,73,150,235,184,181,40,80,29,45,76,194,109,55,236,33,120,48,30,119,54,179,237,55,10,188,70,102,220,43,69,72,98,133,146,220,123,125,255,124,113,37,177,0,8,28,28,22,96,252,247,63,255,202,183,191,197,173,128,56,244,49,43,
202,42,245,222,0,182,151,87,82,81,99,202,107,42,45,10,151,184,10,171,39,221,110,183,219,63,254,249,239,219,237,22,127,21,116,60,20,123,188,170,204,80,49,69,186,160,248,124,176,191,250,78,252,85,75,247,223,255,144,111,249,241,59,145,87,53,225,188,208,
148,121,215,247,229,143,101,250,178,96,243,237,150,243,175,238,49,254,250,194,99,165,229,248,245,207,79,117,158,243,83,107,91,211,7,107,88,107,42,238,185,91,251,171,58,242,223,95,137,167,198,148,94,45,43,94,252,145,191,87,220,215,95,250,200,67,131,138,
120,106,70,207,149,151,191,45,33,254,110,76,247,219,183,30,49,222,172,241,109,219,210,71,22,174,208,252,92,166,249,231,231,233,91,99,124,174,249,111,127,189,60,58,30,255,37,27,161,20,171,184,95,197,248,179,180,211,83,41,63,133,182,88,92,73,188,91,109,
86,115,37,242,163,231,184,246,56,228,143,15,95,126,25,208,214,246,213,250,203,213,181,245,161,135,122,85,244,233,221,55,214,86,220,158,224,171,154,62,245,80,175,191,245,56,96,79,159,170,246,231,112,95,204,170,57,146,252,93,180,63,71,16,249,161,236,211,
250,213,196,199,127,162,81,53,231,219,45,197,251,8,248,240,103,124,72,16,215,5,85,182,85,209,226,89,254,167,58,138,229,250,14,193,172,248,72,113,75,229,165,245,139,208,132,170,6,181,88,191,128,244,163,90,222,214,79,254,112,20,168,208,178,149,153,63,14,
218,211,145,134,245,242,220,24,197,43,241,123,227,188,191,109,175,98,211,176,210,199,22,178,113,104,175,158,171,140,73,126,184,171,141,113,19,237,143,45,77,174,53,70,197,197,202,42,77,117,134,165,236,235,30,243,170,239,167,38,237,89,229,191,44,204,189,
103,3,211,251,17,126,110,211,39,176,178,242,242,175,122,74,251,154,131,82,239,58,228,207,139,1,81,69,181,108,113,107,186,202,116,187,221,110,255,247,231,31,69,130,144,80,213,102,228,114,95,215,134,220,110,53,84,247,184,185,46,226,120,243,230,216,136,
37,237,250,213,135,26,85,113,45,90,90,185,20,254,215,135,125,43,46,30,182,224,156,93,250,189,214,216,176,95,113,229,211,143,118,211,161,152,180,144,21,174,187,135,157,221,45,173,117,179,242,8,64,193,152,182,251,238,184,3,129,236,172,21,23,173,42,173,
73,74,127,173,17,122,241,74,76,213,183,84,16,27,188,165,93,177,15,236,208,71,38,199,109,187,131,245,241,153,246,168,81,105,110,215,31,183,227,73,75,213,35,215,170,92,83,113,168,165,105,91,179,52,185,244,115,148,190,190,109,101,173,174,75,237,165,109,
233,213,251,246,45,69,107,55,148,94,119,61,109,229,179,77,90,94,227,60,237,99,68,219,81,27,91,142,37,21,124,112,200,223,163,155,171,153,119,199,21,42,109,177,226,38,27,100,158,241,68,204,93,105,76,217,210,242,226,112,254,109,151,35,181,235,34,90,78,60,
173,110,143,23,99,234,185,114,14,12,64,66,69,77,49,112,170,246,32,161,202,170,212,194,254,154,100,250,175,34,126,158,213,54,94,204,114,27,38,80,45,118,36,47,77,52,253,226,243,120,154,100,250,231,47,127,52,203,120,62,61,229,238,169,157,125,221,194,36,
211,207,223,123,254,240,105,50,206,167,137,56,243,237,231,188,211,95,43,50,193,244,241,240,240,97,130,233,175,251,177,127,77,186,243,171,91,123,156,92,250,169,130,62,77,126,43,7,43,121,174,97,237,228,210,95,149,119,255,254,227,88,181,166,172,95,172,89,
153,47,202,52,191,26,37,174,153,84,250,227,52,211,90,94,129,74,251,54,29,85,126,110,113,233,253,176,239,245,76,89,171,78,102,153,80,250,112,144,203,143,35,139,252,42,15,203,183,215,111,177,216,209,47,223,110,38,147,222,84,75,11,147,117,199,98,226,252,
125,41,59,186,58,213,181,212,144,242,135,2,123,63,145,116,250,92,71,223,38,181,21,163,170,141,22,151,198,7,95,147,72,223,63,215,244,227,252,48,154,79,159,10,125,30,138,167,183,19,67,127,78,251,60,44,81,177,210,214,79,28,125,116,210,104,173,239,182,231,
216,95,51,216,120,61,232,120,89,189,207,63,119,111,98,245,83,30,31,23,144,214,183,73,19,70,183,171,204,252,242,253,129,79,45,236,221,11,234,214,173,195,100,209,181,42,240,197,68,209,204,36,149,188,23,209,120,163,248,248,227,135,251,170,90,80,19,205,147,
232,143,195,122,185,84,255,74,91,123,73,120,253,196,208,42,177,114,183,88,122,82,232,92,113,171,243,228,127,239,108,91,91,114,218,95,115,11,231,141,77,178,122,103,62,251,223,59,119,63,86,126,115,199,100,208,70,32,93,135,245,235,107,90,69,181,232,104,
98,161,11,77,255,251,243,143,21,205,177,196,55,40,49,66,185,175,175,255,44,105,30,162,75,44,248,128,178,51,249,245,251,204,109,83,66,228,188,240,69,19,63,55,27,116,148,137,142,121,176,150,118,190,137,159,239,149,91,240,32,99,175,147,14,235,75,78,244,
252,169,184,116,153,133,90,88,110,116,16,187,29,191,96,12,219,21,127,76,240,220,172,39,41,247,80,186,155,76,23,15,198,24,170,194,62,53,25,149,56,96,11,187,106,191,183,178,79,172,58,125,186,228,183,252,129,250,244,228,107,141,22,38,36,141,217,225,152,
204,185,119,77,197,238,22,166,77,205,208,220,138,76,226,172,138,219,213,218,193,215,52,134,138,107,60,100,78,95,207,60,199,174,148,61,191,253,75,229,85,206,195,86,77,220,92,225,182,109,21,91,51,113,174,144,160,153,176,249,96,133,45,214,201,68,89,245,
101,38,107,206,87,44,137,121,90,216,235,38,179,120,241,209,208,176,139,167,73,154,135,236,255,163,202,87,161,217,184,232,84,111,97,204,26,29,3,142,101,211,166,150,58,192,81,171,225,112,138,132,12,40,154,68,223,110,191,95,60,112,251,53,171,226,219,136,
17,27,38,47,138,93,115,198,65,221,177,80,236,250,213,235,191,86,12,253,94,204,21,246,215,123,5,222,79,25,246,251,189,3,139,39,171,158,158,86,58,246,20,188,6,73,177,172,234,229,117,220,88,157,139,197,247,187,227,222,78,101,249,99,94,129,159,243,62,231,
119,173,248,219,7,31,175,61,23,186,55,216,37,3,170,228,243,249,117,51,250,244,163,252,242,31,254,106,52,175,222,47,144,94,52,201,31,127,190,125,141,196,139,112,247,190,193,85,184,55,22,10,118,212,241,246,88,93,78,125,190,190,252,35,48,229,133,83,248,
177,118,203,99,79,160,250,154,138,115,101,43,211,24,105,212,8,223,166,73,159,14,204,120,223,44,210,203,143,22,95,238,145,63,70,162,109,183,234,175,124,72,218,120,145,70,157,241,182,187,55,95,189,52,241,121,57,233,227,251,7,222,182,240,253,111,107,201,
135,27,31,236,105,33,81,188,113,230,239,39,66,222,172,59,173,29,2,62,255,115,254,28,31,43,246,30,176,175,93,44,156,129,59,240,228,200,82,156,73,91,127,153,191,181,170,216,176,31,208,242,68,198,158,37,196,226,130,55,76,19,27,75,141,108,85,132,122,60,155,
82,226,149,87,48,86,195,221,125,14,225,225,171,105,213,101,229,85,121,87,94,189,210,90,9,43,212,104,116,177,171,121,254,118,255,235,227,184,229,87,139,138,111,255,251,208,66,242,183,255,237,218,155,22,255,187,249,239,112,255,157,160,161,29,153,95,50,
125,108,181,235,103,123,254,17,142,134,29,37,58,176,53,180,40,115,8,173,141,112,203,207,177,111,58,107,248,121,174,22,163,67,166,60,99,178,57,139,202,239,35,89,161,166,187,106,111,218,63,9,31,15,61,134,255,142,245,223,119,61,250,210,223,71,91,207,193,
195,120,229,193,155,94,45,225,227,75,187,99,168,237,55,78,60,221,120,177,242,171,249,42,28,82,121,185,145,237,124,155,68,229,48,228,226,52,157,83,175,98,82,177,150,32,201,98,178,212,43,134,106,100,26,16,23,106,132,81,172,25,239,57,241,161,33,114,201,
33,101,62,180,220,84,189,91,24,169,52,215,158,220,242,121,159,207,59,69,179,168,124,16,167,199,69,207,23,140,62,213,226,183,214,149,63,253,247,225,247,62,239,251,121,135,80,85,227,212,194,219,135,54,235,117,44,185,114,67,91,243,247,214,83,200,62,239,
243,121,223,67,239,120,27,248,185,194,244,174,8,98,200,6,5,237,78,136,196,193,99,255,171,193,166,45,77,37,52,34,52,182,77,1,37,127,53,178,255,253,249,71,133,156,44,58,254,26,58,138,23,39,62,128,122,121,96,170,55,250,203,43,66,210,114,32,22,209,152,93,
253,179,139,171,222,182,186,186,83,120,179,125,154,34,147,52,178,106,13,237,123,107,137,210,109,214,201,24,38,106,100,5,219,195,206,232,182,107,216,91,50,79,133,162,250,190,159,44,223,4,33,174,25,201,154,12,31,183,39,94,205,86,63,11,17,248,36,141,172,
208,232,14,157,195,101,59,152,52,245,209,163,213,235,96,38,56,52,210,169,75,250,204,93,120,190,93,186,147,57,109,36,187,120,189,142,215,177,100,197,176,165,21,198,12,141,236,251,206,105,112,156,117,224,19,101,27,217,254,102,227,132,8,211,181,168,40,223,
32,55,70,178,125,3,194,61,27,164,97,114,149,60,62,237,219,138,40,182,175,26,27,103,111,165,105,223,193,94,46,118,153,39,159,179,135,181,244,56,213,240,174,131,59,202,239,80,159,147,43,154,182,177,93,131,225,226,174,168,86,185,69,180,155,242,209,77,148,
52,203,201,14,180,155,78,111,210,60,218,60,196,48,154,55,178,254,67,55,131,18,46,212,200,170,28,201,66,7,23,114,223,122,66,34,151,106,112,194,7,23,17,255,253,207,191,242,176,121,74,116,249,41,20,59,174,210,153,14,78,141,138,209,142,175,187,98,131,122,
222,158,182,159,49,26,56,159,66,171,227,107,119,3,155,225,192,212,120,152,58,130,141,122,84,107,88,204,70,14,6,26,24,76,58,68,252,199,63,255,253,99,32,22,31,199,99,241,245,255,150,7,116,3,205,163,192,133,197,190,163,47,94,254,195,202,101,68,188,201,193,
98,225,44,226,223,31,44,159,105,124,253,13,103,250,104,46,127,59,38,55,78,47,16,175,14,222,165,3,56,239,25,34,198,251,198,242,250,187,121,113,7,30,255,7,245,163,217,246,163,237,249,23,121,83,171,78,239,34,207,203,248,147,191,54,48,22,226,212,99,243,95,
127,85,173,211,211,47,92,54,154,109,27,62,254,62,146,191,63,189,28,111,127,145,126,44,60,127,26,6,190,30,63,126,108,66,133,38,231,16,225,168,210,249,230,23,7,106,108,72,124,242,135,22,16,123,31,91,217,218,200,110,249,118,203,33,20,81,55,40,149,106,132,
11,39,10,86,143,180,242,175,6,150,55,68,177,207,141,236,253,206,228,223,17,208,184,143,65,26,97,44,125,51,175,61,41,146,95,54,139,251,182,141,203,7,123,148,111,9,166,113,31,3,52,188,188,243,104,94,243,139,183,67,196,85,231,38,190,125,103,93,64,90,113,
42,82,100,99,150,49,232,194,177,154,246,173,237,253,112,114,121,157,43,198,136,26,29,157,218,80,108,106,97,177,120,65,56,189,107,56,71,78,254,173,191,30,39,33,99,158,96,245,243,72,205,139,77,50,173,25,193,197,167,40,22,71,123,135,149,205,82,190,198,198,
236,163,102,35,124,106,100,31,206,144,167,109,231,219,99,113,196,184,97,112,185,163,47,17,229,40,122,62,98,247,97,245,114,188,151,119,230,96,207,87,176,163,74,25,68,213,18,132,168,214,158,99,243,73,142,143,23,146,55,95,0,171,48,246,133,130,205,33,31,
59,208,62,133,157,169,94,57,43,126,113,188,195,109,251,98,173,180,181,53,125,184,21,216,75,193,24,166,195,141,35,191,222,49,83,104,190,253,122,4,108,67,4,251,216,142,242,215,163,153,159,55,80,99,99,162,209,78,28,24,191,229,23,199,125,58,182,19,31,26,
153,168,198,185,50,181,219,166,51,219,95,15,92,230,165,182,158,151,27,25,156,177,161,229,2,223,76,45,218,189,72,198,85,7,165,105,213,248,114,245,199,59,239,51,212,240,24,184,217,28,57,52,211,241,219,48,10,93,130,118,227,6,39,108,100,233,237,232,45,142,
181,145,40,181,103,181,196,67,201,61,254,215,231,117,63,143,219,148,47,63,216,123,108,167,42,205,246,54,193,153,250,252,230,191,62,175,251,121,110,208,121,86,62,232,182,52,141,212,175,109,67,243,115,14,141,15,211,252,60,101,64,62,60,68,203,205,71,122,
176,171,241,189,251,95,177,236,229,205,188,136,47,167,165,218,53,37,79,124,220,32,177,142,41,34,223,230,147,235,121,199,16,113,87,62,182,37,110,105,110,140,222,224,242,174,67,53,109,90,81,148,223,238,232,54,136,124,119,90,43,251,188,234,231,21,14,166,
150,201,200,183,1,218,210,158,116,127,133,108,191,203,95,78,243,141,241,249,252,67,201,79,123,114,31,173,131,128,51,185,31,105,185,192,66,14,182,107,56,86,249,198,93,109,152,82,89,118,247,6,118,184,37,56,1,200,248,105,82,183,134,119,175,182,23,48,112,
195,203,211,52,176,214,91,12,19,13,31,211,48,91,2,211,13,31,115,129,6,230,73,100,216,157,15,165,98,203,214,0,57,237,80,49,239,94,102,42,222,184,53,52,166,110,88,185,232,114,239,197,183,60,15,250,191,219,155,191,253,183,223,127,59,15,246,126,158,155,203,
69,150,187,111,136,8,23,204,161,142,74,115,142,236,150,238,206,126,49,9,68,254,118,183,119,126,252,247,135,207,179,207,155,126,254,99,50,143,230,9,86,241,236,230,241,104,76,239,14,209,81,122,128,245,219,226,110,245,185,63,239,31,176,106,188,156,43,109,
91,65,180,217,83,24,100,108,116,116,57,119,69,10,21,115,176,22,97,18,206,31,197,242,186,6,246,234,171,46,109,113,197,70,118,244,216,207,183,13,239,104,254,189,50,17,10,209,108,109,59,72,255,251,243,143,66,81,170,76,156,19,45,153,90,172,24,34,30,207,189,
226,240,82,52,52,206,192,89,68,168,200,173,82,80,58,105,123,106,96,121,41,153,235,147,76,25,42,34,130,125,106,30,171,90,136,230,131,6,214,46,158,190,104,124,38,174,226,52,13,172,202,193,188,123,161,121,195,112,81,19,228,202,17,172,250,59,250,206,122,
241,59,222,20,96,126,241,127,99,136,56,122,59,29,122,143,95,253,155,198,53,58,215,193,160,101,4,107,54,154,43,116,26,191,212,32,12,206,53,68,236,112,161,75,99,66,14,214,56,163,209,232,56,119,14,102,94,123,174,26,193,154,142,226,58,157,34,156,185,109,
139,190,39,25,34,186,155,98,158,33,239,85,204,114,60,58,77,15,189,35,88,243,40,230,86,122,14,68,239,152,177,129,41,69,56,91,3,219,218,248,52,58,102,109,96,49,107,163,59,99,118,111,8,61,205,174,143,153,131,177,174,19,201,23,47,134,56,89,14,166,145,49,
195,136,229,85,227,235,117,220,58,77,15,163,68,176,155,225,63,231,10,118,213,115,188,116,100,131,53,50,52,200,197,6,182,63,38,137,102,76,213,66,58,28,168,169,68,115,217,211,218,53,74,174,208,232,204,236,139,70,215,182,129,93,111,106,25,232,20,193,234,
197,84,39,73,184,66,200,75,219,15,244,53,43,136,93,75,210,224,56,219,88,49,213,137,38,121,119,131,211,200,56,69,242,181,110,136,88,123,103,226,237,55,53,52,102,107,76,175,27,216,209,215,23,69,157,29,111,223,208,52,105,141,162,114,4,219,213,200,42,183,
132,118,231,52,77,109,69,131,33,226,161,151,161,84,14,2,158,177,100,250,6,118,40,40,117,184,132,118,52,238,104,160,52,111,96,147,141,237,96,206,6,86,36,189,26,188,113,153,120,148,238,17,236,80,122,229,226,150,206,225,194,238,77,42,211,252,243,104,96,
186,92,232,218,192,180,15,216,220,192,26,55,27,195,69,46,36,253,62,234,247,221,1,191,36,150,22,228,4,8,39,22,255,253,207,191,114,145,6,115,201,210,187,212,106,1,134,235,175,210,72,27,131,178,6,244,97,213,130,216,165,111,205,104,188,227,94,144,6,204,172,
213,37,163,115,189,40,172,117,141,20,40,20,1,9,160,114,16,43,210,209,234,173,21,1,64,235,32,214,126,226,41,65,11,128,117,188,84,22,0,65,12,0,90,75,183,219,237,246,143,127,254,251,253,55,226,249,164,216,182,83,100,241,242,7,199,79,179,197,174,133,56,189,
7,156,95,149,78,119,103,191,26,21,58,228,120,250,191,86,220,216,113,224,198,250,120,61,101,192,225,91,245,99,223,140,194,230,33,6,206,47,127,232,232,162,218,218,98,199,167,251,215,24,191,254,175,180,255,231,199,126,85,110,215,246,45,169,220,107,114,1,
38,12,112,133,123,188,207,73,194,82,143,27,187,215,150,22,23,242,34,70,44,103,52,177,58,245,217,245,248,85,126,241,139,104,91,221,0,37,85,25,52,231,45,43,47,159,90,124,220,191,167,248,176,255,252,92,58,154,99,109,138,124,213,82,155,252,80,32,33,133,2,
78,149,35,181,13,118,249,253,26,163,210,254,229,159,113,35,86,22,66,218,188,5,177,234,159,247,228,155,91,191,118,236,104,16,232,128,19,7,187,114,93,94,126,179,242,168,212,167,230,229,216,242,144,180,164,159,159,196,161,221,44,124,11,199,142,211,141,149,
230,135,2,144,233,189,94,98,68,147,237,126,117,173,45,189,254,201,251,13,218,126,234,242,205,15,86,164,112,81,188,24,98,93,141,138,121,192,5,237,238,250,242,142,132,165,80,63,155,246,109,240,173,234,229,179,250,99,145,168,147,175,11,128,128,92,111,93,
71,153,203,244,157,105,107,148,58,246,132,86,185,219,224,163,90,97,199,166,122,0,184,98,24,58,214,53,126,139,9,177,127,251,210,145,45,217,157,144,69,249,194,142,222,53,46,160,1,236,235,159,15,156,221,75,31,87,177,34,129,122,253,149,40,188,135,45,179,
182,157,27,231,161,50,96,68,3,12,176,223,247,170,15,17,100,103,31,154,86,237,224,138,40,249,28,204,54,6,130,202,215,197,142,221,175,40,58,1,19,71,165,174,15,160,173,237,242,247,247,179,219,158,19,139,61,27,119,104,207,154,141,12,38,29,224,0,151,83,233,
110,129,14,79,39,149,184,34,147,54,175,49,246,124,117,99,116,202,183,41,34,68,233,217,192,0,234,15,207,99,251,226,26,37,22,123,86,147,106,174,233,103,148,221,16,119,79,112,211,132,19,145,64,105,117,102,54,220,249,147,40,187,181,123,186,253,102,207,137,
29,74,174,220,5,8,80,100,112,28,205,54,166,208,131,80,81,35,136,237,12,44,249,69,88,139,210,53,40,200,1,20,15,130,81,108,77,5,111,76,137,191,131,88,191,75,80,249,150,191,189,165,19,128,57,130,95,28,94,210,241,94,63,61,102,69,135,246,46,74,21,77,148,43,
105,81,17,96,194,188,112,253,233,189,244,115,97,177,127,91,10,196,159,40,121,159,231,16,211,122,0,156,59,4,69,181,37,175,200,196,190,94,63,86,228,148,226,238,44,40,26,20,202,173,199,139,120,0,46,149,79,181,238,46,211,230,100,42,206,95,40,53,178,76,0,
1,173,114,16,91,181,1,77,95,157,178,156,64,197,8,27,1,208,202,68,3,234,22,87,116,238,227,236,106,110,252,75,0,122,6,181,42,153,216,247,21,198,210,214,84,123,114,110,223,147,222,206,250,1,34,193,184,89,95,185,171,51,121,57,136,149,93,97,201,154,138,77,
191,18,216,0,198,139,195,177,233,219,59,50,177,126,25,89,217,140,205,163,99,0,149,178,190,42,143,24,111,184,197,190,83,92,233,150,91,151,187,208,40,28,2,162,217,209,247,149,29,61,219,151,182,236,66,84,249,242,88,85,227,101,153,0,21,59,219,40,219,155,
166,173,219,16,5,54,120,246,236,89,126,6,208,169,147,253,25,196,100,20,2,20,192,156,82,245,206,249,68,243,23,206,24,238,227,246,250,114,101,94,241,119,188,216,111,191,247,251,217,126,255,234,115,78,22,196,186,68,2,71,83,151,192,187,229,239,124,112,121,
126,239,247,163,255,126,86,186,207,158,65,236,211,209,164,102,0,118,117,159,87,13,122,201,225,0,112,157,160,119,182,128,86,54,136,201,164,0,78,145,197,205,210,157,167,226,165,35,144,1,156,38,216,69,209,165,141,30,196,206,158,183,2,208,61,112,213,13,98,
71,247,65,224,3,168,106,223,59,66,198,220,222,241,110,236,200,83,213,46,0,29,185,59,113,188,65,71,153,32,252,120,66,123,205,211,162,95,255,182,229,105,82,191,247,251,153,127,31,186,185,223,221,66,30,126,123,67,16,187,232,209,233,111,127,251,251,245,223,
121,226,6,238,140,209,115,16,107,59,51,148,185,26,1,70,234,70,199,157,123,34,255,248,191,98,77,38,86,119,102,168,152,163,86,1,196,201,142,193,108,93,159,126,23,22,0,152,37,14,124,223,158,148,21,33,0,147,246,249,105,235,226,92,79,4,184,110,88,137,65,182,
39,214,6,177,173,49,114,182,135,232,0,216,223,107,71,241,37,110,251,85,170,181,131,33,72,1,156,62,164,245,126,228,46,221,110,183,219,255,254,252,163,112,100,61,98,236,19,150,78,167,2,140,211,233,14,248,176,115,22,66,0,88,229,174,8,0,152,149,105,167,0,
24,87,94,10,98,249,245,111,98,228,189,41,178,113,81,164,60,157,224,4,24,48,19,27,122,146,231,34,15,45,236,189,115,50,202,111,10,0,101,131,24,165,131,95,157,204,16,64,16,155,49,27,219,18,83,162,207,166,8,75,0,157,51,177,139,191,59,174,120,124,141,230,
25,30,245,196,138,250,139,133,33,142,122,135,170,65,76,0,43,211,197,113,149,97,202,218,239,8,94,208,44,19,155,190,99,238,180,19,71,187,41,65,16,224,96,16,251,212,49,235,100,199,14,130,130,37,32,136,93,33,58,232,197,1,166,100,218,41,0,100,98,50,51,0,166,
10,98,167,189,62,182,237,222,248,83,238,46,117,25,39,193,96,153,152,27,62,192,192,1,131,151,105,131,216,247,6,122,186,202,202,142,72,160,223,224,69,119,211,48,136,57,34,29,141,0,45,184,59,17,0,153,24,13,50,184,86,100,138,128,32,134,32,11,19,11,155,114,
233,32,150,21,62,96,48,87,118,83,86,116,168,87,235,115,93,19,3,64,38,182,102,48,35,43,3,24,63,129,156,169,175,78,61,11,87,80,3,56,103,32,60,101,16,3,160,81,116,185,72,150,144,122,78,69,225,84,35,64,199,128,119,130,142,55,141,18,94,188,0,18,96,224,204,
110,174,32,246,105,47,133,1,0,166,9,98,253,179,180,90,3,15,225,24,96,242,32,118,108,198,249,181,185,232,152,225,194,3,217,0,173,210,134,138,153,88,253,236,164,212,142,244,217,58,65,14,16,120,6,205,196,94,109,126,92,162,112,99,215,90,5,52,64,224,25,56,
136,169,244,126,25,33,32,24,177,53,136,229,247,197,216,180,171,142,153,14,177,44,180,1,140,158,137,53,13,102,39,184,147,255,34,207,22,2,204,17,196,62,117,206,213,59,227,126,19,137,156,226,100,129,96,9,8,98,11,157,113,243,142,242,164,129,173,119,176,84,
132,192,172,188,79,12,128,235,101,98,175,70,251,70,244,231,207,218,0,78,19,196,62,117,134,205,2,218,187,30,88,68,5,16,196,78,145,94,8,104,0,167,228,154,24,0,50,177,161,19,33,23,239,0,206,26,196,220,183,14,128,76,108,117,34,84,90,148,222,32,49,28,96,138,
96,16,255,253,207,191,54,45,86,255,222,191,48,212,1,160,155,116,83,7,0,147,218,116,26,209,200,95,150,5,48,74,31,38,3,3,96,74,2,24,0,83,218,116,10,177,203,44,245,87,201,133,95,148,245,64,155,3,80,172,15,235,18,192,212,132,40,2,48,85,6,166,175,62,85,114,
7,112,141,0,166,131,21,172,0,166,205,192,244,220,0,76,21,192,118,197,29,193,74,81,0,52,224,54,122,0,4,48,0,16,192,0,64,0,3,64,0,3,128,1,164,219,237,118,251,199,63,255,253,230,227,120,253,215,234,219,235,226,199,159,101,238,204,139,77,219,225,110,64,224,
212,162,125,175,23,171,190,16,21,86,26,191,254,207,116,124,43,183,253,246,248,124,138,219,163,224,101,231,112,4,174,33,47,116,216,81,103,149,177,106,155,10,198,150,28,79,139,191,175,44,149,85,219,179,118,15,242,225,98,203,187,127,149,111,109,38,153,4,
232,19,201,218,245,116,203,107,201,21,214,248,91,170,150,125,85,207,91,243,192,27,9,48,66,127,153,7,232,208,95,228,106,133,54,37,21,216,148,67,113,180,103,145,174,142,149,0,172,238,79,91,245,157,105,221,166,197,193,93,139,6,69,39,220,0,236,27,182,71,
199,117,111,93,127,94,25,192,222,196,158,213,33,41,63,166,177,81,38,252,188,13,245,229,3,229,158,179,183,194,40,48,95,204,42,219,127,46,246,235,133,242,142,180,216,245,238,10,98,81,126,135,223,254,48,138,20,68,207,160,7,92,91,151,238,235,199,229,177,
242,103,179,22,175,192,229,199,117,111,95,111,90,21,146,54,47,251,219,15,170,158,69,204,15,255,9,41,16,192,161,145,247,139,64,214,226,42,208,218,64,17,47,3,216,190,245,70,225,47,31,139,117,249,175,140,76,16,3,102,141,31,195,100,107,15,189,113,129,228,
172,216,62,62,108,86,218,179,47,181,35,222,225,85,229,110,53,14,208,53,216,69,171,149,71,221,213,172,9,98,233,232,82,119,157,93,92,177,243,69,207,198,230,174,195,24,128,238,1,46,74,47,173,74,48,203,235,99,64,142,50,147,249,214,152,111,99,255,82,220,70,
1,240,170,103,44,55,71,71,110,186,221,239,62,73,7,243,169,133,95,150,185,123,99,123,160,119,14,17,160,110,166,214,238,25,220,119,107,186,95,182,170,76,138,8,80,166,127,237,212,151,110,190,11,49,74,206,37,181,176,156,104,84,246,146,53,224,234,14,119,125,
185,238,10,163,68,0,43,30,60,98,176,106,201,181,106,23,64,232,43,217,255,167,250,43,94,248,114,245,211,168,185,92,97,55,25,198,0,204,228,64,234,117,176,255,79,91,3,78,203,151,67,214,121,228,192,228,191,0,107,194,80,84,91,83,153,233,6,83,155,213,47,4,
141,216,86,184,81,173,186,54,44,93,252,3,228,86,59,187,199,135,152,112,224,42,79,58,186,99,197,30,52,142,253,133,26,35,213,172,192,6,8,124,235,187,196,3,167,245,250,188,145,249,108,157,188,160,5,208,92,250,24,18,87,68,198,109,193,243,97,185,5,59,254,
178,231,110,119,188,244,205,243,100,128,65,241,142,108,236,235,109,34,251,102,190,79,139,191,216,21,196,98,219,158,69,189,66,11,71,18,48,115,175,127,162,238,107,85,191,188,97,223,211,234,181,30,121,31,88,199,64,214,247,72,18,252,128,73,186,175,152,101,
67,31,3,88,193,211,120,49,96,84,234,59,17,189,115,139,64,105,243,15,140,75,61,142,149,234,111,84,30,174,192,243,169,15,13,224,154,105,85,76,185,23,71,182,186,248,11,45,15,109,212,0,73,155,9,55,0,113,177,93,71,119,164,219,79,237,74,38,170,125,125,212,
64,39,200,1,83,71,160,134,73,197,158,110,63,181,45,92,93,58,64,191,160,118,174,62,56,69,229,98,11,135,14,192,73,67,72,223,52,39,109,94,250,198,26,120,222,160,13,11,200,106,28,48,176,45,27,0,115,185,159,69,157,45,221,18,196,26,188,78,165,192,78,73,231,
0,38,136,196,5,59,233,21,139,74,45,247,51,142,70,63,151,209,0,113,163,99,6,183,101,235,14,78,232,183,162,191,79,135,214,16,29,118,237,220,215,36,1,134,9,128,49,226,198,62,108,84,202,37,22,30,219,127,248,87,252,139,178,59,40,152,1,20,143,31,113,232,215,
133,195,226,195,70,221,251,22,142,251,244,0,102,8,100,121,192,165,165,17,10,70,242,4,48,79,70,86,40,151,154,63,128,21,13,97,162,33,192,53,194,97,254,117,10,49,151,221,142,126,11,169,145,239,2,208,36,160,109,235,184,211,243,143,99,128,29,40,152,156,202,
200,0,38,207,204,222,187,63,127,61,183,88,231,202,159,23,76,163,100,100,0,29,67,77,29,169,232,251,187,170,100,60,5,179,50,83,200,3,156,70,250,234,181,251,157,64,140,26,161,170,92,144,19,208,0,90,164,24,123,3,88,133,61,138,19,214,142,192,6,48,90,6,182,
50,238,52,236,180,135,187,255,66,192,2,24,42,27,75,155,146,167,14,81,101,152,51,122,179,222,4,18,47,234,109,233,239,239,7,130,223,251,253,204,191,95,243,55,83,38,33,233,221,138,99,240,66,145,20,237,40,176,188,16,148,253,237,239,43,255,61,211,160,84,86,
118,187,221,62,204,133,152,39,41,24,119,199,3,204,23,204,170,6,48,97,8,128,145,117,120,35,243,218,216,236,4,33,192,225,52,38,206,91,8,233,112,33,198,56,245,41,228,1,28,12,120,149,131,95,201,252,39,141,95,234,194,18,0,63,163,113,26,63,132,228,213,195,
130,245,223,4,160,103,175,30,171,191,89,51,3,27,252,121,10,87,214,0,10,230,15,133,178,132,18,161,35,205,95,170,66,18,192,181,162,102,201,0,214,245,92,99,201,91,240,5,67,128,253,93,112,110,218,165,166,181,219,23,69,191,56,106,238,182,54,24,10,116,128,
172,232,104,114,115,52,100,164,42,251,25,42,115,28,71,38,67,244,123,191,63,195,239,95,117,76,163,78,150,152,207,223,101,22,44,214,116,187,176,107,220,181,120,100,50,68,191,247,251,43,255,222,12,65,163,135,236,180,101,37,81,229,203,115,20,166,147,134,
0,99,37,153,105,235,122,175,16,196,142,148,185,64,7,208,70,218,18,14,175,220,57,11,76,0,99,185,43,2,0,38,205,192,42,242,188,49,0,53,3,88,147,216,50,249,53,177,153,95,222,234,141,244,126,127,229,223,35,3,147,145,157,32,240,122,131,188,191,175,252,247,
89,232,58,127,115,13,12,0,25,152,108,12,160,93,215,121,245,140,237,62,76,141,120,232,29,128,41,50,48,0,154,103,108,103,202,200,92,3,3,64,6,86,116,168,224,186,24,0,205,2,152,160,3,48,180,53,183,27,204,210,149,151,9,96,2,23,192,233,130,92,84,95,195,8,1,
172,254,222,2,112,234,188,175,87,0,3,128,6,65,171,94,0,115,19,6,0,141,212,203,192,246,6,95,129,15,160,137,114,221,109,238,178,157,78,33,2,8,92,93,2,211,184,25,88,201,64,46,43,3,24,36,219,26,103,187,231,200,192,178,26,6,40,213,141,158,165,171,115,10,113,
158,108,121,127,80,222,251,70,64,191,247,251,51,252,254,235,111,111,188,124,219,213,197,192,29,225,167,170,18,192,0,140,220,101,96,0,8,74,2,24,229,143,227,61,239,96,247,123,191,191,202,239,103,106,208,174,215,255,14,96,103,126,95,204,216,81,37,222,180,
164,119,39,254,99,231,239,93,68,241,251,43,255,126,107,251,145,175,141,22,7,222,205,86,152,198,40,42,135,205,186,97,99,174,252,123,67,120,191,151,130,77,221,117,92,162,127,92,8,96,101,110,208,17,168,0,102,14,31,49,248,54,85,204,192,162,241,110,1,112,
37,119,33,1,128,119,113,96,228,88,112,87,69,0,156,42,3,147,133,1,48,178,52,118,144,18,66,1,174,99,91,159,127,95,179,184,209,207,131,2,80,55,172,228,129,182,101,117,0,3,128,17,109,186,141,254,93,4,54,115,7,192,53,50,177,17,250,253,188,39,128,45,45,44,
118,23,5,0,51,6,179,158,147,94,164,26,59,244,188,83,2,21,0,229,227,65,154,105,99,1,56,103,48,218,29,192,254,247,231,31,133,82,193,163,198,188,154,230,26,31,192,120,157,239,93,190,180,110,156,225,81,2,128,177,12,246,66,203,165,16,33,23,2,224,69,6,6,0,
2,24,0,8,96,0,240,44,41,2,0,134,148,101,96,0,156,50,3,203,63,3,222,240,247,250,117,220,192,81,230,2,3,16,192,206,148,79,206,16,1,1,40,98,206,83,136,158,42,6,144,129,189,139,15,231,206,81,246,70,191,248,184,20,121,29,128,12,12,0,182,103,96,148,206,220,
182,103,119,0,236,12,96,83,156,70,28,236,150,64,167,20,1,100,96,101,147,35,145,4,64,0,163,71,4,102,76,177,162,254,226,205,103,161,222,161,102,0,203,18,152,162,33,73,57,2,200,192,96,146,172,57,203,184,161,71,0,147,49,28,163,252,0,58,5,48,167,16,203,142,
207,149,35,64,163,0,118,154,64,54,200,237,246,91,78,26,9,118,0,5,2,152,140,98,236,96,119,148,122,4,102,100,42,41,0,206,159,129,157,98,212,126,145,52,82,86,5,8,96,31,226,128,78,114,158,56,45,216,1,103,227,20,34,0,2,24,0,180,98,38,14,183,86,2,200,192,0,
96,138,12,108,176,215,113,213,201,200,46,144,149,153,149,175,61,137,62,200,192,0,144,129,149,25,197,27,89,130,172,23,153,183,12,12,0,4,48,0,206,164,248,109,244,167,60,149,152,157,15,0,234,117,37,107,232,110,100,96,0,200,192,216,53,156,50,140,2,144,129,
1,32,128,1,192,84,156,66,108,109,205,105,71,167,25,1,4,176,211,6,185,154,4,80,224,138,1,76,223,39,128,242,162,65,100,141,196,161,192,240,1,204,148,82,176,48,24,48,64,184,100,180,241,12,216,4,1,12,224,148,3,15,169,216,117,2,88,86,79,0,69,130,99,222,16,
252,174,212,239,186,141,30,0,1,12,0,4,48,0,248,160,234,77,28,223,79,245,186,38,6,80,215,209,251,79,102,234,167,83,235,130,21,196,0,230,11,128,35,246,221,169,87,225,8,100,0,215,201,236,106,112,13,12,128,41,121,144,25,224,108,105,208,69,78,113,165,94,183,
90,184,193,3,0,25,24,0,219,50,181,19,100,13,105,148,220,168,213,5,66,153,30,128,12,12,128,51,103,105,131,115,23,34,0,103,205,192,188,137,15,128,41,3,216,167,156,83,64,3,160,143,203,157,66,204,55,47,196,5,184,96,6,182,148,145,189,34,75,3,184,158,250,169,
66,82,180,66,44,192,148,25,88,253,201,117,75,70,225,104,182,133,130,26,96,120,63,182,251,124,155,220,174,10,93,47,3,24,56,3,59,215,200,64,222,4,112,134,236,106,115,0,155,255,133,147,91,42,39,118,45,85,136,4,4,165,49,152,137,3,128,249,51,48,163,150,178,
153,27,128,76,170,102,0,203,63,139,176,89,23,29,51,30,98,249,228,161,76,128,6,129,102,226,12,172,254,173,245,173,87,212,230,48,14,141,19,160,111,0,107,158,141,157,228,46,9,51,69,2,12,18,192,154,6,177,147,100,101,2,26,192,32,1,172,75,16,59,41,51,126,0,
52,14,96,93,178,137,139,164,47,53,174,56,9,138,128,0,54,82,86,230,105,226,106,65,81,113,2,51,154,243,65,102,147,20,2,200,192,78,147,106,72,35,0,4,176,105,8,90,0,2,152,4,232,186,156,141,53,246,130,75,103,96,110,181,7,131,6,104,233,62,117,163,244,214,73,
0,25,88,233,32,214,60,27,115,62,19,64,6,6,103,41,158,190,0,0,14,109,73,68,65,84,0,151,203,192,134,96,18,66,0,25,24,0,8,96,0,48,122,0,115,99,32,0,53,85,189,6,54,204,171,189,220,161,8,112,198,12,76,174,4,192,180,25,152,20,5,128,41,3,88,93,53,115,188,56,
186,49,226,53,128,0,54,165,92,34,42,2,208,58,155,137,255,254,231,95,85,47,130,137,5,56,48,180,3,0,0,227,171,223,60,203,12,0,0,208,80,181,91,57,156,249,231,140,28,215,0,0,198,97,71,185,18,6,0,0,208,80,181,43,97,195,76,234,11,21,142,235,173,180,3,0,128,
62,227,176,75,37,97,92,144,76,3,0,0,36,97,52,180,246,244,132,100,13,0,0,73,88,25,198,214,204,198,49,11,0,192,148,73,216,48,3,89,35,106,28,10,0,0,12,206,236,136,0,0,0,13,29,186,18,214,236,106,131,203,26,56,36,0,0,56,9,87,194,0,0,0,36,97,0,0,0,146,48,0,
0,0,36,97,0,0,0,243,248,53,49,199,63,254,249,239,29,63,143,117,159,84,155,69,33,86,253,243,24,147,56,68,213,13,49,81,5,0,192,64,98,248,5,206,83,36,49,81,121,44,36,65,241,61,9,43,45,63,174,54,55,46,171,252,188,167,121,148,106,202,245,218,84,150,144,1,
0,140,35,207,156,240,53,25,162,183,47,203,232,95,239,95,121,73,170,185,51,213,147,159,216,94,30,93,143,209,232,223,230,37,104,0,0,140,150,163,198,197,246,253,94,182,248,122,87,223,232,197,157,181,56,0,0,14,140,37,141,39,231,203,3,126,58,118,37,44,190,
10,32,22,139,167,222,109,177,219,174,183,117,185,109,47,198,201,251,243,209,205,7,0,160,175,56,223,125,79,121,215,158,108,200,52,162,215,94,69,133,36,108,197,10,246,165,74,229,215,223,52,65,156,112,43,74,38,110,146,54,0,0,99,203,146,99,208,158,153,70,
141,60,37,85,88,102,155,226,249,113,124,237,95,122,245,106,91,117,4,157,179,193,72,210,0,0,122,12,182,206,117,26,125,121,164,156,15,44,32,154,87,88,42,183,204,124,187,197,186,139,134,81,107,159,226,88,34,214,164,26,22,27,205,121,146,177,189,69,80,146,
132,15,0,144,164,109,73,218,98,154,93,139,18,101,179,226,241,170,26,82,143,161,235,254,42,142,38,25,94,191,167,182,226,76,23,196,46,151,240,1,0,243,186,244,208,43,47,141,158,98,200,130,43,50,102,207,199,51,148,61,101,147,138,151,68,175,219,19,43,150,
95,151,187,76,179,158,1,0,160,215,208,75,98,119,160,224,226,60,117,88,36,193,139,213,73,216,168,15,183,157,253,50,81,190,106,243,5,0,192,24,245,50,249,70,170,90,71,81,252,235,221,142,149,92,50,43,110,153,218,203,225,0,0,134,73,93,106,138,25,119,60,230,
173,203,56,240,227,84,125,107,99,176,210,139,139,183,126,73,25,0,0,205,83,204,248,188,152,152,125,255,182,149,67,90,94,113,28,93,199,230,93,141,77,133,18,213,182,167,122,86,92,244,0,136,102,251,12,0,192,252,105,81,219,161,98,126,179,242,56,69,121,199,
198,95,165,117,95,140,253,91,22,251,119,40,74,175,164,209,149,176,62,23,159,222,28,6,174,132,1,0,176,35,113,139,38,43,207,211,39,99,123,18,178,251,144,41,249,149,182,167,199,254,63,254,15,0,0,70,24,159,94,72,170,189,130,33,223,253,86,224,234,80,156,233,
160,175,82,233,0,0,204,166,235,48,46,207,191,163,107,23,155,154,110,97,149,219,1,11,191,157,57,52,151,161,26,144,132,14,0,64,218,87,123,188,218,120,51,210,250,45,140,221,251,23,205,74,176,207,163,133,253,243,132,60,207,1,15,0,192,176,218,63,35,214,234,
242,87,219,89,26,150,214,150,182,45,114,212,68,76,66,86,239,128,151,172,1,0,48,251,205,99,109,183,126,41,255,73,61,118,123,216,202,139,58,251,41,197,177,211,0,0,103,77,200,166,30,78,70,159,50,74,61,55,182,217,21,178,152,227,0,62,101,110,34,225,2,0,160,
210,24,122,214,161,102,218,190,187,81,116,175,235,21,224,67,138,55,73,166,147,135,204,99,14,222,25,108,26,252,54,73,238,154,75,205,121,195,231,177,177,193,90,191,245,91,191,245,91,127,159,245,131,100,108,199,8,245,161,65,117,186,93,47,237,219,213,40,
222,33,212,185,42,246,98,3,39,124,121,241,184,155,108,26,196,161,171,32,119,250,173,245,91,191,245,91,191,245,247,93,63,115,51,36,106,152,87,188,25,101,55,104,103,169,72,141,23,74,198,62,23,88,212,171,165,201,14,250,177,146,50,61,5,0,64,181,129,158,33,
90,131,33,126,251,194,74,197,247,54,202,20,88,244,72,61,38,125,64,171,239,164,39,78,201,245,229,126,68,235,183,126,235,183,254,107,175,127,233,51,100,33,18,183,229,20,165,253,120,54,141,90,216,203,221,73,190,198,81,211,160,221,41,185,179,214,180,251,
129,172,223,250,173,223,250,175,181,126,39,70,207,193,200,172,197,136,169,119,41,167,106,123,56,219,12,138,23,206,241,178,110,0,0,128,11,189,70,182,247,245,227,84,117,207,162,206,241,16,61,138,242,162,87,250,71,61,167,38,57,4,0,100,66,131,108,98,156,
171,180,91,236,78,58,239,129,107,152,14,0,192,85,147,53,99,225,145,165,217,15,185,112,192,233,118,0,0,46,151,138,24,243,214,30,103,214,44,225,84,117,5,13,30,232,250,185,138,202,83,28,186,208,6,0,48,221,128,250,124,105,79,30,103,79,78,58,151,66,205,97,
127,154,122,235,123,174,220,228,140,0,0,92,62,53,221,184,248,85,99,230,243,15,172,83,243,186,62,235,235,189,36,101,0,0,82,151,134,66,33,182,221,228,130,5,158,186,237,69,180,172,215,252,247,234,98,156,3,76,146,6,0,192,64,249,76,12,191,103,49,126,129,175,
220,196,212,45,33,109,124,249,42,63,252,255,49,194,33,150,135,62,242,1,0,144,212,13,150,10,13,154,156,237,216,196,52,204,198,54,189,72,245,156,1,198,168,149,38,41,3,0,96,194,100,45,134,219,162,206,3,236,111,119,3,166,78,121,208,144,7,146,156,7,0,0,202,
167,69,198,217,207,210,80,53,213,121,6,197,225,146,177,236,200,5,0,224,92,73,89,12,179,37,29,182,38,255,72,194,174,124,45,76,198,3,0,0,215,206,1,218,229,1,105,168,68,100,152,75,81,135,95,110,208,118,147,228,141,0,0,208,96,208,93,37,9,27,50,35,154,160,
98,148,17,0,0,176,35,9,27,230,134,196,206,249,223,148,233,231,248,115,138,2,0,128,135,128,110,183,91,138,111,69,48,212,147,97,205,110,209,140,235,28,32,185,89,241,1,0,128,132,236,85,18,246,174,48,98,212,90,114,117,108,254,196,78,33,2,0,112,225,132,44,
85,201,119,194,193,113,26,18,38,0,0,140,185,219,36,97,143,59,31,74,109,113,55,79,187,187,185,227,186,37,128,0,0,18,178,19,14,19,211,150,29,143,163,165,22,215,59,72,228,17,147,38,128,0,0,71,25,8,86,31,38,206,90,196,233,74,59,59,90,30,161,28,1,0,160,236,
88,123,134,49,118,218,187,179,113,234,234,139,19,175,21,0,0,206,159,152,141,60,182,78,74,100,41,61,146,26,1,0,112,112,72,89,139,161,234,148,210,145,99,42,74,28,144,49,91,235,137,19,172,9,0,0,137,222,185,19,191,177,174,255,228,50,73,152,35,93,170,4,0,
0,108,207,142,211,209,69,75,65,218,86,157,242,6,0,128,237,99,234,145,198,209,233,140,59,53,82,150,91,58,125,146,152,1,0,192,190,113,116,20,93,90,199,36,236,240,78,93,102,14,140,92,45,57,51,13,62,0,0,221,135,181,91,69,191,77,143,230,59,91,41,9,171,82,
161,113,245,163,88,10,5,0,128,100,174,254,16,185,237,12,39,105,138,138,9,71,102,123,18,64,0,0,6,28,3,159,224,249,156,84,186,184,170,38,166,242,130,162,135,112,52,79,0,85,32,0,192,229,146,166,94,155,16,227,166,23,169,198,254,27,106,159,167,185,196,217,
26,40,0,0,116,30,157,166,154,59,19,211,44,152,146,7,166,234,1,0,224,178,25,214,10,247,105,11,212,69,21,0,0,96,66,169,102,54,227,214,196,107,42,121,68,57,126,0,0,56,97,18,86,143,1,244,53,169,119,0,0,232,148,132,85,119,153,23,61,3,0,0,167,75,194,166,207,
97,78,240,190,128,179,88,186,29,81,181,0,0,32,9,187,82,54,32,3,24,62,73,3,0,232,193,48,17,73,24,0,0,52,84,227,68,177,196,14,73,216,247,214,165,85,0,0,48,89,98,39,201,147,132,157,183,85,56,162,1,0,0,73,24,0,0,240,197,132,104,115,186,43,2,0,0,128,118,92,
9,123,199,179,99,0,0,156,104,72,123,51,188,149,132,77,125,244,58,106,1,0,144,156,113,186,36,204,17,0,0,0,146,179,106,123,37,9,123,93,86,18,49,0,0,152,34,141,137,105,182,84,18,6,0,0,76,102,172,107,37,121,186,242,147,132,1,0,0,19,200,167,217,147,164,156,
167,74,243,1,0,192,112,118,242,242,117,37,12,0,0,168,40,43,2,73,24,0,0,32,177,146,132,93,243,248,114,109,24,0,0,195,203,203,149,181,36,108,230,4,79,43,3,0,96,97,120,25,197,151,200,87,201,236,45,91,73,216,149,147,56,198,23,15,45,252,83,175,186,166,199,
205,43,62,127,92,79,172,56,230,98,227,242,173,223,250,173,223,250,173,191,252,250,191,127,254,233,247,78,224,26,50,22,79,210,148,237,158,50,148,132,1,0,192,212,105,20,179,145,132,1,0,128,164,137,30,73,88,249,251,71,161,119,231,183,231,94,141,120,241,
189,199,101,229,55,255,254,110,29,175,126,251,110,27,94,180,194,252,247,50,242,155,245,231,88,248,237,135,229,191,250,60,63,236,127,94,186,159,197,250,173,223,250,173,223,250,199,88,255,183,216,245,105,253,249,93,252,121,23,255,152,198,129,129,123,174,
179,216,203,166,221,107,202,44,149,92,152,51,24,204,83,135,121,229,191,231,141,255,190,229,59,121,195,62,28,89,255,150,207,243,198,242,179,126,235,183,126,235,183,254,254,235,207,133,215,111,28,100,232,42,31,56,82,224,107,38,236,184,43,64,0,0,128,118,
86,63,19,118,189,44,184,199,94,58,235,4,0,192,152,92,21,203,155,190,249,169,140,238,123,87,47,93,0,0,128,235,38,100,114,130,253,41,155,219,17,1,0,0,26,58,148,132,201,128,1,0,224,218,228,3,159,203,230,149,195,239,9,51,75,202,218,162,6,0,128,243,57,119,
62,144,171,148,77,202,149,54,235,26,201,153,132,11,0,128,107,59,231,251,134,115,209,165,124,47,143,212,106,179,93,49,3,0,128,107,37,102,114,128,223,229,241,88,22,247,214,21,1,0,0,112,101,169,229,202,182,38,98,253,50,103,41,35,0,0,212,28,85,199,84,91,
91,118,233,233,154,85,14,0,0,72,9,251,72,179,21,83,72,182,0,0,224,20,41,81,84,93,250,184,210,124,85,5,0,0,24,199,207,235,87,18,246,191,63,255,120,251,165,235,206,106,98,62,23,37,8,0,0,101,7,185,119,37,8,0,0,208,78,82,4,159,28,185,108,234,26,16,0,0,240,
147,43,97,0,0,0,146,48,0,0,128,115,114,59,34,0,0,192,22,7,39,123,116,37,12,0,0,160,161,180,38,139,251,250,138,169,38,14,184,104,225,101,69,2,0,0,223,146,48,58,164,31,50,65,0,0,184,42,183,35,2,0,0,52,228,74,88,43,175,46,140,197,8,27,81,147,43,111,0,0,
112,40,9,243,108,24,173,82,66,199,24,0,0,103,229,118,68,0,0,128,134,220,142,72,69,121,194,109,118,13,14,0,128,1,147,48,183,37,118,202,81,66,209,72,149,0,0,184,100,18,198,128,153,137,172,164,83,102,12,108,23,133,218,95,108,252,109,104,239,0,12,193,51,
97,0,0,0,13,29,186,18,246,120,14,209,133,24,90,218,115,206,27,0,0,166,79,194,12,114,233,197,177,7,51,203,157,150,227,246,67,0,78,144,132,185,18,198,200,67,56,199,36,0,0,167,75,194,94,13,138,13,124,7,204,74,66,145,72,214,0,0,56,93,18,246,105,224,107,144,
203,25,146,181,163,180,3,0,0,170,36,97,18,51,232,155,236,73,16,1,0,36,97,6,123,163,143,254,85,202,52,84,21,0,192,252,188,39,12,0,0,160,161,230,87,194,76,224,1,199,219,79,105,218,35,0,64,59,174,132,1,0,0,52,148,20,1,158,25,3,0,128,118,92,9,3,0,0,104,168,
219,149,176,199,139,47,46,180,64,95,163,77,159,175,79,0,0,36,97,18,50,35,116,35,103,46,156,20,114,14,186,40,0,36,97,18,50,0,36,247,48,60,227,49,184,64,18,246,42,96,106,252,0,0,125,199,99,18,71,40,199,196,28,0,0,0,13,153,162,158,114,182,156,42,115,138,
10,0,0,73,216,28,99,123,99,119,0,0,214,142,29,91,50,78,229,84,73,24,122,71,61,34,0,0,103,225,153,48,0,0,0,73,24,0,0,192,57,185,29,145,243,43,117,235,163,219,26,1,0,144,132,193,132,201,156,36,15,0,64,18,6,92,32,201,147,32,2,0,72,194,140,255,64,130,8,192,
36,194,102,194,165,146,48,239,9,3,0,24,104,64,54,211,102,54,24,60,26,159,114,202,36,12,0,0,166,73,30,101,101,156,45,9,115,85,12,0,128,43,228,121,198,186,231,229,61,97,0,0,0,146,48,0,0,0,73,24,0,0,0,7,77,61,49,199,167,251,111,221,67,11,0,192,89,199,186,
173,24,83,75,194,36,104,0,0,112,177,68,240,140,220,142,8,0,0,208,144,247,132,1,0,64,73,53,46,31,185,149,75,18,118,182,118,225,152,6,0,0,26,38,97,107,82,245,115,167,41,94,0,13,0,0,52,76,194,182,166,41,231,78,208,242,229,82,80,0,0,166,28,164,238,97,96,
59,83,18,230,152,159,149,118,6,0,0,146,48,0,0,160,7,115,206,15,193,20,245,0,0,0,13,21,184,18,230,181,200,0,0,0,13,147,48,9,26,0,0,192,32,73,24,189,153,237,17,0,0,36,97,31,210,131,189,164,21,0,0,112,126,231,152,89,36,229,83,164,48,91,42,67,194,230,234,
24,0,0,18,171,142,73,216,171,221,14,149,92,64,156,178,84,36,107,0,0,146,35,10,36,97,239,138,219,128,155,181,77,209,177,2,0,0,7,146,48,201,88,205,116,101,173,115,92,73,115,236,0,0,204,56,22,165,91,18,198,25,27,142,180,8,0,64,178,132,36,140,147,55,116,
137,31,0,96,172,4,155,146,48,183,37,114,172,27,203,82,179,105,169,37,0,36,52,80,62,9,203,251,154,209,41,134,102,198,151,195,118,203,170,6,0,128,243,38,97,178,0,137,26,28,106,36,0,0,52,73,194,46,243,110,177,107,189,68,237,84,67,127,85,5,0,192,136,238,
138,0,0,0,160,157,98,183,35,122,190,135,209,140,116,35,157,54,0,0,64,241,36,108,237,96,120,250,193,168,231,200,232,148,16,58,172,0,0,36,97,135,6,163,167,30,80,174,29,113,27,85,211,56,145,115,40,2,0,244,231,153,48,0,0,128,134,146,34,232,232,221,165,13,
151,37,0,0,64,18,86,51,255,184,108,206,33,217,98,240,243,1,154,6,0,192,137,146,176,165,1,160,65,24,72,10,1,0,206,200,51,97,0,0,0,13,13,251,76,216,37,110,87,220,122,186,223,229,65,0,0,144,132,73,200,0,0,0,214,115,59,34,0,0,64,67,166,168,159,201,167,219,
23,93,34,4,0,128,41,184,18,6,0,0,32,9,3,0,0,56,167,233,110,71,124,119,71,222,229,239,198,115,171,34,0,0,76,193,149,48,0,0,128,134,146,9,224,1,0,0,154,38,97,143,220,236,119,74,75,47,133,86,189,0,0,208,43,9,59,111,158,49,178,152,161,240,36,106,0,0,72,12,
138,240,76,24,0,0,64,67,255,15,178,157,249,255,109,185,188,65,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
const char* background_png = (const char*) temp_binary_data_0;
//================== startup.syx ==================
static const unsigned char temp_binary_data_1[] =
{ 240,67,0,9,32,0,7,64,45,99,45,99,0,0,0,0,0,0,56,0,99,0,0,10,64,49,99,46,99,0,0,0,0,0,0,56,0,99,4,0,13,64,49,99,46,99,0,0,0,0,0,0,56,0,99,0,0,15,64,49,99,44,99,0,0,0,0,0,0,56,0,99,4,0,25,64,49,99,50,99,0,0,0,0,0,0,56,0,99,0,0,70,40,49,99,99,92,0,0,0,0,
0,0,56,0,99,2,0,99,99,99,99,50,50,50,50,31,15,35,0,0,0,49,24,83,97,121,32,65,103,97,105,110,46,72,76,10,32,99,85,80,0,49,0,0,0,56,8,84,20,0,76,73,10,28,99,92,90,0,50,0,0,0,24,4,90,4,0,49,74,10,32,98,98,98,0,41,61,64,10,72,8,71,4,0,55,15,10,47,99,92,92,
0,56,91,0,3,112,4,99,4,0,55,32,32,29,93,94,90,0,68,0,99,2,0,4,88,4,1,55,56,10,47,99,98,64,0,39,99,0,15,88,8,98,4,1,98,98,98,98,53,49,50,50,14,15,33,35,16,0,16,12,76,65,85,82,73,69,32,32,32,32,99,46,54,85,99,96,99,0,57,0,0,0,58,4,99,5,75,99,46,34,91,99,
@ -54,7 +227,7 @@ static const unsigned char temp_binary_data_0[] =
111,119,51,68,32,80,97,100,57,32,77,30,99,99,58,0,10,0,0,4,48,4,99,1,25,11,30,25,28,99,99,0,0,10,0,0,4,56,4,92,8,0,26,71,20,39,99,99,0,0,0,0,0,4,72,4,93,51,5,8,10,20,41,99,99,0,0,0,0,0,0,56,5,93,14,0,18,99,20,36,99,99,0,0,0,0,0,0,64,5,90,4,0,28,99,20,
35,99,99,17,0,0,0,0,0,56,5,99,12,0,98,98,75,60,50,50,50,50,16,3,35,99,10,8,48,12,76,70,79,32,83,87,69,69,80,32,88,247,0,0 };
const char* startup_syx = (const char*) temp_binary_data_0;
const char* startup_syx = (const char*) temp_binary_data_1;
const char* getNamedResource (const char*, int&) throw();
@ -67,6 +240,7 @@ const char* getNamedResource (const char* resourceNameUTF8, int& numBytes) throw
switch (hash)
{
case 0x551aef98: numBytes = 12012; return background_png;
case 0xca88aa10: numBytes = 4104; return startup_syx;
default: break;
}
@ -75,10 +249,11 @@ const char* getNamedResource (const char* resourceNameUTF8, int& numBytes) throw
return 0;
}
const int namedResourceListSize = 1;
const int namedResourceListSize = 2;
const char* namedResourceList[] =
{
"background_png",
"startup_syx"
};

@ -6,6 +6,9 @@
namespace BinaryData
{
extern const char* background_png;
const int background_pngSize = 12012;
extern const char* startup_syx;
const int startup_syxSize = 4104;

@ -19,6 +19,46 @@
*/
#include "DXLookNFeel.h"
#include "PluginProcessor.h"
void EnvDisplay::paint(Graphics &g) {
int rate[4];
int level[4];
for(int i=0;i<4;i++) {
rate[i] = s_rate[i]->getValue();
level[i] = s_level[i]->getValue();
}
env.init(rate, level, 99 << 5, 0);
env.keydown(true);
for (int i=0;i<72;i++) {
int32_t pos = env.getsample();
for(int j=0;j<16;j++) {
env.getsample();
}
g.setPixel(i, 32 - (sqrt(pos) / 512));
}
env.keydown(false);
for (int i=0;i<24;i++) {
int32_t pos = env.getsample();
for(int j=0;j<16;j++) {
env.getsample();
}
g.setPixel(i+72, 32 - (sqrt(pos) / 512));
}
}
void AlgoDisplay::updateUI() {
}
void AlgoDisplay::paint(Graphics &g) {
}
DXLookNFeel::DXLookNFeel() {
}
setColour(TextButton::buttonColourId,Colour(0xFF0FC00F));
setColour(Slider::rotarySliderOutlineColourId,Colour(0xFF0FC00F));
setColour(Slider::rotarySliderFillColourId,Colour(0xFFFFFFFF));
}

@ -22,7 +22,23 @@
#define DXLOOKNFEEL_H_INCLUDED
#include "../JuceLibraryCode/JuceHeader.h"
#include "msfa/env.h"
class EnvDisplay : public Component {
Env env;
public:
Slider *s_rate[4];
Slider *s_level[4];
void paint(Graphics &g);
};
class AlgoDisplay : public Component {
int algo;
public:
void paint(Graphics &g);
void updateUI();
};
class DXLookNFeel : public LookAndFeel_V3 {
public:

@ -72,11 +72,26 @@ GlobalEditor::GlobalEditor ()
lfoDelay->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
lfoDelay->addListener (this);
addAndMakeVisible (cutoff = new Slider ("cutoff"));
cutoff->setRange (0, 10, 0);
cutoff->setSliderStyle (Slider::Rotary);
cutoff->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
cutoff->addListener (this);
addAndMakeVisible (reso = new Slider ("reso"));
reso->setRange (0, 10, 0);
reso->setSliderStyle (Slider::Rotary);
reso->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
reso->addListener (this);
addAndMakeVisible (algoDisplay = new AlgoDisplay());
algoDisplay->setName ("algoDisplay");
//[UserPreSize]
//[/UserPreSize]
setSize (250, 70);
setSize (855, 90);
//[Constructor] You can add your own custom stuff here..
@ -94,6 +109,9 @@ GlobalEditor::~GlobalEditor()
lfoAmDepth = nullptr;
lfoPitchDepth = nullptr;
lfoDelay = nullptr;
cutoff = nullptr;
reso = nullptr;
algoDisplay = nullptr;
//[Destructor]. You can add your own custom destruction code here..
@ -112,12 +130,15 @@ void GlobalEditor::paint (Graphics& g)
void GlobalEditor::resized()
{
algo->setBounds (8, 8, 64, 24);
lfoType->setBounds (168, 24, 72, 16);
lfoSpeed->setBounds (80, 8, 23, 56);
lfoAmDepth->setBounds (216, 40, 32, 24);
lfoPitchDepth->setBounds (184, 40, 32, 24);
lfoDelay->setBounds (104, 8, 23, 56);
algo->setBounds (784, 48, 64, 24);
lfoType->setBounds (768, 8, 80, 16);
lfoSpeed->setBounds (712, 0, 23, 80);
lfoAmDepth->setBounds (816, 24, 32, 24);
lfoPitchDepth->setBounds (792, 24, 32, 24);
lfoDelay->setBounds (736, 0, 23, 80);
cutoff->setBounds (176, 40, 48, 48);
reso->setBounds (232, 40, 48, 48);
algoDisplay->setBounds (8, 8, 150, 72);
//[UserResized] Add your own custom resize handling here..
//[/UserResized]
}
@ -152,6 +173,16 @@ void GlobalEditor::sliderValueChanged (Slider* sliderThatWasMoved)
//[UserSliderCode_lfoDelay] -- add your slider handling code here..
//[/UserSliderCode_lfoDelay]
}
else if (sliderThatWasMoved == cutoff)
{
//[UserSliderCode_cutoff] -- add your slider handling code here..
//[/UserSliderCode_cutoff]
}
else if (sliderThatWasMoved == reso)
{
//[UserSliderCode_reso] -- add your slider handling code here..
//[/UserSliderCode_reso]
}
//[UsersliderValueChanged_Post]
//[/UsersliderValueChanged_Post]
@ -183,6 +214,7 @@ void GlobalEditor::bind(DexedAudioProcessor *parent) {
parent->lfoWaveform->bind(lfoType);
parent->lfoAmpDepth->bind(lfoAmDepth);
parent->lfoPitchDepth->bind(lfoPitchDepth);
processor = parent;
}
//[/MiscUserCode]
@ -200,32 +232,43 @@ BEGIN_JUCER_METADATA
<JUCER_COMPONENT documentType="Component" className="GlobalEditor" componentName=""
parentClasses="public Component" constructorParams="" variableInitialisers=""
snapPixels="8" snapActive="1" snapShown="1" overlayOpacity="0.330"
fixedSize="1" initialWidth="250" initialHeight="70">
fixedSize="1" initialWidth="855" initialHeight="90">
<BACKGROUND backgroundColour="ffffff"/>
<SLIDER name="algo" id="8a226ddf9bbff752" memberName="algo" virtualName=""
explicitFocusOrder="0" pos="8 8 64 24" min="1" max="32" int="1"
explicitFocusOrder="0" pos="784 48 64 24" min="1" max="32" int="1"
style="Rotary" textBoxPos="TextBoxLeft" textBoxEditable="0" textBoxWidth="80"
textBoxHeight="20" skewFactor="1"/>
<COMBOBOX name="new combo box" id="31018596af3b34e9" memberName="lfoType"
virtualName="" explicitFocusOrder="0" pos="168 24 72 16" editable="0"
virtualName="" explicitFocusOrder="0" pos="768 8 80 16" editable="0"
layout="33" items="TRIANGLE&#10;SAW DOWN&#10;SAW UP&#10;SQUARE&#10;SINE&#10;S&amp;HOLD"
textWhenNonSelected="" textWhenNoItems="(no choices)"/>
<SLIDER name="lfoSpeed" id="b10eaf327ab3bff5" memberName="lfoSpeed" virtualName=""
explicitFocusOrder="0" pos="80 8 23 56" min="0" max="99" int="1"
explicitFocusOrder="0" pos="712 0 23 80" min="0" max="99" int="1"
style="LinearVertical" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="new slider" id="3e95a6206fa4a891" memberName="lfoAmDepth"
virtualName="" explicitFocusOrder="0" pos="216 40 32 24" min="0"
virtualName="" explicitFocusOrder="0" pos="816 24 32 24" min="0"
max="99" int="1" style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="new slider" id="6ead769ca786c813" memberName="lfoPitchDepth"
virtualName="" explicitFocusOrder="0" pos="184 40 32 24" min="0"
virtualName="" explicitFocusOrder="0" pos="792 24 32 24" min="0"
max="99" int="1" style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="lfoDelay" id="1fce68dc81619ef5" memberName="lfoDelay" virtualName=""
explicitFocusOrder="0" pos="104 8 23 56" min="0" max="99" int="1"
explicitFocusOrder="0" pos="736 0 23 80" min="0" max="99" int="1"
style="LinearVertical" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="cutoff" id="40531f16bb0bd225" memberName="cutoff" virtualName=""
explicitFocusOrder="0" pos="176 40 48 48" min="0" max="10" int="0"
style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1" textBoxWidth="80"
textBoxHeight="20" skewFactor="1"/>
<SLIDER name="reso" id="c8c13464e81a8d83" memberName="reso" virtualName=""
explicitFocusOrder="0" pos="232 40 48 48" min="0" max="10" int="0"
style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1" textBoxWidth="80"
textBoxHeight="20" skewFactor="1"/>
<GENERICCOMPONENT name="algoDisplay" id="b26fb9e3b5f0bc37" memberName="algoDisplay"
virtualName="" explicitFocusOrder="0" pos="8 8 150 72" class="AlgoDisplay"
params=""/>
</JUCER_COMPONENT>
END_JUCER_METADATA

@ -23,6 +23,7 @@
//[Headers] -- You can add your own extra header files here --
#include "JuceHeader.h"
#include "PluginProcessor.h"
#include "DXLookNFeel.h"
//[/Headers]
@ -59,6 +60,7 @@ public:
private:
//[UserVariables] -- You can add your own custom variables in this section.
DexedAudioProcessor *processor;
//[/UserVariables]
//==============================================================================
@ -68,6 +70,9 @@ private:
ScopedPointer<Slider> lfoAmDepth;
ScopedPointer<Slider> lfoPitchDepth;
ScopedPointer<Slider> lfoDelay;
ScopedPointer<Slider> cutoff;
ScopedPointer<Slider> reso;
ScopedPointer<AlgoDisplay> algoDisplay;
//==============================================================================

@ -35,9 +35,6 @@ OperatorEditor::OperatorEditor ()
s_egl1->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
s_egl1->addListener (this);
addAndMakeVisible (toggleButton = new ToggleButton ("new toggle button"));
toggleButton->setButtonText (String::empty);
addAndMakeVisible (s_egl2 = new Slider ("egl2"));
s_egl2->setRange (0, 99, 1);
s_egl2->setSliderStyle (Slider::Rotary);
@ -119,13 +116,18 @@ OperatorEditor::OperatorEditor ()
gain->setRange (0, 1, 0);
gain->setSliderStyle (Slider::LinearVertical);
gain->setTextBoxStyle (Slider::NoTextBox, true, 80, 20);
gain->setColour (Slider::thumbColourId, Colours::black);
gain->setColour (Slider::trackColourId, Colour (0x00ffffff));
gain->setColour (Slider::rotarySliderFillColourId, Colour (0x000000ff));
gain->setColour (Slider::textBoxBackgroundColourId, Colours::white);
gain->addListener (this);
addAndMakeVisible (khzDisplay = new Label ("khz",
"1,000 kHz"));
khzDisplay->setFont (Font (16.60f, Font::plain));
khzDisplay->setFont (Font (11.00f, Font::plain));
khzDisplay->setJustificationType (Justification::centred);
khzDisplay->setEditable (false, false, false);
khzDisplay->setColour (Label::backgroundColourId, Colour (0x6a000000));
khzDisplay->setColour (Label::outlineColourId, Colour (0x00000000));
khzDisplay->setColour (TextEditor::textColourId, Colours::black);
khzDisplay->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
@ -136,14 +138,87 @@ OperatorEditor::OperatorEditor ()
detune->setTextBoxStyle (Slider::NoTextBox, true, 80, 20);
detune->addListener (this);
addAndMakeVisible (envDisplay = new EnvDisplay());
envDisplay->setName ("envDisplay");
addAndMakeVisible (sclLeftLevel = new Slider ("sclLeftLevel"));
sclLeftLevel->setTooltip ("Keyboard Scale Level Left Depth ");
sclLeftLevel->setRange (0, 99, 1);
sclLeftLevel->setSliderStyle (Slider::Rotary);
sclLeftLevel->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
sclLeftLevel->addListener (this);
addAndMakeVisible (sclRightLevel = new Slider ("sclRightLevel"));
sclRightLevel->setTooltip ("Keyboard Scale Level Right Depth ");
sclRightLevel->setRange (0, 99, 1);
sclRightLevel->setSliderStyle (Slider::Rotary);
sclRightLevel->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
sclRightLevel->addListener (this);
addAndMakeVisible (kbdLeftCurve = new ComboBox ("kbdLeftCurve"));
kbdLeftCurve->setEditableText (false);
kbdLeftCurve->setJustificationType (Justification::centredLeft);
kbdLeftCurve->setTextWhenNothingSelected (String::empty);
kbdLeftCurve->setTextWhenNoChoicesAvailable ("(no choices)");
kbdLeftCurve->addItem ("-LN", 1);
kbdLeftCurve->addItem ("-EX", 2);
kbdLeftCurve->addItem ("+EX", 3);
kbdLeftCurve->addItem ("+LN", 4);
kbdLeftCurve->addListener (this);
addAndMakeVisible (kbdRightCurve = new ComboBox ("kbdRightCurve"));
kbdRightCurve->setEditableText (false);
kbdRightCurve->setJustificationType (Justification::centredLeft);
kbdRightCurve->setTextWhenNothingSelected (String::empty);
kbdRightCurve->setTextWhenNoChoicesAvailable ("(no choices)");
kbdRightCurve->addItem ("-LN", 1);
kbdRightCurve->addItem ("-EX", 2);
kbdRightCurve->addItem ("+EX", 3);
kbdRightCurve->addItem ("+LN", 4);
kbdRightCurve->addListener (this);
addAndMakeVisible (sclLvlBrkPt = new Slider ("sclLvlBrkPt"));
sclLvlBrkPt->setTooltip ("Scale Level Breakpoint");
sclLvlBrkPt->setRange (0, 99, 1);
sclLvlBrkPt->setSliderStyle (Slider::Rotary);
sclLvlBrkPt->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
sclLvlBrkPt->addListener (this);
addAndMakeVisible (sclRateScaling = new Slider ("sclRateScaling"));
sclRateScaling->setTooltip ("Keyboard Rate Scaling");
sclRateScaling->setRange (0, 7, 1);
sclRateScaling->setSliderStyle (Slider::Rotary);
sclRateScaling->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
sclRateScaling->addListener (this);
addAndMakeVisible (keyVelSens = new Slider ("keyVelSens"));
keyVelSens->setRange (0, 7, 1);
keyVelSens->setSliderStyle (Slider::Rotary);
keyVelSens->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
keyVelSens->addListener (this);
addAndMakeVisible (ampModSens = new Slider ("ampModSens"));
ampModSens->setRange (0, 4, 1);
ampModSens->setSliderStyle (Slider::Rotary);
ampModSens->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
ampModSens->addListener (this);
//[UserPreSize]
//[/UserPreSize]
setSize (250, 70);
setSize (280, 90);
//[Constructor] You can add your own custom stuff here..
envDisplay->s_rate[0] = s_egv1;
envDisplay->s_rate[1] = s_egv2;
envDisplay->s_rate[2] = s_egv3;
envDisplay->s_rate[3] = s_egv4;
envDisplay->s_level[0] = s_egl1;
envDisplay->s_level[1] = s_egl2;
envDisplay->s_level[2] = s_egl3;
envDisplay->s_level[3] = s_egl4;
//[/Constructor]
}
@ -153,7 +228,6 @@ OperatorEditor::~OperatorEditor()
//[/Destructor_pre]
s_egl1 = nullptr;
toggleButton = nullptr;
s_egl2 = nullptr;
s_egl3 = nullptr;
s_egl4 = nullptr;
@ -169,6 +243,15 @@ OperatorEditor::~OperatorEditor()
gain = nullptr;
khzDisplay = nullptr;
detune = nullptr;
envDisplay = nullptr;
sclLeftLevel = nullptr;
sclRightLevel = nullptr;
kbdLeftCurve = nullptr;
kbdRightCurve = nullptr;
sclLvlBrkPt = nullptr;
sclRateScaling = nullptr;
keyVelSens = nullptr;
ampModSens = nullptr;
//[Destructor]. You can add your own custom destruction code here..
@ -187,23 +270,31 @@ void OperatorEditor::paint (Graphics& g)
void OperatorEditor::resized()
{
s_egl1->setBounds (128, 8, 24, 24);
toggleButton->setBounds (-8, 56, 24, 24);
s_egl2->setBounds (152, 8, 24, 24);
s_egl3->setBounds (176, 8, 24, 24);
s_egl4->setBounds (200, 8, 24, 24);
s_egv1->setBounds (128, 40, 24, 24);
s_egv2->setBounds (152, 40, 24, 24);
s_egv3->setBounds (176, 40, 24, 24);
s_egv4->setBounds (200, 40, 24, 24);
opMode->setBounds (40, 48, 80, 16);
s_egl1->setBounds (136, 40, 24, 24);
s_egl2->setBounds (160, 40, 24, 24);
s_egl3->setBounds (184, 40, 24, 24);
s_egl4->setBounds (208, 40, 24, 24);
s_egv1->setBounds (136, 64, 24, 24);
s_egv2->setBounds (160, 64, 24, 24);
s_egv3->setBounds (184, 64, 24, 24);
s_egv4->setBounds (208, 64, 24, 24);
opMode->setBounds (24, 48, 104, 16);
opId->setBounds (0, 0, 24, 16);
opLevel->setBounds (0, 32, 32, 40);
opFine->setBounds (96, 24, 24, 24);
opCoarse->setBounds (72, 24, 24, 24);
gain->setBounds (224, 0, 24, 64);
khzDisplay->setBounds (8, 8, 112, 16);
detune->setBounds (32, 24, 40, 24);
opLevel->setBounds (232, 56, 32, 32);
opFine->setBounds (104, 24, 24, 24);
opCoarse->setBounds (80, 24, 24, 24);
gain->setBounds (260, 0, 24, 88);
khzDisplay->setBounds (32, 8, 88, 16);
detune->setBounds (24, 24, 56, 24);
envDisplay->setBounds (136, 5, 96, 32);
sclLeftLevel->setBounds (0, 64, 24, 24);
sclRightLevel->setBounds (64, 64, 24, 24);
kbdLeftCurve->setBounds (24, 68, 40, 16);
kbdRightCurve->setBounds (88, 68, 40, 16);
sclLvlBrkPt->setBounds (0, 40, 24, 24);
sclRateScaling->setBounds (0, 16, 24, 24);
keyVelSens->setBounds (240, 24, 24, 24);
ampModSens->setBounds (240, 0, 24, 24);
//[UserResized] Add your own custom resize handling here..
//[/UserResized]
}
@ -211,6 +302,7 @@ void OperatorEditor::resized()
void OperatorEditor::sliderValueChanged (Slider* sliderThatWasMoved)
{
//[UsersliderValueChanged_Pre]
envDisplay->repaint();
//[/UsersliderValueChanged_Pre]
if (sliderThatWasMoved == s_egl1)
@ -261,13 +353,13 @@ void OperatorEditor::sliderValueChanged (Slider* sliderThatWasMoved)
else if (sliderThatWasMoved == opFine)
{
//[UserSliderCode_opFine] -- add your slider handling code here..
updateFreqDisplay();
updateDisplay();
//[/UserSliderCode_opFine]
}
else if (sliderThatWasMoved == opCoarse)
{
//[UserSliderCode_opCoarse] -- add your slider handling code here..
updateFreqDisplay();
updateDisplay();
//[/UserSliderCode_opCoarse]
}
else if (sliderThatWasMoved == gain)
@ -278,9 +370,39 @@ void OperatorEditor::sliderValueChanged (Slider* sliderThatWasMoved)
else if (sliderThatWasMoved == detune)
{
//[UserSliderCode_detune] -- add your slider handling code here..
updateFreqDisplay();
updateDisplay();
//[/UserSliderCode_detune]
}
else if (sliderThatWasMoved == sclLeftLevel)
{
//[UserSliderCode_sclLeftLevel] -- add your slider handling code here..
//[/UserSliderCode_sclLeftLevel]
}
else if (sliderThatWasMoved == sclRightLevel)
{
//[UserSliderCode_sclRightLevel] -- add your slider handling code here..
//[/UserSliderCode_sclRightLevel]
}
else if (sliderThatWasMoved == sclLvlBrkPt)
{
//[UserSliderCode_sclLvlBrkPt] -- add your slider handling code here..
//[/UserSliderCode_sclLvlBrkPt]
}
else if (sliderThatWasMoved == sclRateScaling)
{
//[UserSliderCode_sclRateScaling] -- add your slider handling code here..
//[/UserSliderCode_sclRateScaling]
}
else if (sliderThatWasMoved == keyVelSens)
{
//[UserSliderCode_keyVelSens] -- add your slider handling code here..
//[/UserSliderCode_keyVelSens]
}
else if (sliderThatWasMoved == ampModSens)
{
//[UserSliderCode_ampModSens] -- add your slider handling code here..
//[/UserSliderCode_ampModSens]
}
//[UsersliderValueChanged_Post]
//[/UsersliderValueChanged_Post]
@ -294,9 +416,19 @@ void OperatorEditor::comboBoxChanged (ComboBox* comboBoxThatHasChanged)
if (comboBoxThatHasChanged == opMode)
{
//[UserComboBoxCode_opMode] -- add your combo box handling code here..
updateFreqDisplay();
updateDisplay();
//[/UserComboBoxCode_opMode]
}
else if (comboBoxThatHasChanged == kbdLeftCurve)
{
//[UserComboBoxCode_kbdLeftCurve] -- add your combo box handling code here..
//[/UserComboBoxCode_kbdLeftCurve]
}
else if (comboBoxThatHasChanged == kbdRightCurve)
{
//[UserComboBoxCode_kbdRightCurve] -- add your combo box handling code here..
//[/UserComboBoxCode_kbdRightCurve]
}
//[UsercomboBoxChanged_Post]
//[/UsercomboBoxChanged_Post]
@ -307,12 +439,6 @@ void OperatorEditor::comboBoxChanged (ComboBox* comboBoxThatHasChanged)
//[MiscUserCode] You can add your own definitions of your custom methods or any other code here...
void OperatorEditor::bind(DexedAudioProcessor *parent, int op) {
int targetNum = op+1;
op=5-op;
String text = "op";
text << "OP";
text << targetNum;
String opName;
opName << "OP" << targetNum;
@ -331,6 +457,11 @@ void OperatorEditor::bind(DexedAudioProcessor *parent, int op) {
parent->opCtrl[op].fine->bind(opFine);
parent->opCtrl[op].coarse->bind(opCoarse);
parent->opCtrl[op].detune->bind(detune);
parent->opCtrl[op].sclBrkPt->bind(sclLvlBrkPt);
parent->opCtrl[op].sclLeftCurve->bind(kbdLeftCurve);
parent->opCtrl[op].sclRightCurve->bind(kbdRightCurve);
parent->opCtrl[op].sclLeftDepth->bind(sclLeftLevel);
parent->opCtrl[op].sclRightDepth->bind(sclRightLevel);
}
@ -338,7 +469,8 @@ void OperatorEditor::updateGain(float v) {
gain->setValue(v);
}
void OperatorEditor::updateFreqDisplay() {
void OperatorEditor::updateDisplay() {
float freq = opCoarse->getValue();
float fine = opFine->getValue();
String txtFreq;
@ -361,6 +493,12 @@ void OperatorEditor::updateFreqDisplay() {
txtFreq << " " << det;
}
khzDisplay->setText(txtFreq, NotificationType::dontSendNotification);
envDisplay->repaint();
}
void OperatorEditor::updateEnv() {
//envDisplay->update(s_)
}
//[/MiscUserCode]
@ -377,45 +515,42 @@ BEGIN_JUCER_METADATA
<JUCER_COMPONENT documentType="Component" className="OperatorEditor" componentName=""
parentClasses="public Component" constructorParams="" variableInitialisers=""
snapPixels="8" snapActive="1" snapShown="1" overlayOpacity="0.330"
fixedSize="1" initialWidth="250" initialHeight="70">
fixedSize="1" initialWidth="280" initialHeight="90">
<BACKGROUND backgroundColour="ffffff"/>
<SLIDER name="egl1" id="dc070cc41347df47" memberName="s_egl1" virtualName=""
explicitFocusOrder="0" pos="128 8 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"
textBoxHeight="20" skewFactor="1"/>
<TOGGLEBUTTON name="new toggle button" id="fcdf1076330e4ef6" memberName="toggleButton"
virtualName="" explicitFocusOrder="0" pos="-8 56 24 24" buttonText=""
connectedEdges="0" needsCallback="0" radioGroupId="0" state="0"/>
<SLIDER name="egl2" id="66f5195e9c374029" memberName="s_egl2" virtualName=""
explicitFocusOrder="0" pos="152 8 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"
textBoxHeight="20" skewFactor="1"/>
<SLIDER name="egl3" id="9d57bd53203dcdb4" memberName="s_egl3" virtualName=""
explicitFocusOrder="0" pos="176 8 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"
textBoxHeight="20" skewFactor="1"/>
<SLIDER name="egl4" id="4f7c3ece3ea2cf9c" memberName="s_egl4" virtualName=""
explicitFocusOrder="0" pos="200 8 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"
textBoxHeight="20" skewFactor="1"/>
<SLIDER name="egr1" id="2ca8137d80da46fb" memberName="s_egv1" virtualName=""
explicitFocusOrder="0" pos="128 40 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"
textBoxHeight="20" skewFactor="1"/>
<SLIDER name="egr3" id="4ad6d0c532d15973" memberName="s_egv2" virtualName=""
explicitFocusOrder="0" pos="152 40 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"
textBoxHeight="20" skewFactor="1"/>
<SLIDER name="egr3" id="8a2027f9ede16b4f" memberName="s_egv3" virtualName=""
explicitFocusOrder="0" pos="176 40 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"
textBoxHeight="20" skewFactor="1"/>
<SLIDER name="egr4" id="8c04f1c943d837e8" memberName="s_egv4" virtualName=""
explicitFocusOrder="0" pos="200 40 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"
textBoxHeight="20" skewFactor="1"/>
<COMBOBOX name="opMode" id="2cf8156bb94cdc40" memberName="opMode" virtualName=""
explicitFocusOrder="0" pos="40 48 80 16" editable="0" layout="33"
explicitFocusOrder="0" pos="24 48 104 16" editable="0" layout="33"
items="RATIO&#10;FIXED" textWhenNonSelected="" textWhenNoItems="(no choices)"/>
<LABEL name="new label" id="75765097f6c5c142" memberName="opId" virtualName=""
explicitFocusOrder="0" pos="0 0 24 16" edTextCol="ff000000" edBkgCol="0"
@ -423,30 +558,66 @@ BEGIN_JUCER_METADATA
focusDiscardsChanges="0" fontname="Default font" fontsize="9.3000000000000007105"
bold="0" italic="0" justification="33"/>
<SLIDER name="opLevel" id="f8521c8214fb8993" memberName="opLevel" virtualName=""
explicitFocusOrder="0" pos="0 32 32 40" 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"
textBoxHeight="20" skewFactor="1"/>
<SLIDER name="opFine" id="e445aa61bd6cddcb" memberName="opFine" virtualName=""
explicitFocusOrder="0" pos="96 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"
textBoxHeight="20" skewFactor="1"/>
<SLIDER name="opCoarse" id="4eec63d30d7488d2" memberName="opCoarse" virtualName=""
explicitFocusOrder="0" pos="72 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"
textBoxHeight="20" skewFactor="1"/>
<SLIDER name="new slider" id="21f21cc5fae8e54b" memberName="gain" virtualName=""
explicitFocusOrder="0" pos="224 0 24 64" min="0" max="1" int="0"
style="LinearVertical" textBoxPos="NoTextBox" textBoxEditable="0"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
explicitFocusOrder="0" pos="260 0 24 88" thumbcol="ff000000"
trackcol="ffffff" rotarysliderfill="ff" textboxbkgd="ffffffff"
min="0" max="1" int="0" style="LinearVertical" textBoxPos="NoTextBox"
textBoxEditable="0" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<LABEL name="khz" id="eb961eed8902a6fc" memberName="khzDisplay" virtualName=""
explicitFocusOrder="0" pos="8 8 112 16" outlineCol="0" edTextCol="ff000000"
edBkgCol="0" labelText="1,000 kHz" editableSingleClick="0" editableDoubleClick="0"
focusDiscardsChanges="0" fontname="Default font" fontsize="16.600000000000001421"
bold="0" italic="0" justification="36"/>
explicitFocusOrder="0" pos="32 8 88 16" bkgCol="6a000000" outlineCol="0"
edTextCol="ff000000" edBkgCol="0" labelText="1,000 kHz" editableSingleClick="0"
editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
fontsize="11" bold="0" italic="0" justification="36"/>
<SLIDER name="detune" id="f093ec8defca2fc2" memberName="detune" virtualName=""
explicitFocusOrder="0" pos="32 24 40 24" min="0" max="14" int="1"
explicitFocusOrder="0" pos="24 24 56 24" min="0" max="14" int="1"
style="LinearHorizontal" textBoxPos="NoTextBox" textBoxEditable="0"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<GENERICCOMPONENT name="envDisplay" id="b18856de924c6340" memberName="envDisplay"
virtualName="" explicitFocusOrder="0" pos="136 5 96 32" class="EnvDisplay"
params=""/>
<SLIDER name="sclLeftLevel" id="bd6f338ae68e454f" memberName="sclLeftLevel"
virtualName="" explicitFocusOrder="0" pos="0 64 24 24" tooltip="Keyboard Scale Level Left Depth "
min="0" max="99" int="1" style="Rotary" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="sclRightLevel" id="b9e23ed5187fc7e5" memberName="sclRightLevel"
virtualName="" explicitFocusOrder="0" pos="64 64 24 24" tooltip="Keyboard Scale Level Right Depth "
min="0" max="99" int="1" style="Rotary" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<COMBOBOX name="kbdLeftCurve" id="a4b068d60be648ca" memberName="kbdLeftCurve"
virtualName="" explicitFocusOrder="0" pos="24 68 40 16" editable="0"
layout="33" items="-LN&#10;-EX&#10;+EX&#10;+LN" textWhenNonSelected=""
textWhenNoItems="(no choices)"/>
<COMBOBOX name="kbdRightCurve" id="e8b5c5cb5e36b46b" memberName="kbdRightCurve"
virtualName="" explicitFocusOrder="0" pos="88 68 40 16" editable="0"
layout="33" items="-LN&#10;-EX&#10;+EX&#10;+LN" textWhenNonSelected=""
textWhenNoItems="(no choices)"/>
<SLIDER name="sclLvlBrkPt" id="c563ac3116923bbc" memberName="sclLvlBrkPt"
virtualName="" explicitFocusOrder="0" pos="0 40 24 24" tooltip="Scale Level Breakpoint"
min="0" max="99" int="1" style="Rotary" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="sclRateScaling" id="f0d17c8e09aa4c49" memberName="sclRateScaling"
virtualName="" explicitFocusOrder="0" pos="0 16 24 24" tooltip="Keyboard Rate Scaling"
min="0" max="7" int="1" style="Rotary" textBoxPos="NoTextBox"
textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="keyVelSens" id="21795d045d07602b" memberName="keyVelSens"
virtualName="" explicitFocusOrder="0" pos="240 24 24 24" min="0"
max="7" int="1" style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
<SLIDER name="ampModSens" id="634ceaa7b0f81a6c" memberName="ampModSens"
virtualName="" explicitFocusOrder="0" pos="240 0 24 24" min="0"
max="4" int="1" style="Rotary" textBoxPos="NoTextBox" textBoxEditable="1"
textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>
</JUCER_COMPONENT>
END_JUCER_METADATA

@ -23,6 +23,7 @@
//[Headers] -- You can add your own extra header files here --
#include "JuceHeader.h"
#include "PluginProcessor.h"
#include "DXLookNFeel.h"
//[/Headers]
@ -49,7 +50,8 @@ public:
void bind(DexedAudioProcessor *processor, int num);
void updateGain(float v);
void updateFreqDisplay();
void updateDisplay();
void updateEnv();
//[/UserMethods]
void paint (Graphics& g);
@ -65,7 +67,6 @@ private:
//==============================================================================
ScopedPointer<Slider> s_egl1;
ScopedPointer<ToggleButton> toggleButton;
ScopedPointer<Slider> s_egl2;
ScopedPointer<Slider> s_egl3;
ScopedPointer<Slider> s_egl4;
@ -81,6 +82,15 @@ private:
ScopedPointer<Slider> gain;
ScopedPointer<Label> khzDisplay;
ScopedPointer<Slider> detune;
ScopedPointer<EnvDisplay> envDisplay;
ScopedPointer<Slider> sclLeftLevel;
ScopedPointer<Slider> sclRightLevel;
ScopedPointer<ComboBox> kbdLeftCurve;
ScopedPointer<ComboBox> kbdRightCurve;
ScopedPointer<Slider> sclLvlBrkPt;
ScopedPointer<Slider> sclRateScaling;
ScopedPointer<Slider> keyVelSens;
ScopedPointer<Slider> ampModSens;
//==============================================================================

@ -32,52 +32,72 @@ DexedAudioProcessorEditor::DexedAudioProcessorEditor (DexedAudioProcessor* owner
midiKeyboard (ownerFilter->keyboardState, MidiKeyboardComponent::horizontalKeyboard)
{
LookAndFeel::setDefaultLookAndFeel(&dx_lnf);
// This is where our plugin's editor size is set.
setSize (765, 380);
setSize (865, 420);
processor = ownerFilter;
addAndMakeVisible (textButton = new TextButton ("importFile"));
textButton->setButtonText ("Import ...");
textButton->addListener (this);
textButton->setBounds (5, 5, 150, 24);
addAndMakeVisible (loadButton = new TextButton("LOAD"));
loadButton->setButtonText ("LOAD");
loadButton->addListener (this);
loadButton->setBounds (5, 5, 50, 18);
cachedImage_background_png = ImageCache::getFromMemory (BinaryData::background_png, BinaryData::background_pngSize);
addAndMakeVisible( saveButton = new TextButton("SAVE"));
saveButton->setButtonText ("SAVE");
saveButton->addListener (this);
saveButton->setBounds (57, 5, 50, 18);
addAndMakeVisible( storeButton = new TextButton("STORE"));
storeButton->setButtonText ("STORE");
storeButton->addListener (this);
storeButton->setBounds (300, 5, 50, 18);
addAndMakeVisible( aboutButton = new TextButton("ABOUT"));
aboutButton->setButtonText ("ABOUT");
aboutButton->addListener (this);
aboutButton->setBounds (805, 5, 50, 18);
addAndMakeVisible (&presets);
presets.setEditableText (false);
presets.setJustificationType (Justification::centredLeft);
presets.setTextWhenNothingSelected (String::empty);
presets.setBounds(200, 5, 150, 24);
presets.setBounds(115, 5, 180, 18);
for(int i=0;i<processor->getNumPrograms();i++) {
presets.addItem( processor->getProgramName(i), i+1);
String id;
id << (i+1) << ". " << processor->getProgramName(i);
presets.addItem(id, i+1);
}
presets.setSelectedId(processor->getCurrentProgram()+1, NotificationType::dontSendNotification);
presets.addListener(this);
// OPERATORS
addAndMakeVisible(&(ops[0]));
ops[0].setBounds(5, 40, 250, 80);
ops[0].bind(processor, 0);
addAndMakeVisible(&(operators[0]));
operators[0].setBounds(5, 40, 280, 90);
operators[0].bind(processor, 0);
addAndMakeVisible(&(ops[1]));
ops[1].setBounds(255, 40, 250, 80);
ops[1].bind(processor, 1);
addAndMakeVisible(&(operators[1]));
operators[1].setBounds(290, 40, 280, 90);
operators[1].bind(processor, 1);
addAndMakeVisible(&(ops[2]));
ops[2].setBounds(505, 40, 250, 80);
ops[2].bind(processor, 2);
addAndMakeVisible(&(operators[2]));
operators[2].setBounds(575, 40, 280, 90);
operators[2].bind(processor, 2);
addAndMakeVisible(&(ops[3]));
ops[3].setBounds(5, 120, 250, 80);
ops[3].bind(processor, 3);
addAndMakeVisible(&(operators[3]));
operators[3].setBounds(5, 130, 280, 90);
operators[3].bind(processor, 3);
addAndMakeVisible(&(ops[4]));
ops[4].setBounds(255, 120, 250, 80);
ops[4].bind(processor, 4);
addAndMakeVisible(&(operators[4]));
operators[4].setBounds(290, 130, 280, 90);
operators[4].bind(processor, 4);
addAndMakeVisible(&(ops[5]));
ops[5].setBounds(505, 120, 250, 80);
ops[5].bind(processor, 5);
addAndMakeVisible(&(operators[5]));
operators[5].setBounds(575, 130, 280, 90);
operators[5].bind(processor, 5);
// add the midi keyboard component..
addAndMakeVisible (&midiKeyboard);
@ -89,7 +109,7 @@ DexedAudioProcessorEditor::DexedAudioProcessorEditor (DexedAudioProcessor* owner
midiKeyboard.setBounds (4, getHeight() - keyboardHeight - 4, getWidth() - 8, keyboardHeight);
addAndMakeVisible(&global);
global.setBounds(505,200,250,80);
global.setBounds(5,235,855,90);
global.bind(processor);
updateUI();
@ -103,48 +123,51 @@ DexedAudioProcessorEditor::~DexedAudioProcessorEditor() {
//==============================================================================
void DexedAudioProcessorEditor::paint (Graphics& g) {
g.fillAll (Colours::white);
g.setColour (Colours::black);
g.setColour (Colour (0xb3898989));
g.fillRect (0, 0, getWidth(), 35);
g.setColour (Colours::black);
g.drawRect (0, 0, getWidth(), 35, 1);
g.drawImage (cachedImage_background_png, 0, 0, 865, 420,
0, 0, cachedImage_background_png.getWidth(), cachedImage_background_png.getHeight());
}
void DexedAudioProcessorEditor::buttonClicked(Button *buttonThatWasClicked) {
FileChooser fc ("Import original DX sysex...",
File::nonexistent,
"*.syx;*.SYX",
1);
if ( fc.browseForFileToOpen()) {
String f = fc.getResults().getReference(0).getFullPathName();
uint8_t syx_data[4104];
ifstream fp_in;
fp_in.open(f.toRawUTF8(), ifstream::in);
if (fp_in.fail()) {
AlertWindow::showMessageBoxAsync (AlertWindow::WarningIcon,
"Error",
"Unable to open: " + f);
return;
}
fp_in.read((char *)syx_data, 4104);
processor->importSysex((char *) &syx_data);
presets.clear(NotificationType::dontSendNotification);
for(int i=0;i<processor->getNumPrograms();i++) {
presets.addItem(processor->getProgramName(i), i+1);
}
TRACE("selecting id %d", processor->getCurrentProgram());
presets.setSelectedId(processor->getCurrentProgram()+1, NotificationType::dontSendNotification);
processor->updateHostDisplay();
}
}
// This is our Slider::Listener callback, when the user drags a slider.
void DexedAudioProcessorEditor::sliderValueChanged (Slider* slider) {
if (buttonThatWasClicked == loadButton) {
FileChooser fc ("Import original DX sysex...", File::nonexistent, "*.syx;*.SYX", 1);
if ( fc.browseForFileToOpen()) {
String f = fc.getResults().getReference(0).getFullPathName();
uint8_t syx_data[4104];
ifstream fp_in;
fp_in.open(f.toRawUTF8(), ifstream::in);
if (fp_in.fail()) {
AlertWindow::showMessageBoxAsync (AlertWindow::WarningIcon,
"Error",
"Unable to open: " + f);
return;
}
fp_in.read((char *)syx_data, 4104);
processor->importSysex((char *) &syx_data);
presets.clear(NotificationType::dontSendNotification);
for(int i=0;i<processor->getNumPrograms();i++) {
String id;
id << (i+1) << ". " << processor->getProgramName(i);
presets.addItem(id, i+1);
}
presets.setSelectedId(processor->getCurrentProgram()+1, NotificationType::dontSendNotification);
processor->setCurrentProgram(0);
processor->updateHostDisplay();
}
return;
}
if (buttonThatWasClicked == aboutButton) {
AlertWindow::showMessageBoxAsync(AlertWindow::NoIcon, "DEXED - DX Emulator", "(c) 2013 Pascal Gauthier\nUnder the GPL v2"
"\nBased on Music Synthesizer for Android\n");
return;
}
AlertWindow::showMessageBoxAsync(AlertWindow::WarningIcon, "Sorry", "Soon !");
}
void DexedAudioProcessorEditor::comboBoxChanged (ComboBox* comboBoxThatHasChanged) {
@ -159,16 +182,15 @@ void DexedAudioProcessorEditor::timerCallback() {
return;
for(int i=0;i<6;i++) {
ops[i].updateGain(sqrt(env[i]) / 8000);
operators[i].updateGain(sqrt(env[5-i]) / 8196);
}
}
void DexedAudioProcessorEditor::updateUI() {
TRACE("update UI called");
for(int i=0;i<processor->ctrl.size();i++) {
processor->ctrl[i]->updateComponent();
}
for(int i=0;i<6;i++) {
ops[i].updateFreqDisplay();
operators[i].updateDisplay();
}
}

@ -32,35 +32,36 @@
*/
class DexedAudioProcessorEditor : public AudioProcessorEditor,
public ButtonListener,
public SliderListener,
public ComboBoxListener,
public Timer {
DexedAudioProcessor *processor;
ComboBox presets;
MidiKeyboardComponent midiKeyboard;
DXLookNFeel dx_lnf;
ScopedPointer<TextButton> loadButton;
ScopedPointer<TextButton> saveButton;
ScopedPointer<TextButton> storeButton;
ScopedPointer<TextButton> aboutButton;
public:
DexedAudioProcessorEditor (DexedAudioProcessor* ownerFilter);
~DexedAudioProcessorEditor();
ScopedPointer<TextButton> textButton;
ScopedPointer<Slider> algo;
void timerCallback();
//==============================================================================
// This is just a standard Juce paint method...
void paint (Graphics& g);
void buttonClicked (Button* buttonThatWasClicked);
void sliderValueChanged (Slider*) override;
void comboBoxChanged (ComboBox* comboBoxThatHasChanged);
OperatorEditor ops[6];
OperatorEditor operators[6];
GlobalEditor global;
void updateUI();
Image cachedImage_background_png;
};

@ -68,7 +68,7 @@ void Ctrl::unbind() {
// ************************************************************************
// CtrlInt ================================================================
CtrlInt::CtrlInt(String name, int steps, int offset, bool starts1) :
CtrlDX::CtrlDX(String name, int steps, int offset, bool starts1) :
Ctrl(name) {
add1 = starts1 == 1;
this->steps = steps;
@ -76,15 +76,15 @@ Ctrl(name) {
dxOffset = offset;
}
float CtrlInt::getValuePlugin() {
float CtrlDX::getValuePlugin() {
return value / steps;
}
void CtrlInt::setValuePlugin(float f) {
void CtrlDX::setValuePlugin(float f) {
setValue((f * steps));
}
void CtrlInt::setValue(int v) {
void CtrlDX::setValue(int v) {
if ( v >= steps ) {
TRACE("WARNING: value too big %s : %d", label.toRawUTF8(), v);
v = steps-1;
@ -96,37 +96,37 @@ void CtrlInt::setValue(int v) {
}
}
int CtrlInt::getValue() {
int CtrlDX::getValue() {
if ( dxOffset >= 0 )
value = parent->data[dxOffset];
return value;
}
String CtrlInt::getValueDisplay() {
String CtrlDX::getValueDisplay() {
String ret;
ret << getValue();
return ret;
}
void CtrlInt::publishValue(int value) {
void CtrlDX::publishValue(int value) {
parent->beginParameterChangeGesture(idx);
parent->setParameterNotifyingHost(idx, (((float)value) / steps));
parent->endParameterChangeGesture(idx);
}
void CtrlInt::sliderValueChanged(Slider* moved) {
void CtrlDX::sliderValueChanged(Slider* moved) {
publishValue(((int)moved->getValue() - add1));
}
void CtrlInt::buttonClicked (Button* clicked) {
void CtrlDX::buttonClicked (Button* clicked) {
publishValue(clicked->getToggleStateValue() == 1 ? 1 : 0);
}
void CtrlInt::comboBoxChanged (ComboBox* combo) {
void CtrlDX::comboBoxChanged (ComboBox* combo) {
publishValue(combo->getSelectedId()-1);
}
void CtrlInt::updateComponent() {
void CtrlDX::updateComponent() {
//TRACE("setting for %s %d", label.toRawUTF8(), getValue());
if ( slider != NULL ) {
slider->setValue(getValue() + add1, NotificationType::dontSendNotification);
@ -156,69 +156,109 @@ void DexedAudioProcessor::initCtrl() {
// fill operator values;
for(int i=0;i<6;i++) {
// In the Sysex, OP6 comes first, then OP5...
int opTarget = (5-i) * 21;
// In the Sysex, OP6 comes first, then OP5...
//int opTarget = i * 21;
//// In the Sysex, OP6 comes first, then OP5...
//int opTarget = (5-i) * 21;
int opTarget = i * 21;
int opVal = 5-i;
String opName;
opName << "OP" << (opVal+1);
for(int j=0;j<4;j++) {
String opRate;
opRate << "OP" << (i+1) << "-EGR" << (j+1);
opCtrl[opVal].egRate[j] = new CtrlInt(opRate, 100, opTarget+j);
opRate << opName << "-EGR" << (j+1);
opCtrl[opVal].egRate[j] = new CtrlDX(opRate, 100, opTarget+j);
ctrl.add(opCtrl[opVal].egRate[j]);
String opLevel;
opLevel << "OP" << (i+1) << "-EGL" << (j+1);
opCtrl[opVal].egLevel[j] = new CtrlInt(opLevel, 100, opTarget+j+4);
opLevel << opName << "-EGL" << (j+1);
opCtrl[opVal].egLevel[j] = new CtrlDX(opLevel, 100, opTarget+j+4);
ctrl.add(opCtrl[opVal].egLevel[j]);
}
String opVol;
opVol << "OP" << (i+1) << "-LEVEL";
opCtrl[opVal].level = new CtrlInt(opVol, 100, opTarget+16);
opVol << opName << "-LEVEL";
opCtrl[opVal].level = new CtrlDX(opVol, 100, opTarget+16);
ctrl.add(opCtrl[opVal].level);
String opMode;
opMode << "OP" << (i+1) << "-MODE";
opCtrl[opVal].opMode = new CtrlInt(opMode, 1, opTarget+17);
opMode << opName << "-MODE";
opCtrl[opVal].opMode = new CtrlDX(opMode, 1, opTarget+17);
ctrl.add(opCtrl[opVal].opMode);
String coarse;
coarse << "OP" << (i+1) << "-COARSE";
opCtrl[opVal].coarse = new CtrlInt(coarse, 32, opTarget+18);
coarse << opName << "-COARSE";
opCtrl[opVal].coarse = new CtrlDX(coarse, 32, opTarget+18);
ctrl.add(opCtrl[opVal].coarse);
String fine;
fine << "OP" << (i+1) << "-FINE";
opCtrl[opVal].fine = new CtrlInt(fine, 100, opTarget+19);
fine << opName << "-FINE";
opCtrl[opVal].fine = new CtrlDX(fine, 100, opTarget+19);
ctrl.add(opCtrl[opVal].fine);
String detune;
detune << "OP" << (i+1) << "-DETUNE";
opCtrl[opVal].detune = new CtrlInt(detune, 15, opTarget+20);
detune << opName << "-DETUNE";
opCtrl[opVal].detune = new CtrlDX(detune, 15, opTarget+20);
ctrl.add(opCtrl[opVal].detune);
String sclBrkPt;
sclBrkPt << opName << "-SCL_BRK_PNT";
opCtrl[opVal].sclBrkPt = new CtrlDX(sclBrkPt, 100, opTarget+8);
ctrl.add(opCtrl[opVal].sclBrkPt);
String sclLeftDepth;
sclLeftDepth << opName << "-SCL_LFT_DEPTH";
opCtrl[opVal].sclLeftDepth = new CtrlDX(sclLeftDepth, 100, opTarget+9);
ctrl.add(opCtrl[opVal].sclLeftDepth);
String sclRightDepth;
sclRightDepth << opName << "-SCL_RHT_DEPTH";
opCtrl[opVal].sclRightDepth = new CtrlDX(sclRightDepth, 100, opTarget+10);
ctrl.add(opCtrl[opVal].sclRightDepth);
String sclLeftCurve;
sclLeftCurve << opName << "-SCL_LFT_CURVE";
opCtrl[opVal].sclLeftCurve = new CtrlDX(sclLeftCurve, 4, opTarget+11);
ctrl.add(opCtrl[opVal].sclLeftCurve);
String sclRightCurve;
sclRightCurve << opName << "-SCL_RHT_CURVE";
opCtrl[opVal].sclRightCurve = new CtrlDX(sclRightCurve, 4, opTarget+12);
ctrl.add(opCtrl[opVal].sclRightCurve);
String sclRate;
sclRate << opName << "-SCL_RATE";
opCtrl[opVal].sclRate = new CtrlDX(sclRate, 7, opTarget+13);
ctrl.add(opCtrl[opVal].sclRate);
String ampModSens;
ampModSens << opName << "-AMP_MODSENS";
opCtrl[opVal].ampModSens = new CtrlDX(ampModSens, 3, opTarget+14);
ctrl.add(opCtrl[opVal].ampModSens);
String velModSens;
velModSens << opName << "-VEL_MODSENS";
opCtrl[opVal].velModSens = new CtrlDX(velModSens, 8, opTarget+15);
ctrl.add(opCtrl[opVal].velModSens);
}
algo = new CtrlInt("Algorithm", 32, 134, true);
algo = new CtrlDX("Algorithm", 32, 134, true);
ctrl.add(algo);
lfoRate = new CtrlInt("LFO-Rate", 100, 137);
lfoRate = new CtrlDX("LFO-Rate", 100, 137);
ctrl.add(lfoRate);
lfoDelay = new CtrlInt("LFO-Delay", 100, 138);
lfoDelay = new CtrlDX("LFO-Delay", 100, 138);
ctrl.add(lfoDelay);
lfoPitchDepth = new CtrlInt("LFO-PitchDepth", 100, 139);
lfoPitchDepth = new CtrlDX("LFO-PitchDepth", 100, 139);
ctrl.add(lfoPitchDepth);
lfoAmpDepth = new CtrlInt("LFO-AmpDepth", 100, 140);
lfoAmpDepth = new CtrlDX("LFO-AmpDepth", 100, 140);
ctrl.add(lfoAmpDepth);
lfoSync = new CtrlInt("LFO-Sync", 2, 141);
lfoSync = new CtrlDX("LFO-Sync", 2, 141);
ctrl.add(lfoSync);
lfoWaveform = new CtrlInt("LFO-Waveform", 5, 142);
lfoWaveform = new CtrlDX("LFO-Waveform", 5, 142);
ctrl.add(lfoWaveform);
for(int i=0;i<ctrl.size();i++) {
@ -249,7 +289,7 @@ int DexedAudioProcessor::importSysex(const char *imported) {
return 0;
}
void DexedAudioProcessor::unpackSysex(int idx) {
void DexedAudioProcessor::unpackProgram(int idx) {
char *bulk = sysex + (idx * 128);
for (int op = 0; op < 6; op++) {
@ -289,11 +329,21 @@ void DexedAudioProcessor::unpackSysex(int idx) {
}
void DexedAudioProcessor::updateProgramFromSysex(const uint8 *rawdata) {
}
void DexedAudioProcessor::setDxValue(int offset, int v) {
TRACE("setting dx %d %d", offset, v);
isDirty = true;
refreshVoice = true;
if ( offset >= 0 )
data[offset] = v;
if ( !sendSysexChange )
return;
uint8 msg[7] = { 0xF0, 0x43, 0x10, offset > 127, 0, (uint8) v, 0xF7 };
msg[4] = offset & 0x7F;
midiOut.addEvent(msg, 7, 0);
}
void DexedAudioProcessor::unbindUI() {
@ -316,7 +366,6 @@ void DexedAudioProcessor::setParameter (int index, float newValue) {
}
int DexedAudioProcessor::getNumPrograms() {
// there is 32 program, the 33th one is a ghost for saving "unsaved" preset.
return 32;
}
@ -337,7 +386,7 @@ void DexedAudioProcessor::setCurrentProgram (int index) {
}
}
index = index > 31 ? 31 : index;
unpackSysex(index);
unpackProgram(index);
currentProgram = index;
lfo.reset(data + 137);
updateUI();

@ -38,7 +38,6 @@ public:
String label;
Ctrl(String name);
void bind(Slider *s);
void bind(Button *b);
void bind(ComboBox *c);
@ -56,15 +55,15 @@ public:
DexedAudioProcessor *parent;
};
// CtrlInt
class CtrlInt : public Ctrl {
// CtrlDX is a controller that is related to DX parameters
class CtrlDX : public Ctrl {
int value;
int steps;
int add1;
int dxOffset;
public:
CtrlInt(String name, int steps, int offset = -1, bool starts1 = false);
CtrlDX(String name, int steps, int offset = -1, bool starts1 = false);
void setValuePlugin(float f);
float getValuePlugin();
void publishValue(int value);
@ -80,15 +79,21 @@ public:
struct OperatorCtrl {
ScopedPointer<CtrlInt> egRate[4];
ScopedPointer<CtrlInt> egLevel[4];
ScopedPointer<CtrlInt> level;
ScopedPointer<CtrlInt> opMode;
ScopedPointer<CtrlInt> coarse;
ScopedPointer<CtrlInt> fine;
ScopedPointer<CtrlInt> detune;
ScopedPointer<CtrlDX> egRate[4];
ScopedPointer<CtrlDX> egLevel[4];
ScopedPointer<CtrlDX> level;
ScopedPointer<CtrlDX> opMode;
ScopedPointer<CtrlDX> coarse;
ScopedPointer<CtrlDX> fine;
ScopedPointer<CtrlDX> detune;
ScopedPointer<CtrlDX> sclBrkPt;
ScopedPointer<CtrlDX> sclLeftDepth;
ScopedPointer<CtrlDX> sclRightDepth;
ScopedPointer<CtrlDX> sclLeftCurve;
ScopedPointer<CtrlDX> sclRightCurve;
ScopedPointer<CtrlDX> sclRate;
ScopedPointer<CtrlDX> ampModSens;
ScopedPointer<CtrlDX> velModSens;
};
#endif // PLUGINPARAM_H_INCLUDED

@ -94,13 +94,13 @@ void DexedAudioProcessor::releaseResources() {
void DexedAudioProcessor::processBlock(AudioSampleBuffer& buffer, MidiBuffer& midiMessages) {
int numSamples = buffer.getNumSamples();
if ( isDirty ) {
if ( refreshVoice ) {
for(int i=0;i<MAX_ACTIVE_NOTES;i++) {
if ( voices[i].live )
voices[i].dx7_note->update(data, voices[i].midi_note);
}
lfo.reset(data + 137);
isDirty = false;
refreshVoice = false;
}
// check buffer size
@ -120,8 +120,9 @@ void DexedAudioProcessor::processBlock(AudioSampleBuffer& buffer, MidiBuffer& mi
int pos;
while(it.getNextEvent(msg, pos)) {
processMidiMessage(msg.getRawData(), msg.getRawDataSize());
processMidiMessage(&msg);
}
midiMessages.clear();
processSamples(numSamples, workBlock);
float *channelData = buffer.getSampleData(0);
@ -143,6 +144,10 @@ void DexedAudioProcessor::processBlock(AudioSampleBuffer& buffer, MidiBuffer& mi
for (int i = getNumInputChannels(); i < getNumOutputChannels(); ++i) {
buffer.clear (i, 0, buffer.getNumSamples());
}
if ( ! midiOut.isEmpty() ) {
midiMessages.swapWith(midiOut);
}
}
@ -152,7 +157,31 @@ AudioProcessor* JUCE_CALLTYPE createPluginFilter() {
return new DexedAudioProcessor();
}
void DexedAudioProcessor::processMidiMessage(const uint8_t *buf, int buf_size) {
void DexedAudioProcessor::processMidiMessage(MidiMessage *msg) {
if ( msg->isSysEx() ) {
TRACE("SYSEX RECEIVED");
const uint8 *buf = msg->getSysExData();
int sz = msg->getSysExDataSize();
if ( sz < 3 )
return;
// test if it is a Yamaha Sysex
if ( buf[0] != 0x43 )
return;
// single voice dump
if ( buf[2] == 0 ) {
if ( sz < 155 ) {
TRACE("wrong single voice datasize %d", buf[2]);
return;
}
updateProgramFromSysex(buf+5);
}
return;
}
const uint8 *buf = msg->getRawData();
uint8_t cmd = buf[0];
switch(cmd & 0xf0) {
@ -358,7 +387,7 @@ bool DexedAudioProcessor::hasEditor() const {
void DexedAudioProcessor::updateUI() {
AudioProcessorEditor *editor = getActiveEditor();
if ( editor == NULL ) {
TRACE("no editor found");
TRACE("no editor found!?");
return;
}
DexedAudioProcessorEditor *dexedEditor = (DexedAudioProcessorEditor *) editor;

@ -51,7 +51,6 @@ class DexedAudioProcessor : public AudioProcessor
// in MIDI units (0x4000 is neutral)
Controllers controllers;
bool sustain;
// Extra buffering for when GetSamples wants a buffer not a multiple of N
@ -60,47 +59,51 @@ class DexedAudioProcessor : public AudioProcessor
SInt16 *workBlock;
int workBlockSize;
int currentProgram;
char sysex[4096];
char patchNames[32][13];
void unpackSysex(int idx);
public :
bool isDirty;
Array<Ctrl*> ctrl;
void packProgram(int idx);
void unpackProgram(int idx);
void updateProgramFromSysex(const uint8 *rawdata);
// PARAMETER CONTAINER
OperatorCtrl opCtrl[6];
ScopedPointer<CtrlInt> pitchEgRate[4];
ScopedPointer<CtrlInt> pitchEgLevel[4];
/**
* This flag is usd in the audio thread to know if the voice has changed
* and needs to be updated.
*/
bool refreshVoice;
ScopedPointer<CtrlInt> algo;
ScopedPointer<CtrlInt> lfoRate;
ScopedPointer<CtrlInt> lfoDelay;
ScopedPointer<CtrlInt> lfoAmpDepth;
ScopedPointer<CtrlInt> lfoPitchDepth;
ScopedPointer<CtrlInt> lfoWaveform;
ScopedPointer<CtrlInt> lfoSync;
MidiBuffer midiOut;
void processMidiMessage(MidiMessage *msg);
void keydown(uint8_t pitch, uint8_t velo);
void keyup(uint8_t pitch);
void processSamples(int n_samples, int16_t *buffer);
void initCtrl();
int importSysex(const char *imported);
String getPatchName(int idx);
void setDxValue(int offset, int v);
public :
bool refreshUI;
bool sendSysexChange;
char data[161];
void unbindUI();
Array<Ctrl*> ctrl;
OperatorCtrl opCtrl[6];
ScopedPointer<CtrlDX> pitchEgRate[4];
ScopedPointer<CtrlDX> pitchEgLevel[4];
ScopedPointer<CtrlDX> algo;
ScopedPointer<CtrlDX> lfoRate;
ScopedPointer<CtrlDX> lfoDelay;
ScopedPointer<CtrlDX> lfoAmpDepth;
ScopedPointer<CtrlDX> lfoPitchDepth;
ScopedPointer<CtrlDX> lfoWaveform;
ScopedPointer<CtrlDX> lfoSync;
int importSysex(const char *imported);
void setDxValue(int offset, int v);
void processMidiMessage(const uint8_t *buf, int buf_size);
void keydown(uint8_t pitch, uint8_t velo);
void keyup(uint8_t pitch);
void processSamples(int n_samples, int16_t *buffer);
public:
//==============================================================================
DexedAudioProcessor();
~DexedAudioProcessor();
@ -151,6 +154,7 @@ public:
// this is kept up to date with the midi messages that arrive, and the UI component
// registers with it so it can represent the incoming messages
MidiKeyboardState keyboardState;
void unbindUI();
static void log(const char *source, const char *fmt, ...);

Loading…
Cancel
Save