diff --git a/Builds/MacOSX/Dexed.xcodeproj/project.xcworkspace/xcuserdata/asb2m10.xcuserdatad/UserInterfaceState.xcuserstate b/Builds/MacOSX/Dexed.xcodeproj/project.xcworkspace/xcuserdata/asb2m10.xcuserdatad/UserInterfaceState.xcuserstate index b2f594e..9957ef1 100644 Binary files a/Builds/MacOSX/Dexed.xcodeproj/project.xcworkspace/xcuserdata/asb2m10.xcuserdatad/UserInterfaceState.xcuserstate and b/Builds/MacOSX/Dexed.xcodeproj/project.xcworkspace/xcuserdata/asb2m10.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/Builds/VisualStudio2012/Dexed.sln b/Builds/VisualStudio2012/Dexed.sln index 5795149..6b5dd1b 100644 --- a/Builds/VisualStudio2012/Dexed.sln +++ b/Builds/VisualStudio2012/Dexed.sln @@ -1,23 +1,17 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Express 2012 for Windows Desktop -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Dexed", "Dexed.vcxproj", "{1A9EF105-5BF5-9FB6-9634-A91A6D840866}" +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 - Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 - Release|x64 = Release|x64 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}.Debug|x64.ActiveCfg = Debug|x64 - {1A9EF105-5BF5-9FB6-9634-A91A6D840866}.Debug|x64.Build.0 = Debug|x64 {1A9EF105-5BF5-9FB6-9634-A91A6D840866}.Release|Win32.ActiveCfg = Release|Win32 {1A9EF105-5BF5-9FB6-9634-A91A6D840866}.Release|Win32.Build.0 = Release|Win32 - {1A9EF105-5BF5-9FB6-9634-A91A6D840866}.Release|x64.ActiveCfg = Release|x64 - {1A9EF105-5BF5-9FB6-9634-A91A6D840866}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Builds/VisualStudio2012/Dexed.vcxproj b/Builds/VisualStudio2012/Dexed.vcxproj index 525b8e9..9ccec7a 100644 --- a/Builds/VisualStudio2012/Dexed.vcxproj +++ b/Builds/VisualStudio2012/Dexed.vcxproj @@ -1,40 +1,27 @@ - + + Debug Win32 - - Debug - x64 - Release Win32 - - Release - x64 - {1A9EF105-5BF5-9FB6-9634-A91A6D840866} v110 - + DynamicLibrary false MultiByte v110 - - DynamicLibrary - false - MultiByte - v110 - DynamicLibrary false @@ -42,17 +29,11 @@ true v110 - - DynamicLibrary - false - MultiByte - true - v110 - - - + + - + v110 @@ -61,14 +42,10 @@ <_ProjectFileVersion>10.0.30319.1 .\Debug\ Dexed - Dexed true - true .\Release\ Dexed - Dexed true - true v110 @@ -77,7 +54,7 @@ true true Win32 - + Disabled @@ -86,7 +63,7 @@ WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2012_78A501F=1;%(PreprocessorDefinitions) MultiThreadedDebug true - + $(IntDir)\ $(IntDir)\ $(IntDir)\ @@ -113,55 +90,13 @@ $(IntDir)\Dexed.bsc - - - _DEBUG;%(PreprocessorDefinitions) - true - true - - - - - Disabled - ProgramDatabase - ..\..\JuceLibraryCode;..\..\JuceLibraryCode\modules;C:\work\vstsdk2.4;%(AdditionalIncludeDirectories) - WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2012_78A501F=1;%(PreprocessorDefinitions) - MultiThreadedDebug - true - - - $(IntDir)\ - $(IntDir)\ - $(IntDir)\ - Level4 - true - true - - - _DEBUG;%(PreprocessorDefinitions) - - - $(OutDir)\Dexed.dll - true - libcmt.lib; msvcrt.lib;;%(IgnoreSpecificDefaultLibraries) - true - $(IntDir)\Dexed.pdb - Windows - false - true - - - true - $(IntDir)\Dexed.bsc - - NDEBUG;%(PreprocessorDefinitions) true true Win32 - + MinSpace @@ -169,7 +104,7 @@ WIN32;_WINDOWS;NDEBUG;JUCER_VS2012_78A501F=1;%(PreprocessorDefinitions) MultiThreaded true - + $(IntDir)\ $(IntDir)\ $(IntDir)\ @@ -197,67 +132,25 @@ $(IntDir)\Dexed.bsc - - - NDEBUG;%(PreprocessorDefinitions) - true - true - - - - - MinSpace - ..\..\JuceLibraryCode;..\..\JuceLibraryCode\modules;C:\work\vstsdk2.4;%(AdditionalIncludeDirectories) - WIN32;_WINDOWS;NDEBUG;JUCER_VS2012_78A501F=1;%(PreprocessorDefinitions) - MultiThreaded - true - - - $(IntDir)\ - $(IntDir)\ - $(IntDir)\ - Level4 - true - true - - - NDEBUG;%(PreprocessorDefinitions) - - - $(OutDir)\Dexed.dll - true - %(IgnoreSpecificDefaultLibraries) - false - $(IntDir)\Dexed.pdb - Windows - true - true - true - - - true - $(IntDir)\Dexed.bsc - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + true @@ -1188,20 +1081,20 @@ true - - - - - - - - - - - - - - + + + + + + + + + + + + + + StdCall @@ -1217,434 +1110,434 @@ StdCall - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - + - - - \ No newline at end of file + + + diff --git a/Builds/VisualStudio2012/Dexed.vcxproj.filters b/Builds/VisualStudio2012/Dexed.vcxproj.filters index 2ad191a..3569e1b 100644 --- a/Builds/VisualStudio2012/Dexed.vcxproj.filters +++ b/Builds/VisualStudio2012/Dexed.vcxproj.filters @@ -1,4 +1,5 @@ - + + @@ -375,6 +376,9 @@ Juce Modules\juce_audio_basics\synthesisers + + Juce Modules\juce_audio_plugin_client\AU + Juce Modules\juce_audio_plugin_client\RTAS @@ -390,12 +394,21 @@ Juce Modules\juce_audio_plugin_client\RTAS + + Juce Modules\juce_audio_plugin_client\RTAS + Juce Modules\juce_audio_plugin_client\VST + + Juce Modules\juce_audio_plugin_client\VST + Juce Modules\juce_audio_plugin_client\AAX + + Juce Modules\juce_audio_plugin_client\AAX + Juce Modules\juce_audio_plugin_client\utility @@ -420,6 +433,9 @@ Juce Modules\juce_audio_processors\format + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -654,6 +670,21 @@ Juce Modules\juce_core\native + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + Juce Modules\juce_core\native @@ -723,9 +754,15 @@ Juce Modules\juce_events\native + + Juce Modules\juce_events\native + Juce Modules\juce_events\native + + Juce Modules\juce_events\native + Juce Modules\juce_events\native @@ -825,6 +862,12 @@ Juce Modules\juce_graphics\native + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + Juce Modules\juce_graphics\native @@ -1179,6 +1222,12 @@ Juce Modules\juce_gui_basics\native + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + Juce Modules\juce_gui_basics\native @@ -1188,6 +1237,21 @@ Juce Modules\juce_gui_basics\native + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + Juce Modules\juce_gui_basics\native @@ -1233,15 +1297,27 @@ Juce Modules\juce_gui_extra\native + + Juce Modules\juce_gui_extra\native + Juce Modules\juce_gui_extra\native Juce Modules\juce_gui_extra\native + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + Juce Modules\juce_gui_extra\native + + Juce Modules\juce_gui_extra\native + Juce Modules\juce_gui_extra\native @@ -1311,14 +1387,6 @@ Juce Library Code - - - - - - - - @@ -2586,4 +2654,4 @@ Juce Library Code - \ No newline at end of file + diff --git a/Builds/VisualStudio2013/Dexed.sln b/Builds/VisualStudio2013/Dexed.sln new file mode 100644 index 0000000..f589162 --- /dev/null +++ b/Builds/VisualStudio2013/Dexed.sln @@ -0,0 +1,19 @@ +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2013 +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 diff --git a/Builds/VisualStudio2013/Dexed.vcxproj b/Builds/VisualStudio2013/Dexed.vcxproj new file mode 100644 index 0000000..0dc5f34 --- /dev/null +++ b/Builds/VisualStudio2013/Dexed.vcxproj @@ -0,0 +1,1543 @@ + + + + + + Debug + Win32 + + + Release + Win32 + + + + {1A9EF105-5BF5-9FB6-9634-A91A6D840866} + v120 + + + + DynamicLibrary + false + MultiByte + v120 + + + DynamicLibrary + false + MultiByte + true + v120 + + + + + + + + v120 + + + <_ProjectFileVersion>10.0.30319.1 + .\Debug\ + Dexed + true + .\Release\ + Dexed + true + v120 + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + + + + Disabled + EditAndContinue + ..\..\JuceLibraryCode;..\..\JuceLibraryCode\modules;c:\SDKs\vstsdk2.4;%(AdditionalIncludeDirectories) + WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2013_78A5020=1;%(PreprocessorDefinitions) + MultiThreadedDebug + true + + $(IntDir)\ + $(IntDir)\ + $(IntDir)\ + Level4 + true + true + + + _DEBUG;%(PreprocessorDefinitions) + + + $(OutDir)\Dexed.dll + true + libcmt.lib; msvcrt.lib;;%(IgnoreSpecificDefaultLibraries) + true + $(IntDir)\Dexed.pdb + Windows + MachineX86 + false + true + + + true + $(IntDir)\Dexed.bsc + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + + + + MinSpace + ..\..\JuceLibraryCode;..\..\JuceLibraryCode\modules;c:\SDKs\vstsdk2.4;%(AdditionalIncludeDirectories) + WIN32;_WINDOWS;NDEBUG;JUCER_VS2013_78A5020=1;%(PreprocessorDefinitions) + MultiThreaded + true + + $(IntDir)\ + $(IntDir)\ + $(IntDir)\ + Level4 + true + true + + + NDEBUG;%(PreprocessorDefinitions) + + + $(OutDir)\Dexed.dll + true + %(IgnoreSpecificDefaultLibraries) + false + $(IntDir)\Dexed.pdb + Windows + MachineX86 + true + true + true + + + true + $(IntDir)\Dexed.bsc + + + + + + + + + + + + + + + + + + + + + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + + + + + + + + + + + + + + + StdCall + + + StdCall + + + StdCall + + + StdCall + + + StdCall + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Builds/VisualStudio2013/Dexed.vcxproj.filters b/Builds/VisualStudio2013/Dexed.vcxproj.filters new file mode 100644 index 0000000..ce5b2ed --- /dev/null +++ b/Builds/VisualStudio2013/Dexed.vcxproj.filters @@ -0,0 +1,2657 @@ + + + + + + {B90C76C9-07F8-4447-4E85-533FEBF85EB8} + + + {A4A2BA4F-D40D-22B2-5C99-2C2FE535C844} + + + {C5AF6998-922C-E781-8C7B-4ACFAA05FAAF} + + + {9DB0CF5F-F6E7-E40E-5CE4-E122873AC45A} + + + {422C46B7-0467-2DB0-BF3C-16DFCAFD69AC} + + + {3247ED97-A75A-F50B-8CCC-46155E895806} + + + {A33A1E1D-AC2C-6382-8681-48B0FC374C60} + + + {3FD908F5-98C8-9A61-FC03-0BAF8913CBB0} + + + {11A75801-B027-40BD-4993-023023ACCBF7} + + + {EF2CAB40-0432-429B-C517-86ADF136BB8A} + + + {8F7EC212-3168-AD81-5064-C45BA838C408} + + + {EE36D8B9-408C-AEC9-66E7-BEA9E407F27F} + + + {1ED92A41-D496-5397-A4B0-9FA52DBA9215} + + + {50F044B3-0D39-198B-CA5F-BE5E6C078D04} + + + {AF5F4789-D607-BFD8-D853-09473C27449C} + + + {F0C10808-8C36-BCD0-D25F-523774B0ADA2} + + + {EA1913F9-0E99-FEC5-0192-0C197611B8F8} + + + {0B0E7392-324B-088C-FBEB-5FE999D61782} + + + {77E2C34E-A4D6-EDB5-A107-7CB3CEF0E8EF} + + + {20254EFE-6CBD-31A7-2119-92B1E0E0E311} + + + {70796D73-6D30-8A1B-4732-7C021E47C05A} + + + {EB8DD942-E2CB-869F-D381-E02A65BA790B} + + + {B63F69FD-8A40-8E1E-E7ED-419B8DC1C12B} + + + {8167E753-09C7-5D1C-EF2B-32D297557443} + + + {AEDCB7F7-7A36-5392-8E9A-715F5BDE35CB} + + + {95CA1506-2B94-0DEE-0C8D-85EDEBBC4E88} + + + {244D11B0-2D68-3C08-A0B7-0D12469BC3AA} + + + {476C69CE-0B67-6B85-E888-45D91E37A29E} + + + {7C5AD030-F8CC-6E85-0AF6-196B3ED40AC6} + + + {0608ADE9-66EF-1A19-6D57-12D07F76EB53} + + + {05F3DB8A-499C-6ACA-282F-5BF8455A0DE1} + + + {C9F6D785-BF78-5AA1-B479-111C65397864} + + + {C8F726FC-26BF-2E6B-4ED5-55A7FE316D7D} + + + {DA0DC4AC-B511-A2D4-199A-C93454D6F114} + + + {91929C6F-7902-B87D-5260-2F6CBF8ACD93} + + + {C294408A-2005-2E9E-7AC0-8D3ABE8AC175} + + + {4634FFAE-9586-A970-364C-4FDDA635F99F} + + + {F2B2F310-F30F-7166-42A9-9BF9C230DA78} + + + {1B67A7C0-86E0-53F6-6AE3-7AD93B8DC95B} + + + {F03654BC-34D8-F975-BEA3-750CC2783D23} + + + {4927C7A1-9235-4AA1-93CD-B4E67E6F1E5F} + + + {FA891A58-9FDA-9651-43C4-714A19B5D08D} + + + {C79A4D23-7866-8F3E-AC39-BD68C52A9259} + + + {928D8FCC-5E00-174B-6538-93E8D75AB396} + + + {1988E68A-A964-64CA-0E0C-26FF9BC5176C} + + + {3DF036EA-3B80-553B-2494-3AAC835CAE75} + + + {358AEA11-3F96-36AE-7B32-71373B5C5396} + + + {F2A38F45-6E55-E147-2E52-64A89FDD9D59} + + + {6172822C-01A5-E824-12DA-FA43FA934D35} + + + {41DC3BE3-D629-8A17-C32B-F5B4008B5FAD} + + + {B098BC87-3298-7E6B-12DC-D26C09CDCAED} + + + {6322B88F-984A-C3CD-6263-38D7AA49B6EC} + + + {73C1E759-AD90-59A3-942E-2D10FAA29107} + + + {EE1AE8C3-0908-8F53-A4E5-D930C7C97C26} + + + {4926B3FF-E797-F586-857A-69D9703FA2D1} + + + {EBC65085-3AD5-280C-1A29-2B1683643AA1} + + + {413F481F-075C-2958-115C-D8268682FCB7} + + + {69E1179D-76EC-26DC-C3E6-6602ED26D783} + + + {C1A1A236-AB01-173E-96C3-0706BFF93B1E} + + + {1182303F-ECA3-166D-AC0C-92C5E762CB93} + + + {26ECA2AF-7368-C6CC-58EF-017ECD1862D0} + + + {E37D25CD-4350-4614-055B-7ABC55E67895} + + + {FFC6E1CC-C772-75E6-5087-FB5D4E016799} + + + {8E43579F-C185-266D-DD67-F8B95BD80F2F} + + + {2CB59E7C-D0E4-7D27-2ACF-C7ABADEE936D} + + + {796B7886-44A7-34CC-9B95-BF4FB2C7B6F4} + + + {A92719C7-70BE-57C4-CE9E-A9BC9DFEB757} + + + {75F1F352-251A-75E0-D941-8431588F5C1E} + + + {DB6E3D09-66DA-12DA-BAE8-A5BFFA7A14AC} + + + {7BCEAB87-62FD-0327-EB5D-679E54EDB9B1} + + + {E980FADB-6E3F-B93C-DE02-CE4271C9BA93} + + + {C3B2EB8A-1A2F-306F-AA78-3E9D1593788B} + + + {7A53E6F1-1343-33B8-4CA8-1D7B714A0E76} + + + {5A0AA36E-3957-E413-14C6-31CBE15271DF} + + + {D7E3D10F-3ED8-DFC5-6DB3-E4ACBF8678FB} + + + {F408DCA2-D5E2-0A3A-A064-A1D045889BC1} + + + {5FDBD6B1-9BBD-392F-4DA5-FEA40A9370C4} + + + {46535B56-3737-2BE8-E3A0-571BCBEB2DA4} + + + {C2B9505B-27B4-F650-12BD-F477D4BBCBAA} + + + {61712B09-5783-ADFA-2001-5A0C3D7764EB} + + + {8A80BA78-D3A8-C0F8-7FFD-61AA028CE852} + + + {8EC9572F-3CCA-E930-74B6-CB6139DE0E17} + + + {C60A6FCA-9462-922E-AD8D-69F10C9049AF} + + + {D56498EE-E354-1F00-5EEE-8CF7944BEAFB} + + + {61B2920C-494D-D8CB-C0C7-5DBF3D76D164} + + + {66C9B809-8739-A217-C78D-A15D6089B8E3} + + + {C413328B-5D81-89EE-F4F3-75752E700DE4} + + + {8B4D1BAA-6DB4-CAEC-A0FA-271F354D5C61} + + + + + Dexed\Source + + + Dexed\Source + + + Dexed\Source + + + Dexed\Source\msfa + + + Dexed\Source\msfa + + + Dexed\Source\msfa + + + Dexed\Source\msfa + + + Dexed\Source\msfa + + + Dexed\Source\msfa + + + Dexed\Source\msfa + + + Dexed\Source\msfa + + + Dexed\Source\msfa + + + Dexed\Source + + + Dexed\Source + + + Dexed\Source + + + Dexed\Source + + + Dexed\Source + + + Dexed\Source + + + Juce Modules\juce_audio_basics\buffers + + + Juce Modules\juce_audio_basics\buffers + + + Juce Modules\juce_audio_basics\buffers + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\effects + + + Juce Modules\juce_audio_basics\effects + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\synthesisers + + + Juce Modules\juce_audio_plugin_client\AU + + + Juce Modules\juce_audio_plugin_client\RTAS + + + Juce Modules\juce_audio_plugin_client\RTAS + + + Juce Modules\juce_audio_plugin_client\RTAS + + + Juce Modules\juce_audio_plugin_client\RTAS + + + Juce Modules\juce_audio_plugin_client\RTAS + + + Juce Modules\juce_audio_plugin_client\RTAS + + + Juce Modules\juce_audio_plugin_client\VST + + + Juce Modules\juce_audio_plugin_client\VST + + + Juce Modules\juce_audio_plugin_client\AAX + + + Juce Modules\juce_audio_plugin_client\AAX + + + Juce Modules\juce_audio_plugin_client\utility + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\format + + + Juce Modules\juce_audio_processors\format + + + Juce Modules\juce_audio_processors\format_types + + + Juce Modules\juce_audio_processors\format_types + + + Juce Modules\juce_audio_processors\format_types + + + Juce Modules\juce_audio_processors\format_types + + + Juce Modules\juce_audio_processors\scanning + + + Juce Modules\juce_audio_processors\scanning + + + Juce Modules\juce_audio_processors\scanning + + + Juce Modules\juce_audio_utils\gui + + + Juce Modules\juce_audio_utils\gui + + + Juce Modules\juce_audio_utils\gui + + + Juce Modules\juce_audio_utils\gui + + + Juce Modules\juce_audio_utils\players + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\maths + + + Juce Modules\juce_core\maths + + + Juce Modules\juce_core\maths + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\time + + + Juce Modules\juce_core\time + + + Juce Modules\juce_core\time + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\logging + + + Juce Modules\juce_core\logging + + + Juce Modules\juce_core\system + + + Juce Modules\juce_core\xml + + + Juce Modules\juce_core\xml + + + Juce Modules\juce_core\javascript + + + Juce Modules\juce_core\javascript + + + Juce Modules\juce_core\zip + + + Juce Modules\juce_core\zip + + + Juce Modules\juce_core\zip + + + Juce Modules\juce_core\unit_tests + + + Juce Modules\juce_core\misc + + + Juce Modules\juce_core\misc + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_data_structures\values + + + Juce Modules\juce_data_structures\values + + + Juce Modules\juce_data_structures\undomanager + + + Juce Modules\juce_data_structures\app_properties + + + Juce Modules\juce_data_structures\app_properties + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\timers + + + Juce Modules\juce_events\timers + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\interprocess + + + Juce Modules\juce_events\interprocess + + + Juce Modules\juce_events\native + + + Juce Modules\juce_events\native + + + Juce Modules\juce_events\native + + + Juce Modules\juce_events\native + + + Juce Modules\juce_events\native + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\contexts + + + Juce Modules\juce_graphics\contexts + + + Juce Modules\juce_graphics\contexts + + + Juce Modules\juce_graphics\images + + + Juce Modules\juce_graphics\images + + + Juce Modules\juce_graphics\images + + + Juce Modules\juce_graphics\images + + + Juce Modules\juce_graphics\image_formats + + + Juce Modules\juce_graphics\image_formats + + + Juce Modules\juce_graphics\image_formats + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\placement + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\effects + + + Juce Modules\juce_graphics\effects + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\menus + + + Juce Modules\juce_gui_basics\menus + + + Juce Modules\juce_gui_basics\menus + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\lookandfeel + + + Juce Modules\juce_gui_basics\lookandfeel + + + Juce Modules\juce_gui_basics\lookandfeel + + + Juce Modules\juce_gui_basics\lookandfeel + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\misc + + + Juce Modules\juce_gui_basics\misc + + + Juce Modules\juce_gui_basics\application + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_extra\code_editor + + + Juce Modules\juce_gui_extra\code_editor + + + Juce Modules\juce_gui_extra\code_editor + + + Juce Modules\juce_gui_extra\documents + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra\native + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + + + Dexed\Source + + + Dexed\Source + + + Dexed\Source + + + Dexed\Source\msfa + + + Dexed\Source\msfa + + + Dexed\Source\msfa + + + Dexed\Source\msfa + + + Dexed\Source\msfa + + + Dexed\Source\msfa + + + Dexed\Source\msfa + + + Dexed\Source\msfa + + + Dexed\Source\msfa + + + Dexed\Source\msfa + + + Dexed\Source\msfa + + + Dexed\Source\msfa + + + Dexed\Source\msfa + + + Dexed\Source + + + Dexed\Source + + + Dexed\Source + + + Dexed\Source + + + Dexed\Source + + + Dexed\Source + + + Juce Modules\juce_audio_basics\buffers + + + Juce Modules\juce_audio_basics\buffers + + + Juce Modules\juce_audio_basics\buffers + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\midi + + + Juce Modules\juce_audio_basics\effects + + + Juce Modules\juce_audio_basics\effects + + + Juce Modules\juce_audio_basics\effects + + + Juce Modules\juce_audio_basics\effects + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\sources + + + Juce Modules\juce_audio_basics\synthesisers + + + Juce Modules\juce_audio_basics + + + Juce Modules\juce_audio_plugin_client\RTAS + + + Juce Modules\juce_audio_plugin_client\utility + + + Juce Modules\juce_audio_plugin_client\utility + + + Juce Modules\juce_audio_plugin_client\utility + + + Juce Modules\juce_audio_plugin_client\utility + + + Juce Modules\juce_audio_plugin_client\utility + + + Juce Modules\juce_audio_plugin_client\utility + + + Juce Modules\juce_audio_plugin_client + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\processors + + + Juce Modules\juce_audio_processors\format + + + Juce Modules\juce_audio_processors\format + + + Juce Modules\juce_audio_processors\format_types + + + Juce Modules\juce_audio_processors\format_types + + + Juce Modules\juce_audio_processors\format_types + + + Juce Modules\juce_audio_processors\format_types + + + Juce Modules\juce_audio_processors\format_types + + + Juce Modules\juce_audio_processors\scanning + + + Juce Modules\juce_audio_processors\scanning + + + Juce Modules\juce_audio_processors\scanning + + + Juce Modules\juce_audio_processors + + + Juce Modules\juce_audio_utils\gui + + + Juce Modules\juce_audio_utils\gui + + + Juce Modules\juce_audio_utils\gui + + + Juce Modules\juce_audio_utils\gui + + + Juce Modules\juce_audio_utils\gui + + + Juce Modules\juce_audio_utils\players + + + Juce Modules\juce_audio_utils + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\text + + + Juce Modules\juce_core\maths + + + Juce Modules\juce_core\maths + + + Juce Modules\juce_core\maths + + + Juce Modules\juce_core\maths + + + Juce Modules\juce_core\maths + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\memory + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\containers + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\threads + + + Juce Modules\juce_core\time + + + Juce Modules\juce_core\time + + + Juce Modules\juce_core\time + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\files + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\network + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\streams + + + Juce Modules\juce_core\logging + + + Juce Modules\juce_core\logging + + + Juce Modules\juce_core\system + + + Juce Modules\juce_core\system + + + Juce Modules\juce_core\system + + + Juce Modules\juce_core\system + + + Juce Modules\juce_core\xml + + + Juce Modules\juce_core\xml + + + Juce Modules\juce_core\javascript + + + Juce Modules\juce_core\javascript + + + Juce Modules\juce_core\zip + + + Juce Modules\juce_core\zip + + + Juce Modules\juce_core\zip + + + Juce Modules\juce_core\unit_tests + + + Juce Modules\juce_core\misc + + + Juce Modules\juce_core\misc + + + Juce Modules\juce_core\misc + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core\native + + + Juce Modules\juce_core + + + Juce Modules\juce_data_structures\values + + + Juce Modules\juce_data_structures\values + + + Juce Modules\juce_data_structures\undomanager + + + Juce Modules\juce_data_structures\undomanager + + + Juce Modules\juce_data_structures\app_properties + + + Juce Modules\juce_data_structures\app_properties + + + Juce Modules\juce_data_structures + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\messages + + + Juce Modules\juce_events\timers + + + Juce Modules\juce_events\timers + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\broadcasters + + + Juce Modules\juce_events\interprocess + + + Juce Modules\juce_events\interprocess + + + Juce Modules\juce_events\native + + + Juce Modules\juce_events\native + + + Juce Modules\juce_events\native + + + Juce Modules\juce_events + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\colour + + + Juce Modules\juce_graphics\contexts + + + Juce Modules\juce_graphics\contexts + + + Juce Modules\juce_graphics\contexts + + + Juce Modules\juce_graphics\contexts + + + Juce Modules\juce_graphics\images + + + Juce Modules\juce_graphics\images + + + Juce Modules\juce_graphics\images + + + Juce Modules\juce_graphics\images + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\geometry + + + Juce Modules\juce_graphics\placement + + + Juce Modules\juce_graphics\placement + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\fonts + + + Juce Modules\juce_graphics\effects + + + Juce Modules\juce_graphics\effects + + + Juce Modules\juce_graphics\effects + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics\native + + + Juce Modules\juce_graphics + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\components + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\mouse + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\keyboard + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\widgets + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\windows + + + Juce Modules\juce_gui_basics\menus + + + Juce Modules\juce_gui_basics\menus + + + Juce Modules\juce_gui_basics\menus + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\layout + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\buttons + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\positioning + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\drawables + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\properties + + + Juce Modules\juce_gui_basics\lookandfeel + + + Juce Modules\juce_gui_basics\lookandfeel + + + Juce Modules\juce_gui_basics\lookandfeel + + + Juce Modules\juce_gui_basics\lookandfeel + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\filebrowser + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\commands + + + Juce Modules\juce_gui_basics\misc + + + Juce Modules\juce_gui_basics\misc + + + Juce Modules\juce_gui_basics\application + + + Juce Modules\juce_gui_basics\native + + + Juce Modules\juce_gui_basics + + + Juce Modules\juce_gui_extra\code_editor + + + Juce Modules\juce_gui_extra\code_editor + + + Juce Modules\juce_gui_extra\code_editor + + + Juce Modules\juce_gui_extra\code_editor + + + Juce Modules\juce_gui_extra\code_editor + + + Juce Modules\juce_gui_extra\documents + + + Juce Modules\juce_gui_extra\embedding + + + Juce Modules\juce_gui_extra\embedding + + + Juce Modules\juce_gui_extra\embedding + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\misc + + + Juce Modules\juce_gui_extra\native + + + Juce Modules\juce_gui_extra + + + Juce Library Code + + + Juce Library Code + + + Juce Library Code + + + + + Dexed\Resources + + + Juce Modules\juce_audio_basics + + + Juce Modules\juce_audio_plugin_client + + + Juce Modules\juce_audio_processors + + + Juce Modules\juce_audio_utils + + + Juce Modules\juce_core + + + Juce Modules\juce_data_structures + + + Juce Modules\juce_events + + + Juce Modules\juce_graphics + + + Juce Modules\juce_gui_basics + + + Juce Modules\juce_gui_extra + + + Juce Library Code + + + + + Juce Library Code + + + diff --git a/Builds/VisualStudio2013/resources.rc b/Builds/VisualStudio2013/resources.rc new file mode 100644 index 0000000..52f8d75 --- /dev/null +++ b/Builds/VisualStudio2013/resources.rc @@ -0,0 +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 + +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 diff --git a/Dexed.jucer b/Dexed.jucer index 9921676..5e651f5 100644 --- a/Dexed.jucer +++ b/Dexed.jucer @@ -111,6 +111,28 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/README.md b/README.md index 8cc645a..be9c40e 100644 --- a/README.md +++ b/README.md @@ -13,14 +13,14 @@ the original synth. Dexed is licensed on the GPL v2. The msfa component (acronym for music synthesizer for android, see msfa in the source folder) stays on the Apache 2.0 license to able to collaborate between projects. -Features +Features -------- * Multi platform (OS X, Windows, Linux) and multi format (VST, AU and others that I don't use); by using JUCE * The sound engine [music-synthesizer-for-android](https://code.google.com/p/music-synthesizer-for-android) is closely modeled on the original DX7 characteristics * All of the 144 DX7 parameters are available from one single panel * Fully supports DX7 input and output Sysex messages; including controller change. This means that you can use this with a native DX7/TX7 as a patch editor * Each operator have a realtime VU meter to know wich one is active -* Can load any DX7/TX7 sysex programs +* Can load/save any DX7/TX7 sysex programs. It is also possible to save a single program into a different sysex file. Binary downloads ---------------- @@ -32,19 +32,26 @@ Using as a DX7 editor This plugin can process original DX7 messages. If you change a parameter, it will send the corresponding DX7 sysex to midi out. Not all DAW supports sysex; for example Ableton Live simply discard any sysex data. Reaper does process midi out, but doesn't pass any -midi in sysex input data to the plugin. +midi in sysex input data to the plugin. Randomized programs ------------------- Dexed doesn't check the sysex checksum so you can load any type of files. If the checksum doesn't -match, it will tell you but load it anyway. This features enable a somekind of randomized DX -programs. +match, it will tell you but load it anyway. This feature act as a kind of a randomization +for DX programs. + +Credits & thanks +---------------- +Raph Levien and msfa team, markusthegeek, Jean-Marc Desprez and all the crew who made these historic +DX programs: (Dave Benson, Frank Carvalho, Tim Conrardy, Jack Deckard, Chris Dodunski, Tim Garrett, +Hitaye, Stephan Ibsen, Christian Jezreel, Narfman, Godric Wilkie) TODO - Dexed ------------ * Implement a better DX look and feel (amp, pitch, algo) * Better implementation of the LPF filter * Various code cleanup +* Standalone executable TODO - msfa ----------- diff --git a/Source/DXComponents.cpp b/Source/DXComponents.cpp index 8b3c59f..7ef1e86 100644 --- a/Source/DXComponents.cpp +++ b/Source/DXComponents.cpp @@ -33,7 +33,7 @@ static const char algoArr[][13] = { { 0, 0, 1, -4, 0, 0, 0, 2, -5, 0, 3, -6, 0 }, // 4 { 0, 1, 3, 5, 0, 0, 2, 4, -6, 0, 0, 0, 0 }, // 5 { 0, 1, 3, -5, 0, 0, 2, 4, -6, 0, 0, 0, 0 }, // 6 - { 0, 1, 3, 0, 0, 0, -2, 4, 5, 0, 0, 6, 0 }, // 7 + { 0, 1, 3, 0, 0, 0, 2, 4, 5, 0, 0, -6, 0 }, // 7 { 0, 1, 3, 0, 0, 0, 2, -4, 5, 0, 0, 6, 0 }, // 8 { 0, 1, 3, 0, 0, 0, -2, 4, 5, 0, 0, 6, 0 }, // 9 { 0, 0, 4, 1, 0, 0, 5, 6, 2, 0, 0, -3, 0 }, // 10 diff --git a/Source/GlobalEditor.cpp b/Source/GlobalEditor.cpp index 05347ec..aa300e7 100644 --- a/Source/GlobalEditor.cpp +++ b/Source/GlobalEditor.cpp @@ -29,12 +29,6 @@ //============================================================================== GlobalEditor::GlobalEditor () { - addAndMakeVisible (algo = new Slider ("algo")); - algo->setRange (1, 32, 1); - algo->setSliderStyle (Slider::Rotary); - algo->setTextBoxStyle (Slider::NoTextBox, true, 80, 20); - algo->addListener (this); - addAndMakeVisible (lfoType = new ComboBox ("new combo box")); lfoType->setEditableText (false); lfoType->setJustificationType (Justification::centredLeft); @@ -84,9 +78,6 @@ GlobalEditor::GlobalEditor () reso->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); reso->addListener (this); - addAndMakeVisible (algoDisplay = new AlgoDisplay()); - algoDisplay->setName ("algoDisplay"); - addAndMakeVisible (pitchRate2 = new Slider ("pitchRate2")); pitchRate2->setRange (0, 99, 1); pitchRate2->setSliderStyle (Slider::Rotary); @@ -135,12 +126,6 @@ GlobalEditor::GlobalEditor () pitchLevel1->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); pitchLevel1->addListener (this); - addAndMakeVisible (feedback = new Slider ("feedback")); - feedback->setRange (0, 7, 1); - feedback->setSliderStyle (Slider::Rotary); - feedback->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); - feedback->addListener (this); - addAndMakeVisible (transpose = new Slider ("transpose")); transpose->setRange (0, 49, 0); transpose->setSliderStyle (Slider::LinearVertical); @@ -162,6 +147,21 @@ GlobalEditor::GlobalEditor () addAndMakeVisible (pitchEnvDisplay = new PitchEnvDisplay()); pitchEnvDisplay->setName ("pitchEnvDisplay"); + addAndMakeVisible (algoDisplay = new AlgoDisplay()); + algoDisplay->setName ("algoDisplay"); + + addAndMakeVisible (feedback = new Slider ("feedback")); + feedback->setRange (0, 7, 1); + feedback->setSliderStyle (Slider::Rotary); + feedback->setTextBoxStyle (Slider::NoTextBox, false, 80, 20); + feedback->addListener (this); + + addAndMakeVisible (algo = new Slider ("algo")); + algo->setRange (1, 32, 1); + algo->setSliderStyle (Slider::Rotary); + algo->setTextBoxStyle (Slider::NoTextBox, true, 80, 20); + algo->addListener (this); + //[UserPreSize] //[/UserPreSize] @@ -180,7 +180,6 @@ GlobalEditor::~GlobalEditor() //[Destructor_pre]. You can add your own custom destruction code here.. //[/Destructor_pre] - algo = nullptr; lfoType = nullptr; lfoSpeed = nullptr; lfoAmDepth = nullptr; @@ -188,7 +187,6 @@ GlobalEditor::~GlobalEditor() lfoDelay = nullptr; cutoff = nullptr; reso = nullptr; - algoDisplay = nullptr; pitchRate2 = nullptr; pitchRate3 = nullptr; pitchRate4 = nullptr; @@ -197,12 +195,14 @@ GlobalEditor::~GlobalEditor() pitchLevel3 = nullptr; pitchLevel4 = nullptr; pitchLevel1 = nullptr; - feedback = nullptr; transpose = nullptr; oscSync = nullptr; pitchModSens = nullptr; lfoSync = nullptr; pitchEnvDisplay = nullptr; + algoDisplay = nullptr; + feedback = nullptr; + algo = nullptr; //[Destructor]. You can add your own custom destruction code here.. @@ -232,7 +232,6 @@ void GlobalEditor::paint (Graphics& g) void GlobalEditor::resized() { - algo->setBounds (568, 32, 24, 24); lfoType->setBounds (624, 40, 96, 16); lfoSpeed->setBounds (624, 16, 96, 16); lfoAmDepth->setBounds (696, 64, 24, 24); @@ -240,7 +239,6 @@ void GlobalEditor::resized() lfoDelay->setBounds (672, 64, 24, 24); cutoff->setBounds (8, 40, 48, 48); reso->setBounds (64, 40, 48, 48); - algoDisplay->setBounds (408, 8, 152, 74); pitchRate2->setBounds (776, 64, 32, 24); pitchRate3->setBounds (800, 64, 32, 24); pitchRate4->setBounds (824, 64, 32, 24); @@ -249,27 +247,39 @@ void GlobalEditor::resized() pitchLevel3->setBounds (800, 40, 32, 24); pitchLevel4->setBounds (824, 40, 32, 24); pitchLevel1->setBounds (752, 40, 32, 24); - feedback->setBounds (568, 56, 24, 24); transpose->setBounds (728, 0, 24, 56); oscSync->setBounds (600, 64, 24, 24); pitchModSens->setBounds (728, 64, 24, 24); lfoSync->setBounds (624, 64, 24, 24); pitchEnvDisplay->setBounds (752, 8, 96, 32); + algoDisplay->setBounds (442, 8, 152, 74); + feedback->setBounds (568, 32, 24, 24); + algo->setBounds (568, 8, 24, 24); //[UserResized] Add your own custom resize handling here.. //[/UserResized] } +void GlobalEditor::comboBoxChanged (ComboBox* comboBoxThatHasChanged) +{ + //[UsercomboBoxChanged_Pre] + //[/UsercomboBoxChanged_Pre] + + if (comboBoxThatHasChanged == lfoType) + { + //[UserComboBoxCode_lfoType] -- add your combo box handling code here.. + //[/UserComboBoxCode_lfoType] + } + + //[UsercomboBoxChanged_Post] + //[/UsercomboBoxChanged_Post] +} + void GlobalEditor::sliderValueChanged (Slider* sliderThatWasMoved) { //[UsersliderValueChanged_Pre] //[/UsersliderValueChanged_Pre] - if (sliderThatWasMoved == algo) - { - //[UserSliderCode_algo] -- add your slider handling code here.. - //[/UserSliderCode_algo] - } - else if (sliderThatWasMoved == lfoSpeed) + if (sliderThatWasMoved == lfoSpeed) { //[UserSliderCode_lfoSpeed] -- add your slider handling code here.. //[/UserSliderCode_lfoSpeed] @@ -347,11 +357,6 @@ void GlobalEditor::sliderValueChanged (Slider* sliderThatWasMoved) pitchEnvDisplay->repaint(); //[/UserSliderCode_pitchLevel1] } - else if (sliderThatWasMoved == feedback) - { - //[UserSliderCode_feedback] -- add your slider handling code here.. - //[/UserSliderCode_feedback] - } else if (sliderThatWasMoved == transpose) { //[UserSliderCode_transpose] -- add your slider handling code here.. @@ -362,24 +367,19 @@ void GlobalEditor::sliderValueChanged (Slider* sliderThatWasMoved) //[UserSliderCode_pitchModSens] -- add your slider handling code here.. //[/UserSliderCode_pitchModSens] } - - //[UsersliderValueChanged_Post] - //[/UsersliderValueChanged_Post] -} - -void GlobalEditor::comboBoxChanged (ComboBox* comboBoxThatHasChanged) -{ - //[UsercomboBoxChanged_Pre] - //[/UsercomboBoxChanged_Pre] - - if (comboBoxThatHasChanged == lfoType) + else if (sliderThatWasMoved == feedback) { - //[UserComboBoxCode_lfoType] -- add your combo box handling code here.. - //[/UserComboBoxCode_lfoType] + //[UserSliderCode_feedback] -- add your slider handling code here.. + //[/UserSliderCode_feedback] + } + else if (sliderThatWasMoved == algo) + { + //[UserSliderCode_algo] -- add your slider handling code here.. + //[/UserSliderCode_algo] } - //[UsercomboBoxChanged_Post] - //[/UsercomboBoxChanged_Post] + //[UsersliderValueChanged_Post] + //[/UsersliderValueChanged_Post] } @@ -447,10 +447,6 @@ BEGIN_JUCER_METADATA snapPixels="8" snapActive="1" snapShown="1" overlayOpacity="0.330" fixedSize="1" initialWidth="855" initialHeight="90"> - - - + + + END_JUCER_METADATA diff --git a/Source/GlobalEditor.h b/Source/GlobalEditor.h index 9689fc5..120df20 100644 --- a/Source/GlobalEditor.h +++ b/Source/GlobalEditor.h @@ -37,8 +37,8 @@ //[/Comments] */ class GlobalEditor : public Component, - public SliderListener, - public ComboBoxListener + public ComboBoxListener, + public SliderListener { public: //============================================================================== @@ -58,8 +58,8 @@ public: void paint (Graphics& g); void resized(); - void sliderValueChanged (Slider* sliderThatWasMoved); void comboBoxChanged (ComboBox* comboBoxThatHasChanged); + void sliderValueChanged (Slider* sliderThatWasMoved); @@ -69,7 +69,6 @@ private: //[/UserVariables] //============================================================================== - ScopedPointer algo; ScopedPointer lfoType; ScopedPointer lfoSpeed; ScopedPointer lfoAmDepth; @@ -77,7 +76,6 @@ private: ScopedPointer lfoDelay; ScopedPointer cutoff; ScopedPointer reso; - ScopedPointer algoDisplay; ScopedPointer pitchRate2; ScopedPointer pitchRate3; ScopedPointer pitchRate4; @@ -86,12 +84,14 @@ private: ScopedPointer pitchLevel3; ScopedPointer pitchLevel4; ScopedPointer pitchLevel1; - ScopedPointer feedback; ScopedPointer transpose; ScopedPointer oscSync; ScopedPointer pitchModSens; ScopedPointer lfoSync; ScopedPointer pitchEnvDisplay; + ScopedPointer algoDisplay; + ScopedPointer feedback; + ScopedPointer algo; //============================================================================== diff --git a/Source/PluginData.cpp b/Source/PluginData.cpp old mode 100644 new mode 100755 index 83423b2..8f29376 --- a/Source/PluginData.cpp +++ b/Source/PluginData.cpp @@ -32,7 +32,6 @@ uint8_t sysexChecksum(const char *sysex) { return ((1 << 8) - sum); } - void extractProgramNames(const char *block, StringArray &dest) { char programName[11]; @@ -66,35 +65,65 @@ void extractProgramNames(const char *block, StringArray &dest) { } } -int DexedAudioProcessor::importSysex(const char *imported) { - memcpy(sysex, imported + 6, 4096); - - uint8_t checksum = sysexChecksum(sysex); - extractProgramNames(sysex, programNames); - - if ( checksum != imported[4102] ) { - TRACE("sysex import checksum doesnt match"); - return 1; - } - - return 0; -} - -void DexedAudioProcessor::exportSysex(char *dest) { +void exportSysex(char *dest, char *src) { uint8_t header[] = { 0xF0, 0x43, 0x00, 0x09, 0x20, 0x00 }; memcpy(dest, header, 6); // copy 32 voices - memcpy(dest+6, sysex, 4096); + memcpy(dest+6, src, 4096); // make checksum for dump - uint8_t footer[] = { sysexChecksum(sysex), 0xF7 }; + uint8_t footer[] = { sysexChecksum(src), 0xF7 }; memcpy(dest+4102, footer, 2); } /** - * This function normalize data that comes from corrupted sysex data. + * Pack a program into a 32 packed sysex + */ +void packProgram(uint8_t *dest, uint8_t *src, int idx, String name) { + uint8_t *bulk = dest + (idx * 128); + + for(int op = 0; op < 6; op++) { + // eg rate and level, brk pt, depth, scaling + memcpy(bulk + op * 17, src + op * 21, 11); + int pp = op*17; + int up = op*21; + + // left curves + bulk[pp+11] = (src[up+11]&0x03) | ((src[up+12]&0x03) << 2); + bulk[pp+12] = (src[up+13]&0x07) | ((src[up+20]&0x0f) << 3); + // kvs_ams + bulk[pp+13] = (src[up+14]&0x03) | ((src[up+15]&0x07) << 2); + // output lvl + bulk[pp+14] = src[up+16]; + // fcoarse_mode + bulk[pp+15] = (src[up+17]&0x01) | ((src[up+18]&0x1f) << 1); + // fine freq + bulk[pp+16] = src[up+19]; + } + memcpy(bulk + 102, src + 126, 9); // pitch env, algo + bulk[111] = (src[135]&0x07) | ((src[136]&0x01) << 3); + memcpy(bulk + 112, src + 137, 4); // lfo + bulk[116] = (src[141]&0x01) | (((src[142]&0x07) << 1) | ((src[143]&0x07) << 4)); + bulk[117] = src[144]; + int eos = 0; + for(int i=0; i < 10; i++) { + char c = name[i]; + if ( c == 0 ) + eos = 1; + if ( eos ) { + bulk[117+i] = ' '; + continue; + } + c = c < 32 ? ' ' : c; + c = c > 127 ? ' ' : c; + bulk[117+i] = c; + } +} + +/** + * This function normalize data that comes from corrupted sysex. * It used to avoid engine crashing upon extrem values */ char normparm(char value, char max) { @@ -112,6 +141,11 @@ void DexedAudioProcessor::unpackProgram(int idx) { for (int op = 0; op < 6; op++) { // eg rate and level, brk pt, depth, scaling + + for(int i=0; i<11; i++) { + data[op * 21 + i] = normparm(bulk[op * 17 + i], 99); + } + memcpy(data + op * 21, bulk + op * 17, 11); char leftrightcurves = bulk[op * 17 + 11]; data[op * 21 + 11] = leftrightcurves & 3; @@ -128,7 +162,12 @@ void DexedAudioProcessor::unpackProgram(int idx) { data[op * 21 + 19] = bulk[op * 17 + 16]; // fine freq data[op * 21 + 20] = detune_rs >> 3; } - memcpy(data + 126, bulk + 102, 9); // pitch env, algo + + for (int i=0; i<8; i++) { + data[126+i] = normparm(bulk[102+i], 99); + } + data[134] = normparm(bulk[110], 31); + char oks_fb = bulk[111]; data[135] = oks_fb & 7; data[136] = oks_fb >> 3; @@ -146,69 +185,29 @@ void DexedAudioProcessor::unpackProgram(int idx) { data[160] = 1; } -void DexedAudioProcessor::packProgram(int idx, const char *name) { - char *bulk = sysex + (idx * 128); +int DexedAudioProcessor::importSysex(const char *imported) { + memcpy(sysex, imported + 6, 4096); - for(int op = 0; op < 6; op++) { - // eg rate and level, brk pt, depth, scaling - memcpy(bulk + op * 17, data + op * 21, 11); - int pp = op*17; - int up = op*21; - - // left curves - bulk[pp+11] = (data[up+11]&0x03) | ((data[up+12]&0x03) << 2); - bulk[pp+12] = (data[up+13]&0x07) | ((data[up+20]&0x0f) << 3); - // kvs_ams - bulk[pp+13] = (data[up+14]&0x03) | ((data[up+15]&0x07) << 2); - // output lvl - bulk[pp+14] = data[up+16]; - // fcoarse_mode - bulk[pp+15] = (data[up+17]&0x01) | ((data[up+18]&0x1f) << 1); - // fine freq - bulk[pp+16] = data[up+19]; - } - memcpy(bulk + 102, data + 126, 9); // pitch env, algo - bulk[111] = (data[135]&0x07) | ((data[136]&0x01) << 3); - memcpy(bulk + 112, data + 137, 4); // lfo - bulk[116] = (data[141]&0x01) | (((data[142]&0x07) << 1) | ((data[143]&0x07) << 4)); - bulk[117] = data[144]; - int eos = 0; - for(int i=0; i < 10; i++) { - char c = name[i]; - if ( c == 0 ) - eos = 1; - if ( eos ) { - bulk[117+i] = ' '; - continue; - } - c = c < 32 ? ' ' : c; - c = c > 127 ? ' ' : c; - bulk[117+i] = c; + uint8_t checksum = sysexChecksum(((char *) &sysex)); + extractProgramNames(sysex, programNames); + + if ( checksum != imported[4102] ) { + TRACE("sysex import checksum doesnt match"); + return 1; } - char programName[11]; - memcpy(programName, bulk+117, 10); - programName[10] = 0; - programNames.set(idx, String(programName)); + return 0; } + void DexedAudioProcessor::updateProgramFromSysex(const uint8 *rawdata) { memcpy(data, rawdata, 160); triggerAsyncUpdate(); } void DexedAudioProcessor::loadBuiltin(int idx) { - InputStream *is = builtin_pgm->createStreamForEntry(idx); - - if ( is == NULL ) { - TRACE("ENTRY IN ZIP NOT FOUND"); - return; - } - - uint8_t syx_data[4104]; - is->read(&syx_data, 4104); - delete is; - + char syx_data[4104]; + cartManager.getSysex(idx, (char *) &syx_data); importSysex((char *) &syx_data); } @@ -234,7 +233,7 @@ void DexedAudioProcessor::getStateInformation(MemoryBlock& destData) { state.version = CURRENT_PLUGINSTATE_VERSION; - exportSysex((char *)(&state.sysex)); + exportSysex((char *)(&state.sysex), (char *) sysex); memcpy(state.program, data, 161); state.cutoff = fx.uiCutoff; state.reso = fx.uiReso; @@ -291,3 +290,27 @@ void DexedAudioProcessor::setStateInformation(const void* source, int sizeInByte memcpy((void *) data, source, sizeInBytes); updateUI(); }*/ + + +CartridgeManager::CartridgeManager() { + MemoryInputStream *mis = new MemoryInputStream(BinaryData::builtin_pgm_zip, BinaryData::builtin_pgm_zipSize, false); + builtin_pgm = new ZipFile(mis, true); + builtin_pgm->sortEntriesByFilename(); + + for(int i=0;igetNumEntries();i++) { + const ZipFile::ZipEntry *e = builtin_pgm->getEntry(i); + cartNames.add(e->filename.dropLastCharacters(4)); + } +} + +void CartridgeManager::getSysex(int idx, char *dest) { + InputStream *is = builtin_pgm->createStreamForEntry(idx); + + if ( is == NULL ) { + TRACE("ENTRY IN ZIP NOT FOUND"); + return; + } + + is->read(dest, 4104); + delete is; +} diff --git a/Source/PluginData.h b/Source/PluginData.h old mode 100644 new mode 100755 index cdda13e..e3e80a6 --- a/Source/PluginData.h +++ b/Source/PluginData.h @@ -22,6 +22,52 @@ #define PLUGINDATA_H_INCLUDED #include "../JuceLibraryCode/JuceHeader.h" +#define SYSEX_SIZE 4104 +enum UpackedOffset { + egRate, + egLevel = 4, + breakpoint = 8, + lScaleDepth, + rScaleDepth, + lKeyScale, + rKeyScale, + rateScaling, + keyVelocity, + outputLevel, + mode, + fCoarse, + fFine, + oscDetune, + + // Global values + pitchEgRate = 126, + pitchEgLevel = 130, + algorythm = 134, + feedback, + oscKeySync, + lfoSpeed, + lfoDelay, + lfoPmDepth, + lfoAmDepth, + lfoKeySync, + lfoWave, + middleC, + pModeSens +}; + +void extractProgramNames(const char *block, StringArray &dest); +void exportSysex(char *dest, char *src); +void packProgram(uint8_t *dest, uint8_t *src, int idx, String name); + +class CartridgeManager { + ScopedPointer builtin_pgm; +public: + StringArray cartNames; + + CartridgeManager(); + void getSysex(int idx, char *data); +}; + #endif // PLUGINDATA_H_INCLUDED diff --git a/Source/PluginEditor.cpp b/Source/PluginEditor.cpp index 20614f3..e09e71f 100755 --- a/Source/PluginEditor.cpp +++ b/Source/PluginEditor.cpp @@ -31,40 +31,43 @@ DexedAudioProcessorEditor::DexedAudioProcessorEditor (DexedAudioProcessor* owner : AudioProcessorEditor (ownerFilter), midiKeyboard (ownerFilter->keyboardState, MidiKeyboardComponent::horizontalKeyboard) { - LookAndFeel::setDefaultLookAndFeel(&dx_lnf); setSize (865, 420); processor = ownerFilter; - - addAndMakeVisible (cartButton = new TextButton("CART")); - cartButton->setButtonText ("CART"); - cartButton->addListener (this); - cartButton->setBounds(5, 5, 50, 18); + + addAndMakeVisible(&cartridges); + cartridges.setEditableText(false); + cartridges.setJustificationType(Justification::centredLeft); + cartridges.setTextWhenNothingSelected(String::empty); + cartridges.setBounds(5, 5, 160, 18); + cartridges.addItemList(processor->cartManager.cartNames, 1); + cartridges.setSelectedItemIndex(0); + cartridges.addListener(this); addAndMakeVisible (loadButton = new TextButton("LOAD")); loadButton->setButtonText ("LOAD"); loadButton->addListener (this); - loadButton->setBounds(57, 5, 50, 18); + loadButton->setBounds(169, 5, 50, 18); addAndMakeVisible(saveButton = new TextButton("SAVE")); saveButton->setButtonText ("SAVE"); saveButton->addListener (this); - saveButton->setBounds (109, 5, 50, 18); + saveButton->setBounds (222, 5, 50, 18); - addAndMakeVisible (&presets); - presets.setEditableText (false); - presets.setJustificationType (Justification::centredLeft); - presets.setTextWhenNothingSelected (String::empty); - presets.setBounds(163, 5, 180, 18); - rebuildPresetCombobox(); - presets.addListener(this); + addAndMakeVisible (&programs); + programs.setEditableText (false); + programs.setJustificationType (Justification::centredLeft); + programs.setTextWhenNothingSelected (String::empty); + programs.setBounds(276, 5, 160, 18); + rebuildProgramCombobox(); + programs.addListener(this); addAndMakeVisible(storeButton = new TextButton("STORE")); storeButton->setButtonText ("STORE"); storeButton->addListener (this); - storeButton->setBounds (347, 5, 50, 18); + storeButton->setBounds (439, 5, 50, 18); addAndMakeVisible(aboutButton = new TextButton("ABOUT")); aboutButton->setButtonText ("ABOUT"); @@ -147,8 +150,8 @@ void DexedAudioProcessorEditor::buttonClicked(Button *buttonThatWasClicked) { fp_in.close(); processor->importSysex((char *) &syx_data); processor->setCurrentProgram(0); - rebuildPresetCombobox(); - presets.setSelectedId(processor->getCurrentProgram()+1, NotificationType::dontSendNotification); + rebuildProgramCombobox(); + programs.setSelectedId(processor->getCurrentProgram()+1, NotificationType::dontSendNotification); processor->updateHostDisplay(); } @@ -159,9 +162,9 @@ void DexedAudioProcessorEditor::buttonClicked(Button *buttonThatWasClicked) { FileChooser fc ("Export DX sysex...", File::nonexistent, "*.syx", 1); if ( fc.browseForFileToSave(true) ) { String f = fc.getResults().getReference(0).getFullPathName(); - uint8_t syx_data[4104]; + char syx_data[4104]; - processor->exportSysex((char *) syx_data); + exportSysex((char *) syx_data, (char *) &processor->sysex); ofstream fp_out(f.toRawUTF8(), ios::binary); fp_out.write((char *)syx_data, 4104); @@ -178,59 +181,21 @@ void DexedAudioProcessorEditor::buttonClicked(Button *buttonThatWasClicked) { } if (buttonThatWasClicked == storeButton) { - AlertWindow dialog(String("Store Program"), "", AlertWindow::NoIcon, this); - dialog.addTextEditor(String("Name"), processor->getProgramName(processor->getCurrentProgram()), String("Name"), false); - - StringArray programs; - - for(int i=0;i<32;i++) { - programs.add(presets.getItemText(i)); - } - - dialog.addComboBox(String("Dest"), programs); - dialog.addButton("OK", 0, KeyPress(KeyPress::returnKey)); - dialog.addButton("Cancel", 1, KeyPress(KeyPress::escapeKey)); - if ( dialog.runModalLoop() == 0 ) { - TextEditor *name = dialog.getTextEditor(String("Name")); - ComboBox *dest = dialog.getComboBoxComponent(String("Dest")); - - int programNum = dest->getSelectedItemIndex(); - const char *programName = name->getText().toRawUTF8(); - - processor->packProgram(programNum, programName); - - rebuildPresetCombobox(); - - processor->setCurrentProgram(programNum); - processor->updateHostDisplay(); - } + storeProgram(); return; } - +/* if (buttonThatWasClicked == cartButton) { - StringArray cart; - - for(int i=0;ibuiltin_pgm->getNumEntries();i++) { - const ZipFile::ZipEntry *e = processor->builtin_pgm->getEntry(i); - cart.add(e->filename.dropLastCharacters(4)); - } - AlertWindow dialog(String("Builtin cartridges"), "", AlertWindow::NoIcon, this); - dialog.addComboBox(String("cart"), cart); + dialog.addComboBox(String("cart"), processor->cartManager.cartNames); dialog.addButton("OK", 0, KeyPress(KeyPress::returnKey)); dialog.addButton("Cancel", 1, KeyPress(KeyPress::escapeKey)); if ( dialog.runModalLoop() == 0 ) { - ComboBox *select = dialog.getComboBoxComponent(String("cart")); - int idx = select->getSelectedItemIndex(); - processor->loadBuiltin(idx); - processor->setCurrentProgram(0); - rebuildPresetCombobox(); - presets.setSelectedId(processor->getCurrentProgram()+1, NotificationType::dontSendNotification); - processor->updateHostDisplay(); + } return; } - + */ if (buttonThatWasClicked == aboutButton) { AlertWindow::showMessageBoxAsync(AlertWindow::NoIcon, "DEXED - DX Emulator 0.3", "https://github.com/asb2m10/dexed\n" "(c) 2013-2014 Pascal Gauthier\nUnder the GPL v2\n\n" @@ -242,19 +207,22 @@ void DexedAudioProcessorEditor::buttonClicked(Button *buttonThatWasClicked) { } void DexedAudioProcessorEditor::comboBoxChanged (ComboBox* comboBoxThatHasChanged) { - processor->setCurrentProgram(comboBoxThatHasChanged->getSelectedId()-1); - processor->updateHostDisplay(); + if ( comboBoxThatHasChanged == &programs ) { + processor->setCurrentProgram(programs.getSelectedId()-1); + processor->updateHostDisplay(); + } else { + int idx = comboBoxThatHasChanged->getSelectedItemIndex(); + processor->loadBuiltin(idx); + processor->setCurrentProgram(0); + rebuildProgramCombobox(); + programs.setSelectedId(processor->getCurrentProgram()+1, NotificationType::dontSendNotification); + processor->updateHostDisplay(); + } } void DexedAudioProcessorEditor::timerCallback() { int32_t env[6]; - if ( processor->refreshUI ) { - if ( processor->refreshUI & DexedAudioProcessor::REFRESH_MSG ) - global.repaint(); - processor->refreshUI = 0; - } - if ( processor->peekEnvStatus(env) == false ) return; @@ -272,18 +240,96 @@ void DexedAudioProcessorEditor::updateUI() { } int id = processor->getCurrentProgram() + 1; - presets.setSelectedId(id, NotificationType::dontSendNotification); + programs.setSelectedId(id, NotificationType::dontSendNotification); global.updateDisplay(); } -void DexedAudioProcessorEditor::rebuildPresetCombobox() { - presets.clear(NotificationType::dontSendNotification); +void DexedAudioProcessorEditor::rebuildProgramCombobox() { + programs.clear(NotificationType::dontSendNotification); for(int i=0;igetNumPrograms();i++) { String id; id << (i+1) << ". " << processor->getProgramName(i); - presets.addItem(id, i+1); + programs.addItem(id, i+1); } - presets.setSelectedId(processor->getCurrentProgram()+1, NotificationType::dontSendNotification); + programs.setSelectedId(processor->getCurrentProgram()+1, NotificationType::dontSendNotification); } +void DexedAudioProcessorEditor::storeProgram() { + String currentName(processor->getProgramName(processor->getCurrentProgram())); + char destSysex[4096]; + File *externalFile = NULL; + + memcpy(&destSysex, processor->sysex, 4096); + + while (true) { + String msg; + if ( externalFile == NULL ) { + msg = "Store program to current cartridge"; + } else { + msg = "Store program to " + externalFile->getFileName(); + } + + AlertWindow dialog(String("Store Program"), msg, AlertWindow::NoIcon, this); + dialog.addTextEditor(String("Name"), currentName, String("Name"), false); + // TODO: fix the name length to 10 + + StringArray programs; + extractProgramNames((char *) &destSysex, programs); + + dialog.addComboBox(String("Dest"), programs); + dialog.addButton("OK", 0, KeyPress(KeyPress::returnKey)); + dialog.addButton("Cancel", 1, KeyPress(KeyPress::escapeKey)); + dialog.addButton("External File", 2, KeyPress()); + int response = dialog.runModalLoop(); + + if ( response == 2 ) { + FileChooser fc("Destination Sysex", File::nonexistent, "*.syx;*.SYX;*.*", 1); + + if ( fc.browseForFileToOpen() ) { + if ( externalFile != NULL ) + delete externalFile; + + MemoryBlock block; + externalFile = new File(fc.getResults().getReference(0)); + if ( externalFile->loadFileAsData(block) ) { + block.copyTo(destSysex, 6, 4096); + continue; + } + AlertWindow::showMessageBoxAsync(AlertWindow::WarningIcon, "Read error", "Unable to read file"); + } + } + + if ( response == 0 ) { + TextEditor *name = dialog.getTextEditor(String("Name")); + ComboBox *dest = dialog.getComboBoxComponent(String("Dest")); + + int programNum = dest->getSelectedItemIndex(); + String programName = name->getText(); + if ( programName.length() > 10 ) { + int toStrip = programName.length() - 10; + programName.dropLastCharacters(toStrip); + } + + if ( externalFile == NULL ) { + packProgram((uint8_t *) processor->sysex, (uint8_t *) processor->data, programNum, programName); + processor->programNames.set(programNum, programName); + rebuildProgramCombobox(); + processor->setCurrentProgram(programNum); + processor->updateHostDisplay(); + } else { + packProgram((uint8_t *) &destSysex, (uint8_t *) processor->data, programNum, programName); + char sysexFile[4104]; + exportSysex((char *) &sysexFile, (char *) &destSysex); + if ( ! externalFile->replaceWithData(sysexFile, 4104) ) { + AlertWindow::showMessageBoxAsync(AlertWindow::WarningIcon, "Write error", "Unable to write file"); + } + } + } + + break; + } + + if ( externalFile != NULL ) + delete externalFile; +} diff --git a/Source/PluginEditor.h b/Source/PluginEditor.h index ff0d774..8aa5c4e 100755 --- a/Source/PluginEditor.h +++ b/Source/PluginEditor.h @@ -35,15 +35,19 @@ class DexedAudioProcessorEditor : public AudioProcessorEditor, public ComboBoxListener, public Timer { DexedAudioProcessor *processor; - ComboBox presets; + ComboBox programs; + ComboBox cartridges; + MidiKeyboardComponent midiKeyboard; DXLookNFeel dx_lnf; - - ScopedPointer cartButton; + ScopedPointer loadButton; ScopedPointer saveButton; ScopedPointer storeButton; ScopedPointer aboutButton; + ScopedPointer settings; + + void storeProgram(); public: @@ -57,11 +61,12 @@ public: void paint (Graphics& g); void buttonClicked (Button* buttonThatWasClicked); void comboBoxChanged (ComboBox* comboBoxThatHasChanged); + OperatorEditor operators[6]; GlobalEditor global; void updateUI(); - void rebuildPresetCombobox(); + void rebuildProgramCombobox(); }; diff --git a/Source/PluginFx.cpp b/Source/PluginFx.cpp old mode 100644 new mode 100755 diff --git a/Source/PluginFx.h b/Source/PluginFx.h old mode 100644 new mode 100755 diff --git a/Source/PluginParam.cpp b/Source/PluginParam.cpp index 2e8b370..65b60a8 100755 --- a/Source/PluginParam.cpp +++ b/Source/PluginParam.cpp @@ -205,12 +205,7 @@ void CtrlDX::updateComponent() { * */ void DexedAudioProcessor::initCtrl() { - MemoryInputStream *mis = new MemoryInputStream(BinaryData::builtin_pgm_zip, BinaryData::builtin_pgm_zipSize, false); - builtin_pgm = new ZipFile(mis, true); - builtin_pgm->sortEntriesByFilename(); - loadBuiltin(0); - currentProgram = 0; fxCutoff = new CtrlFloat("Cutoff", &fx.uiCutoff); diff --git a/Source/PluginProcessor.h b/Source/PluginProcessor.h index 2e6b00a..eea87c7 100755 --- a/Source/PluginProcessor.h +++ b/Source/PluginProcessor.h @@ -28,6 +28,7 @@ #include "msfa/lfo.h" #include "msfa/synth.h" #include "PluginParam.h" +#include "PluginData.h" #include "PluginFx.h" struct ProcessorVoice { @@ -61,8 +62,6 @@ class DexedAudioProcessor : public AudioProcessor, public AsyncUpdater SInt16 *workBlock; int workBlockSize; int currentProgram; - char sysex[4096]; - StringArray programNames; /** * The last time the state was save, to be able to bypass a VST host bug. @@ -99,12 +98,12 @@ class DexedAudioProcessor : public AudioProcessor, public AsyncUpdater void initCtrl(); public : - static const int REFRESH_MSG = 1; - int refreshUI; - + StringArray programNames; + char sysex[4096]; char data[161]; - ScopedPointer builtin_pgm; + CartridgeManager cartManager; + Array ctrl; OperatorCtrl opCtrl[6]; @@ -126,7 +125,6 @@ public : ScopedPointer fxReso; int importSysex(const char *imported); - void exportSysex(char *dest); void setDxValue(int offset, int v); //==============================================================================