| @@ -37,7 +37,7 @@ ifeq ($(CONFIG),Debug) | |||
| JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) | |||
| JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 | |||
| JUCE_TARGET_APP := MPETest | |||
| JUCE_TARGET_APP := MPEDemo | |||
| JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 $(CFLAGS) | |||
| JUCE_CXXFLAGS += $(JUCE_CFLAGS) -std=c++14 $(CXXFLAGS) | |||
| @@ -58,7 +58,7 @@ ifeq ($(CONFIG),Release) | |||
| JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) | |||
| JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 | |||
| JUCE_TARGET_APP := MPETest | |||
| JUCE_TARGET_APP := MPEDemo | |||
| JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3 $(CFLAGS) | |||
| JUCE_CXXFLAGS += $(JUCE_CFLAGS) -std=c++14 $(CXXFLAGS) | |||
| @@ -89,7 +89,7 @@ OBJECTS_APP := \ | |||
| all : $(JUCE_OUTDIR)/$(JUCE_TARGET_APP) | |||
| $(JUCE_OUTDIR)/$(JUCE_TARGET_APP) : check-pkg-config $(OBJECTS_APP) $(RESOURCES) | |||
| @echo Linking "MPETest - App" | |||
| @echo Linking "MPEDemo - App" | |||
| -$(V_AT)mkdir -p $(JUCE_BINDIR) | |||
| -$(V_AT)mkdir -p $(JUCE_LIBDIR) | |||
| -$(V_AT)mkdir -p $(JUCE_OUTDIR) | |||
| @@ -175,11 +175,11 @@ check-pkg-config: | |||
| @pkg-config --print-errors alsa freetype2 libcurl x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0 | |||
| clean: | |||
| @echo Cleaning MPETest | |||
| @echo Cleaning MPEDemo | |||
| $(V_AT)$(CLEANCMD) | |||
| strip: | |||
| @echo Stripping MPETest | |||
| @echo Stripping MPEDemo | |||
| -$(V_AT)$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET) | |||
| -include $(OBJECTS_APP:%.o=%.d) | |||
| @@ -10,9 +10,9 @@ | |||
| <key>CFBundleIdentifier</key> | |||
| <string>com.roli.MPETest</string> | |||
| <key>CFBundleName</key> | |||
| <string>MPETest</string> | |||
| <string>MPEDemo</string> | |||
| <key>CFBundleDisplayName</key> | |||
| <string>MPETest</string> | |||
| <string>MPEDemo</string> | |||
| <key>CFBundlePackageType</key> | |||
| <string>APPL</string> | |||
| <key>CFBundleSignature</key> | |||
| @@ -75,7 +75,7 @@ | |||
| B238642BCD1B9A2C199F4DBF = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_devices"; path = "../../../../modules/juce_audio_devices"; sourceTree = "SOURCE_ROOT"; }; | |||
| B28DF2C453E72E37695C06FE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_processors.mm"; path = "../../JuceLibraryCode/include_juce_audio_processors.mm"; sourceTree = "SOURCE_ROOT"; }; | |||
| B9D41F779C018E18CEDD66B8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_core.mm"; path = "../../JuceLibraryCode/include_juce_core.mm"; sourceTree = "SOURCE_ROOT"; }; | |||
| BCC50B48B1A4B967949B2DB2 = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MPETest.app; sourceTree = "BUILT_PRODUCTS_DIR"; }; | |||
| BCC50B48B1A4B967949B2DB2 = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MPEDemo.app; sourceTree = "BUILT_PRODUCTS_DIR"; }; | |||
| BDEC3EEA7DFFC78C00075A2A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_devices.mm"; path = "../../JuceLibraryCode/include_juce_audio_devices.mm"; sourceTree = "SOURCE_ROOT"; }; | |||
| C64527E74752ECF0B056A9F5 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; | |||
| CCC23D1BCFBE5FFC700F8608 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; | |||
| @@ -100,7 +100,7 @@ | |||
| 8A339D25116C57AC5F0FFBCD, | |||
| AB1DE39BFBA22179B919703B, ); name = Source; sourceTree = "<group>"; }; | |||
| C69BCE512948465235B05858 = {isa = PBXGroup; children = ( | |||
| 47DF0B5F0B14AE411808F7CE, ); name = MPETest; sourceTree = "<group>"; }; | |||
| 47DF0B5F0B14AE411808F7CE, ); name = MPEDemo; sourceTree = "<group>"; }; | |||
| 38592324982B511EF7CF4FE1 = {isa = PBXGroup; children = ( | |||
| 947FE6943BE8210665728E5A, | |||
| B238642BCD1B9A2C199F4DBF, | |||
| @@ -259,7 +259,7 @@ | |||
| GCC_WARN_UNUSED_FUNCTION = YES; | |||
| GCC_WARN_UNUSED_VARIABLE = YES; | |||
| ONLY_ACTIVE_ARCH = YES; | |||
| PRODUCT_NAME = "MPETest"; | |||
| PRODUCT_NAME = "MPEDemo"; | |||
| WARNING_CFLAGS = -Wreorder; | |||
| ZERO_LINK = NO; }; name = Debug; }; | |||
| 40FE0A8C9EA53BF7A25086B3 = {isa = XCBuildConfiguration; buildSettings = { | |||
| @@ -295,7 +295,7 @@ | |||
| GCC_WARN_UNINITIALIZED_AUTOS = YES; | |||
| GCC_WARN_UNUSED_FUNCTION = YES; | |||
| GCC_WARN_UNUSED_VARIABLE = YES; | |||
| PRODUCT_NAME = "MPETest"; | |||
| PRODUCT_NAME = "MPEDemo"; | |||
| WARNING_CFLAGS = -Wreorder; | |||
| ZERO_LINK = NO; }; name = Release; }; | |||
| 33F09A62C3878F91E38BA7B3 = {isa = PBXTargetDependency; target = 0DF05A38ED8E8BF6EB7D9C5C; }; | |||
| @@ -341,7 +341,7 @@ | |||
| 0DF05A38ED8E8BF6EB7D9C5C = {isa = PBXNativeTarget; buildConfigurationList = 20A88B838659B5B766A08F56; buildPhases = ( | |||
| 518008B4BCAC2EDE2921458A, | |||
| EF758DF42F97B8D22FD35F80, | |||
| AF94D754542EEF998EE0EF72, ); buildRules = ( ); dependencies = ( ); name = "MPETest - App"; productName = MPETest; productReference = BCC50B48B1A4B967949B2DB2; productType = "com.apple.product-type.application"; }; | |||
| AF94D754542EEF998EE0EF72, ); buildRules = ( ); dependencies = ( ); name = "MPEDemo - App"; productName = MPEDemo; productReference = BCC50B48B1A4B967949B2DB2; productType = "com.apple.product-type.application"; }; | |||
| 9606743A47FFF871B775B1AB = {isa = PBXProject; buildConfigurationList = CC7502C8943D2FC599DFC557; attributes = { LastUpgradeCheck = 0830; ORGANIZATIONNAME = "ROLI Ltd."; TargetAttributes = { 0DF05A38ED8E8BF6EB7D9C5C = { SystemCapabilities = {com.apple.ApplicationGroups.iOS = { enabled = 0; }; com.apple.InAppPurchase = { enabled = 0; }; com.apple.InterAppAudio = { enabled = 0; }; com.apple.Push = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; }; }; }; compatibilityVersion = "Xcode 3.2"; hasScannedForEncodings = 0; mainGroup = 9F958921F12E7C784E909D34; projectDirPath = ""; projectRoot = ""; targets = (0DF05A38ED8E8BF6EB7D9C5C); }; | |||
| }; | |||
| rootObject = 9606743A47FFF871B775B1AB; | |||
| @@ -1,7 +1,7 @@ | |||
| Microsoft Visual Studio Solution File, Format Version 11.00 | |||
| # Visual Studio 2015 | |||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MPETest - App", "MPETest_App.vcxproj", "{D4B09FE5-F7C6-3530-7AA4-725B57317169}" | |||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MPEDemo - App", "MPEDemo_App.vcxproj", "{D4B09FE5-F7C6-3530-7AA4-725B57317169}" | |||
| EndProject | |||
| Global | |||
| GlobalSection(SolutionConfigurationPlatforms) = preSolution | |||
| @@ -51,11 +51,11 @@ | |||
| <TargetExt>.exe</TargetExt> | |||
| <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\App\</OutDir> | |||
| <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)\$(Configuration)\App\</IntDir> | |||
| <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">MPETest</TargetName> | |||
| <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">MPEDemo</TargetName> | |||
| <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</GenerateManifest> | |||
| <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\App\</OutDir> | |||
| <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)\$(Configuration)\App\</IntDir> | |||
| <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MPETest</TargetName> | |||
| <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MPEDemo</TargetName> | |||
| <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</GenerateManifest> | |||
| <PlatformToolset>v140</PlatformToolset> | |||
| <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> | |||
| @@ -88,18 +88,18 @@ | |||
| <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> | |||
| </ResourceCompile> | |||
| <Link> | |||
| <OutputFile>$(OutDir)\MPETest.exe</OutputFile> | |||
| <OutputFile>$(OutDir)\MPEDemo.exe</OutputFile> | |||
| <SuppressStartupBanner>true</SuppressStartupBanner> | |||
| <IgnoreSpecificDefaultLibraries>libcmt.lib; msvcrt.lib;;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries> | |||
| <GenerateDebugInformation>true</GenerateDebugInformation> | |||
| <ProgramDatabaseFile>$(IntDir)\MPETest.pdb</ProgramDatabaseFile> | |||
| <ProgramDatabaseFile>$(IntDir)\MPEDemo.pdb</ProgramDatabaseFile> | |||
| <SubSystem>Windows</SubSystem> | |||
| <TargetMachine>MachineX86</TargetMachine> | |||
| <LargeAddressAware>true</LargeAddressAware> | |||
| </Link> | |||
| <Bscmake> | |||
| <SuppressStartupBanner>true</SuppressStartupBanner> | |||
| <OutputFile>$(IntDir)\MPETest.bsc</OutputFile> | |||
| <OutputFile>$(IntDir)\MPEDemo.bsc</OutputFile> | |||
| </Bscmake> | |||
| <Lib/> | |||
| </ItemDefinitionGroup> | |||
| @@ -130,11 +130,11 @@ | |||
| <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> | |||
| </ResourceCompile> | |||
| <Link> | |||
| <OutputFile>$(OutDir)\MPETest.exe</OutputFile> | |||
| <OutputFile>$(OutDir)\MPEDemo.exe</OutputFile> | |||
| <SuppressStartupBanner>true</SuppressStartupBanner> | |||
| <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries> | |||
| <GenerateDebugInformation>false</GenerateDebugInformation> | |||
| <ProgramDatabaseFile>$(IntDir)\MPETest.pdb</ProgramDatabaseFile> | |||
| <ProgramDatabaseFile>$(IntDir)\MPEDemo.pdb</ProgramDatabaseFile> | |||
| <SubSystem>Windows</SubSystem> | |||
| <TargetMachine>MachineX86</TargetMachine> | |||
| <OptimizeReferences>true</OptimizeReferences> | |||
| @@ -143,7 +143,7 @@ | |||
| </Link> | |||
| <Bscmake> | |||
| <SuppressStartupBanner>true</SuppressStartupBanner> | |||
| <OutputFile>$(IntDir)\MPETest.bsc</OutputFile> | |||
| <OutputFile>$(IntDir)\MPEDemo.bsc</OutputFile> | |||
| </Bscmake> | |||
| <Lib/> | |||
| </ItemDefinitionGroup> | |||
| @@ -203,10 +203,10 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPESynthesiserVoice.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEValue.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEUtils.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEZone.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEValue.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEZoneLayout.cpp"> | |||
| @@ -1820,8 +1820,8 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPESynthesiser.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPESynthesiserBase.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPESynthesiserVoice.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEUtils.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEValue.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEZone.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEZoneLayout.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\native\juce_mac_CoreAudioLayouts.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\sources\juce_AudioSource.h"/> | |||
| @@ -2,11 +2,11 @@ | |||
| <Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | |||
| <ItemGroup> | |||
| <Filter Include="MPETest\Source"> | |||
| <UniqueIdentifier>{4C619D3B-22E1-04C0-C5D0-079B9D4033C5}</UniqueIdentifier> | |||
| <Filter Include="MPEDemo\Source"> | |||
| <UniqueIdentifier>{A5DDD243-6BE8-6763-3B38-381FFC66A24B}</UniqueIdentifier> | |||
| </Filter> | |||
| <Filter Include="MPETest"> | |||
| <UniqueIdentifier>{B247D4B4-6F9D-8C96-A514-D55062B9D9F8}</UniqueIdentifier> | |||
| <Filter Include="MPEDemo"> | |||
| <UniqueIdentifier>{9C29808E-4A1F-7792-BC99-39E90332240C}</UniqueIdentifier> | |||
| </Filter> | |||
| <Filter Include="JUCE Modules\juce_audio_basics\audio_play_head"> | |||
| <UniqueIdentifier>{EB58F05A-A968-CEBE-40C4-107CDD8F240F}</UniqueIdentifier> | |||
| @@ -374,7 +374,7 @@ | |||
| </ItemGroup> | |||
| <ItemGroup> | |||
| <ClCompile Include="..\..\Source\Main.cpp"> | |||
| <Filter>MPETest\Source</Filter> | |||
| <Filter>MPEDemo\Source</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\buffers</Filter> | |||
| @@ -430,10 +430,10 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPESynthesiserVoice.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\mpe</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEValue.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEUtils.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\mpe</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEZone.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEValue.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\mpe</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEZoneLayout.cpp"> | |||
| @@ -2167,22 +2167,22 @@ | |||
| </ItemGroup> | |||
| <ItemGroup> | |||
| <ClInclude Include="..\..\Source\MainComponent.h"> | |||
| <Filter>MPETest\Source</Filter> | |||
| <Filter>MPEDemo\Source</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\Source\MPEDemoSynthVoice.h"> | |||
| <Filter>MPETest\Source</Filter> | |||
| <Filter>MPEDemo\Source</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\Source\MPESetupComponent.h"> | |||
| <Filter>MPETest\Source</Filter> | |||
| <Filter>MPEDemo\Source</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\Source\Visualiser.h"> | |||
| <Filter>MPETest\Source</Filter> | |||
| <Filter>MPEDemo\Source</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\Source\ZoneColourPicker.h"> | |||
| <Filter>MPETest\Source</Filter> | |||
| <Filter>MPEDemo\Source</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\Source\ZoneLayoutComponent.h"> | |||
| <Filter>MPETest\Source</Filter> | |||
| <Filter>MPEDemo\Source</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\audio_play_head</Filter> | |||
| @@ -2253,10 +2253,10 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPESynthesiserVoice.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\mpe</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEValue.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEUtils.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\mpe</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEZone.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEValue.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\mpe</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEZoneLayout.h"> | |||
| @@ -15,9 +15,9 @@ BEGIN | |||
| BEGIN | |||
| VALUE "CompanyName", "ROLI Ltd.\0" | |||
| VALUE "LegalCopyright", "ROLI Ltd.\0" | |||
| VALUE "FileDescription", "MPETest\0" | |||
| VALUE "FileDescription", "MPEDemo\0" | |||
| VALUE "FileVersion", "1.0.0\0" | |||
| VALUE "ProductName", "MPETest\0" | |||
| VALUE "ProductName", "MPEDemo\0" | |||
| VALUE "ProductVersion", "1.0.0\0" | |||
| END | |||
| END | |||
| @@ -1,7 +1,7 @@ | |||
| Microsoft Visual Studio Solution File, Format Version 11.00 | |||
| # Visual Studio 2017 | |||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MPETest - App", "MPETest_App.vcxproj", "{D4B09FE5-F7C6-3530-7AA4-725B57317169}" | |||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MPEDemo - App", "MPEDemo_App.vcxproj", "{D4B09FE5-F7C6-3530-7AA4-725B57317169}" | |||
| EndProject | |||
| Global | |||
| GlobalSection(SolutionConfigurationPlatforms) = preSolution | |||
| @@ -53,11 +53,11 @@ | |||
| <TargetExt>.exe</TargetExt> | |||
| <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)\$(Configuration)\App\</OutDir> | |||
| <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\App\</IntDir> | |||
| <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">MPETest</TargetName> | |||
| <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">MPEDemo</TargetName> | |||
| <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</GenerateManifest> | |||
| <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Platform)\$(Configuration)\App\</OutDir> | |||
| <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\App\</IntDir> | |||
| <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MPETest</TargetName> | |||
| <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MPEDemo</TargetName> | |||
| <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</GenerateManifest> | |||
| <PlatformToolset>v141</PlatformToolset> | |||
| <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion> | |||
| @@ -90,17 +90,17 @@ | |||
| <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> | |||
| </ResourceCompile> | |||
| <Link> | |||
| <OutputFile>$(OutDir)\MPETest.exe</OutputFile> | |||
| <OutputFile>$(OutDir)\MPEDemo.exe</OutputFile> | |||
| <SuppressStartupBanner>true</SuppressStartupBanner> | |||
| <IgnoreSpecificDefaultLibraries>libcmt.lib; msvcrt.lib;;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries> | |||
| <GenerateDebugInformation>true</GenerateDebugInformation> | |||
| <ProgramDatabaseFile>$(IntDir)\MPETest.pdb</ProgramDatabaseFile> | |||
| <ProgramDatabaseFile>$(IntDir)\MPEDemo.pdb</ProgramDatabaseFile> | |||
| <SubSystem>Windows</SubSystem> | |||
| <LargeAddressAware>true</LargeAddressAware> | |||
| </Link> | |||
| <Bscmake> | |||
| <SuppressStartupBanner>true</SuppressStartupBanner> | |||
| <OutputFile>$(IntDir)\MPETest.bsc</OutputFile> | |||
| <OutputFile>$(IntDir)\MPEDemo.bsc</OutputFile> | |||
| </Bscmake> | |||
| <Lib/> | |||
| </ItemDefinitionGroup> | |||
| @@ -131,11 +131,11 @@ | |||
| <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> | |||
| </ResourceCompile> | |||
| <Link> | |||
| <OutputFile>$(OutDir)\MPETest.exe</OutputFile> | |||
| <OutputFile>$(OutDir)\MPEDemo.exe</OutputFile> | |||
| <SuppressStartupBanner>true</SuppressStartupBanner> | |||
| <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries> | |||
| <GenerateDebugInformation>false</GenerateDebugInformation> | |||
| <ProgramDatabaseFile>$(IntDir)\MPETest.pdb</ProgramDatabaseFile> | |||
| <ProgramDatabaseFile>$(IntDir)\MPEDemo.pdb</ProgramDatabaseFile> | |||
| <SubSystem>Windows</SubSystem> | |||
| <OptimizeReferences>true</OptimizeReferences> | |||
| <EnableCOMDATFolding>true</EnableCOMDATFolding> | |||
| @@ -143,7 +143,7 @@ | |||
| </Link> | |||
| <Bscmake> | |||
| <SuppressStartupBanner>true</SuppressStartupBanner> | |||
| <OutputFile>$(IntDir)\MPETest.bsc</OutputFile> | |||
| <OutputFile>$(IntDir)\MPEDemo.bsc</OutputFile> | |||
| </Bscmake> | |||
| <Lib/> | |||
| </ItemDefinitionGroup> | |||
| @@ -203,10 +203,10 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPESynthesiserVoice.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEValue.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEUtils.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEZone.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEValue.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEZoneLayout.cpp"> | |||
| @@ -1820,8 +1820,8 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPESynthesiser.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPESynthesiserBase.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPESynthesiserVoice.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEUtils.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEValue.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEZone.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEZoneLayout.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\native\juce_mac_CoreAudioLayouts.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\sources\juce_AudioSource.h"/> | |||
| @@ -2,11 +2,11 @@ | |||
| <Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | |||
| <ItemGroup> | |||
| <Filter Include="MPETest\Source"> | |||
| <UniqueIdentifier>{4C619D3B-22E1-04C0-C5D0-079B9D4033C5}</UniqueIdentifier> | |||
| <Filter Include="MPEDemo\Source"> | |||
| <UniqueIdentifier>{A5DDD243-6BE8-6763-3B38-381FFC66A24B}</UniqueIdentifier> | |||
| </Filter> | |||
| <Filter Include="MPETest"> | |||
| <UniqueIdentifier>{B247D4B4-6F9D-8C96-A514-D55062B9D9F8}</UniqueIdentifier> | |||
| <Filter Include="MPEDemo"> | |||
| <UniqueIdentifier>{9C29808E-4A1F-7792-BC99-39E90332240C}</UniqueIdentifier> | |||
| </Filter> | |||
| <Filter Include="JUCE Modules\juce_audio_basics\audio_play_head"> | |||
| <UniqueIdentifier>{EB58F05A-A968-CEBE-40C4-107CDD8F240F}</UniqueIdentifier> | |||
| @@ -374,7 +374,7 @@ | |||
| </ItemGroup> | |||
| <ItemGroup> | |||
| <ClCompile Include="..\..\Source\Main.cpp"> | |||
| <Filter>MPETest\Source</Filter> | |||
| <Filter>MPEDemo\Source</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\buffers</Filter> | |||
| @@ -430,10 +430,10 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPESynthesiserVoice.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\mpe</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEValue.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEUtils.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\mpe</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEZone.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEValue.cpp"> | |||
| <Filter>JUCE Modules\juce_audio_basics\mpe</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEZoneLayout.cpp"> | |||
| @@ -2167,22 +2167,22 @@ | |||
| </ItemGroup> | |||
| <ItemGroup> | |||
| <ClInclude Include="..\..\Source\MainComponent.h"> | |||
| <Filter>MPETest\Source</Filter> | |||
| <Filter>MPEDemo\Source</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\Source\MPEDemoSynthVoice.h"> | |||
| <Filter>MPETest\Source</Filter> | |||
| <Filter>MPEDemo\Source</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\Source\MPESetupComponent.h"> | |||
| <Filter>MPETest\Source</Filter> | |||
| <Filter>MPEDemo\Source</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\Source\Visualiser.h"> | |||
| <Filter>MPETest\Source</Filter> | |||
| <Filter>MPEDemo\Source</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\Source\ZoneColourPicker.h"> | |||
| <Filter>MPETest\Source</Filter> | |||
| <Filter>MPEDemo\Source</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\Source\ZoneLayoutComponent.h"> | |||
| <Filter>MPETest\Source</Filter> | |||
| <Filter>MPEDemo\Source</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\audio_play_head</Filter> | |||
| @@ -2253,10 +2253,10 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPESynthesiserVoice.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\mpe</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEValue.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEUtils.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\mpe</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEZone.h"> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEValue.h"> | |||
| <Filter>JUCE Modules\juce_audio_basics\mpe</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEZoneLayout.h"> | |||
| @@ -15,9 +15,9 @@ BEGIN | |||
| BEGIN | |||
| VALUE "CompanyName", "ROLI Ltd.\0" | |||
| VALUE "LegalCopyright", "ROLI Ltd.\0" | |||
| VALUE "FileDescription", "MPETest\0" | |||
| VALUE "FileDescription", "MPEDemo\0" | |||
| VALUE "FileVersion", "1.0.0\0" | |||
| VALUE "ProductName", "MPETest\0" | |||
| VALUE "ProductName", "MPEDemo\0" | |||
| VALUE "ProductVersion", "1.0.0\0" | |||
| END | |||
| END | |||
| @@ -39,7 +39,7 @@ | |||
| #if ! JUCE_DONT_DECLARE_PROJECTINFO | |||
| namespace ProjectInfo | |||
| { | |||
| const char* const projectName = "MPETest"; | |||
| const char* const projectName = "MPEDemo"; | |||
| const char* const versionString = "1.0.0"; | |||
| const int versionNumber = 0x10000; | |||
| } | |||
| @@ -1,9 +1,9 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <JUCERPROJECT id="IilE7R" name="MPETest" projectType="guiapp" bundleIdentifier="com.roli.MPETest" | |||
| <JUCERPROJECT id="IilE7R" name="MPEDemo" projectType="guiapp" bundleIdentifier="com.roli.MPETest" | |||
| jucerVersion="5.2.1" displaySplashScreen="0" reportAppUsage="0" | |||
| companyName="ROLI Ltd." companyCopyright="ROLI Ltd."> | |||
| <MAINGROUP id="VCQQcn" name="MPETest"> | |||
| <MAINGROUP id="VCQQcn" name="MPEDemo"> | |||
| <GROUP id="{D43238F0-992F-BC5A-F1AA-31BBBD3D17B0}" name="Source"> | |||
| <FILE id="uRxR7V" name="Main.cpp" compile="1" resource="0" file="Source/Main.cpp"/> | |||
| <FILE id="UgOrHf" name="MainComponent.h" compile="0" resource="0" file="Source/MainComponent.h"/> | |||
| @@ -21,8 +21,8 @@ | |||
| <EXPORTFORMATS> | |||
| <XCODE_MAC targetFolder="Builds/MacOSX"> | |||
| <CONFIGURATIONS> | |||
| <CONFIGURATION name="Debug" osxCompatibility="10.10 SDK" isDebug="1" targetName="MPETest"/> | |||
| <CONFIGURATION name="Release" osxCompatibility="10.10 SDK" isDebug="0" targetName="MPETest"/> | |||
| <CONFIGURATION name="Debug" osxCompatibility="10.10 SDK" isDebug="1" targetName="MPEDemo"/> | |||
| <CONFIGURATION name="Release" osxCompatibility="10.10 SDK" isDebug="0" targetName="MPEDemo"/> | |||
| </CONFIGURATIONS> | |||
| <MODULEPATHS> | |||
| <MODULEPATH id="juce_core" path="../../modules"/> | |||
| @@ -43,8 +43,8 @@ | |||
| </XCODE_MAC> | |||
| <LINUX_MAKE targetFolder="Builds/LinuxMakefile"> | |||
| <CONFIGURATIONS> | |||
| <CONFIGURATION name="Debug" libraryPath="/usr/X11R6/lib/" isDebug="1" targetName="MPETest"/> | |||
| <CONFIGURATION name="Release" libraryPath="/usr/X11R6/lib/" isDebug="0" targetName="MPETest"/> | |||
| <CONFIGURATION name="Debug" libraryPath="/usr/X11R6/lib/" isDebug="1" targetName="MPEDemo"/> | |||
| <CONFIGURATION name="Release" libraryPath="/usr/X11R6/lib/" isDebug="0" targetName="MPEDemo"/> | |||
| </CONFIGURATIONS> | |||
| <MODULEPATHS> | |||
| <MODULEPATH id="juce_core" path="../../modules"/> | |||
| @@ -66,8 +66,8 @@ | |||
| <VS2015 targetFolder="Builds/VisualStudio2015"> | |||
| <CONFIGURATIONS> | |||
| <CONFIGURATION name="Debug" winWarningLevel="4" winArchitecture="32-bit" isDebug="1" | |||
| targetName="MPETest"/> | |||
| <CONFIGURATION name="Release" winArchitecture="32-bit" isDebug="0" targetName="MPETest"/> | |||
| targetName="MPEDemo"/> | |||
| <CONFIGURATION name="Release" winArchitecture="32-bit" isDebug="0" targetName="MPEDemo"/> | |||
| </CONFIGURATIONS> | |||
| <MODULEPATHS> | |||
| <MODULEPATH id="juce_video" path="../../modules"/> | |||
| @@ -88,8 +88,8 @@ | |||
| </VS2015> | |||
| <VS2017 targetFolder="Builds/VisualStudio2017"> | |||
| <CONFIGURATIONS> | |||
| <CONFIGURATION name="Debug" isDebug="1" targetName="MPETest"/> | |||
| <CONFIGURATION name="Release" isDebug="0" targetName="MPETest"/> | |||
| <CONFIGURATION name="Debug" isDebug="1" targetName="MPEDemo"/> | |||
| <CONFIGURATION name="Release" isDebug="0" targetName="MPEDemo"/> | |||
| </CONFIGURATIONS> | |||
| <MODULEPATHS> | |||
| <MODULEPATH id="juce_video" path="../../modules"/> | |||
| @@ -32,10 +32,7 @@ class MPEDemoSynthVoice : public MPESynthesiserVoice | |||
| { | |||
| public: | |||
| //============================================================================== | |||
| MPEDemoSynthVoice() | |||
| : phase (0.0), phaseDelta (0.0), tailOff (0.0) | |||
| { | |||
| } | |||
| MPEDemoSynthVoice() {} | |||
| //============================================================================== | |||
| void noteStarted() override | |||
| @@ -49,7 +46,7 @@ public: | |||
| timbre.setValue (currentlyPlayingNote.timbre.asUnsignedFloat()); | |||
| phase = 0.0; | |||
| const double cyclesPerSample = frequency.getNextValue() / currentSampleRate; | |||
| auto cyclesPerSample = frequency.getNextValue() / currentSampleRate; | |||
| phaseDelta = MathConstants<double>::twoPi * cyclesPerSample; | |||
| tailOff = 0.0; | |||
| @@ -65,8 +62,7 @@ public: | |||
| // this and do a fade out, calling clearCurrentNote() when it's finished. | |||
| if (tailOff == 0.0) // we only need to begin a tail-off if it's not already doing so - the | |||
| // stopNote method could be called more than once. | |||
| tailOff = 1.0; | |||
| tailOff = 1.0; // stopNote method could be called more than once. | |||
| } | |||
| else | |||
| { | |||
| @@ -119,9 +115,9 @@ public: | |||
| { | |||
| while (--numSamples >= 0) | |||
| { | |||
| const float currentSample = getNextSample() * (float) tailOff; | |||
| auto currentSample = getNextSample() * (float) tailOff; | |||
| for (int i = outputBuffer.getNumChannels(); --i >= 0;) | |||
| for (auto i = outputBuffer.getNumChannels(); --i >= 0;) | |||
| outputBuffer.addSample (i, startSample, currentSample); | |||
| ++startSample; | |||
| @@ -141,9 +137,9 @@ public: | |||
| { | |||
| while (--numSamples >= 0) | |||
| { | |||
| const float currentSample = getNextSample(); | |||
| auto currentSample = getNextSample(); | |||
| for (int i = outputBuffer.getNumChannels(); --i >= 0;) | |||
| for (auto i = outputBuffer.getNumChannels(); --i >= 0;) | |||
| outputBuffer.addSample (i, startSample, currentSample); | |||
| ++startSample; | |||
| @@ -156,18 +152,18 @@ private: | |||
| //============================================================================== | |||
| float getNextSample() noexcept | |||
| { | |||
| const double levelDb = (level.getNextValue() - 1.0) * maxLevelDb; | |||
| const double amplitude = std::pow (10.0f, 0.05f * levelDb) * maxLevel; | |||
| auto levelDb = (level.getNextValue() - 1.0) * maxLevelDb; | |||
| auto amplitude = std::pow (10.0f, 0.05f * levelDb) * maxLevel; | |||
| // timbre is used to blend between a sine and a square. | |||
| const double f1 = std::sin (phase); | |||
| const double f2 = std::copysign (1.0, f1); | |||
| const double a2 = timbre.getNextValue(); | |||
| const double a1 = 1.0 - a2; | |||
| auto f1 = std::sin (phase); | |||
| auto f2 = std::copysign (1.0, f1); | |||
| auto a2 = timbre.getNextValue(); | |||
| auto a1 = 1.0 - a2; | |||
| const float nextSample = float (amplitude * ((a1 * f1) + (a2 * f2))); | |||
| auto nextSample = float (amplitude * ((a1 * f1) + (a2 * f2))); | |||
| const double cyclesPerSample = frequency.getNextValue() / currentSampleRate; | |||
| auto cyclesPerSample = frequency.getNextValue() / currentSampleRate; | |||
| phaseDelta = MathConstants<double>::twoPi * cyclesPerSample; | |||
| phase = std::fmod (phase + phaseDelta, MathConstants<double>::twoPi); | |||
| @@ -176,7 +172,10 @@ private: | |||
| //============================================================================== | |||
| LinearSmoothedValue<double> level, timbre, frequency; | |||
| double phase, phaseDelta, tailOff; | |||
| double phase = 0.0; | |||
| double phaseDelta = 0.0; | |||
| double tailOff = 0.0; | |||
| const double maxLevel = 0.05f; | |||
| const double maxLevelDb = 31.0f; | |||
| @@ -39,7 +39,7 @@ public: | |||
| { | |||
| public: | |||
| virtual ~Listener() {} | |||
| virtual void zoneAdded (MPEZone newZone) = 0; | |||
| virtual void zoneChanged (bool isLower, int numMemberChans, int perNotePb, int masterPb) = 0; | |||
| virtual void allZonesCleared() = 0; | |||
| virtual void legacyModeChanged (bool legacyModeEnabled, int pitchbendRange, Range<int> channelRange) = 0; | |||
| virtual void voiceStealingEnabledChanged (bool voiceStealingEnabled) = 0; | |||
| @@ -51,22 +51,11 @@ public: | |||
| //============================================================================== | |||
| MPESetupComponent() | |||
| : masterChannelLabel (String(), "Master channel:"), | |||
| noteChannelsLabel (String(), "Nr. of note channels:"), | |||
| masterPitchbendRangeLabel (String(), "Master pitchbend range (semitones):"), | |||
| notePitchbendRangeLabel (String(), "Note pitchbend range (semitones):"), | |||
| addZoneButton ("Add this zone"), | |||
| clearAllZonesButton ("Clear all zones"), | |||
| legacyStartChannelLabel (String(), "First channel:"), | |||
| legacyEndChannelLabel (String(), "Last channel:"), | |||
| legacyPitchbendRangeLabel (String(), "Pitchbend range (semitones):"), | |||
| legacyModeEnabledToggle ("Enable Legacy Mode"), | |||
| voiceStealingEnabledToggle ("Enable synth voice stealing"), | |||
| numberOfVoicesLabel (String(), "Number of synth voices") | |||
| { | |||
| addAndMakeVisible (isLowerZoneButton); | |||
| isLowerZoneButton.setToggleState (true, NotificationType::dontSendNotification); | |||
| initialiseComboBoxWithConsecutiveIntegers (masterChannel, masterChannelLabel, 1, 15, defaultMasterChannel); | |||
| initialiseComboBoxWithConsecutiveIntegers (noteChannels, noteChannelsLabel, 1, 15, defaultNoteChannels); | |||
| initialiseComboBoxWithConsecutiveIntegers (memberChannels, memberChannelsLabel, 0, 16, defaultMemberChannels); | |||
| initialiseComboBoxWithConsecutiveIntegers (masterPitchbendRange, masterPitchbendRangeLabel, 0, 96, defaultMasterPitchbendRange); | |||
| initialiseComboBoxWithConsecutiveIntegers (notePitchbendRange, notePitchbendRangeLabel, 0, 96, defaultNotePitchbendRange); | |||
| @@ -74,12 +63,13 @@ public: | |||
| initialiseComboBoxWithConsecutiveIntegers (legacyEndChannel, legacyEndChannelLabel, 1, 16, 16, false); | |||
| initialiseComboBoxWithConsecutiveIntegers (legacyPitchbendRange, legacyPitchbendRangeLabel, 0, 96, 2, false); | |||
| initialiseButton (addZoneButton); | |||
| initialiseButton (setZoneButton); | |||
| initialiseButton (clearAllZonesButton); | |||
| initialiseButton (legacyModeEnabledToggle); | |||
| initialiseButton (voiceStealingEnabledToggle); | |||
| initialiseComboBoxWithConsecutiveIntegers (numberOfVoices, numberOfVoicesLabel, 1, 20, 15); | |||
| numberOfVoices.addListener (this); | |||
| } | |||
| @@ -91,29 +81,29 @@ public: | |||
| const int hspace = 6; | |||
| const int hbigspace = 18; | |||
| masterChannel.setBounds (r.removeFromTop (h)); | |||
| isLowerZoneButton.setBounds (r.removeFromTop (h)); | |||
| r.removeFromTop (hspace); | |||
| noteChannels.setBounds (r.removeFromTop (h)); | |||
| memberChannels.setBounds (r.removeFromTop (h)); | |||
| r.removeFromTop (hspace); | |||
| notePitchbendRange.setBounds (r.removeFromTop (h)); | |||
| r.removeFromTop (hspace); | |||
| masterPitchbendRange.setBounds (r.removeFromTop (h)); | |||
| legacyStartChannel.setBounds (masterChannel.getBounds()); | |||
| legacyEndChannel.setBounds (noteChannels.getBounds()); | |||
| legacyStartChannel.setBounds (isLowerZoneButton.getBounds()); | |||
| legacyEndChannel.setBounds (memberChannels.getBounds()); | |||
| legacyPitchbendRange.setBounds (notePitchbendRange.getBounds()); | |||
| r.removeFromTop (hbigspace); | |||
| int buttonLeft = proportionOfWidth (0.5f); | |||
| auto buttonLeft = proportionOfWidth (0.5f); | |||
| addZoneButton.setBounds (r.removeFromTop (h).withLeft (buttonLeft)); | |||
| setZoneButton.setBounds (r.removeFromTop (h).withLeft (buttonLeft)); | |||
| r.removeFromTop (hspace); | |||
| clearAllZonesButton.setBounds (r.removeFromTop (h).withLeft (buttonLeft)); | |||
| r.removeFromTop (hbigspace); | |||
| int toggleLeft = proportionOfWidth (0.25f); | |||
| auto toggleLeft = proportionOfWidth (0.25f); | |||
| legacyModeEnabledToggle.setBounds (r.removeFromTop (h).withLeft (toggleLeft)); | |||
| r.removeFromTop (hspace); | |||
| @@ -152,33 +142,26 @@ private: | |||
| //============================================================================== | |||
| void buttonClicked (Button* button) override | |||
| { | |||
| if (button == &addZoneButton) | |||
| addZoneButtonClicked(); | |||
| else if (button == &clearAllZonesButton) | |||
| clearAllZonesButtonClicked(); | |||
| else if (button == &legacyModeEnabledToggle) | |||
| legacyModeEnabledToggleClicked(); | |||
| else if (button == &voiceStealingEnabledToggle) | |||
| voiceStealingEnabledToggleClicked(); | |||
| if (button == &setZoneButton) setZoneButtonClicked(); | |||
| else if (button == &clearAllZonesButton) clearAllZonesButtonClicked(); | |||
| else if (button == &legacyModeEnabledToggle) legacyModeEnabledToggleClicked(); | |||
| else if (button == &voiceStealingEnabledToggle) voiceStealingEnabledToggleClicked(); | |||
| } | |||
| //============================================================================== | |||
| void addZoneButtonClicked() | |||
| void setZoneButtonClicked() | |||
| { | |||
| if (areMPEParametersValid()) | |||
| { | |||
| MPEZone newZone (masterChannel.getText().getIntValue(), | |||
| noteChannels.getText().getIntValue(), | |||
| notePitchbendRange.getText().getIntValue(), | |||
| masterPitchbendRange.getText().getIntValue()); | |||
| auto isLowerZone = isLowerZoneButton.getToggleState(); | |||
| auto numMemberChannels = memberChannels.getText().getIntValue(); | |||
| auto perNotePb = notePitchbendRange.getText().getIntValue(); | |||
| auto masterPb = masterPitchbendRange.getText().getIntValue(); | |||
| zoneLayout.addZone (newZone); | |||
| listeners.call ([&] (Listener& l) { l.zoneAdded (newZone); }); | |||
| } | |||
| if (isLowerZone) | |||
| zoneLayout.setLowerZone (numMemberChannels, perNotePb, masterPb); | |||
| else | |||
| { | |||
| handleInvalidMPEParameters(); | |||
| } | |||
| zoneLayout.setUpperZone (numMemberChannels, perNotePb, masterPb); | |||
| listeners.call ([&] (Listener& l) { l.zoneChanged (isLowerZone, numMemberChannels, perNotePb, masterPb); }); | |||
| } | |||
| //============================================================================== | |||
| @@ -191,17 +174,17 @@ private: | |||
| //============================================================================== | |||
| void legacyModeEnabledToggleClicked() | |||
| { | |||
| bool legacyModeEnabled = legacyModeEnabledToggle.getToggleState(); | |||
| auto legacyModeEnabled = legacyModeEnabledToggle.getToggleState(); | |||
| masterChannel.setVisible (! legacyModeEnabled); | |||
| noteChannels.setVisible (! legacyModeEnabled); | |||
| notePitchbendRange.setVisible (! legacyModeEnabled); | |||
| isLowerZoneButton.setVisible (! legacyModeEnabled); | |||
| memberChannels.setVisible (! legacyModeEnabled); | |||
| notePitchbendRange.setVisible (! legacyModeEnabled); | |||
| masterPitchbendRange.setVisible (! legacyModeEnabled); | |||
| addZoneButton.setVisible (! legacyModeEnabled); | |||
| clearAllZonesButton.setVisible (! legacyModeEnabled); | |||
| setZoneButton.setVisible (! legacyModeEnabled); | |||
| clearAllZonesButton.setVisible (! legacyModeEnabled); | |||
| legacyStartChannel.setVisible (legacyModeEnabled); | |||
| legacyEndChannel.setVisible (legacyModeEnabled); | |||
| legacyStartChannel.setVisible (legacyModeEnabled); | |||
| legacyEndChannel.setVisible (legacyModeEnabled); | |||
| legacyPitchbendRange.setVisible (legacyModeEnabled); | |||
| if (areLegacyModeParametersValid()) | |||
| @@ -219,7 +202,7 @@ private: | |||
| //============================================================================== | |||
| void voiceStealingEnabledToggleClicked() | |||
| { | |||
| bool newState = voiceStealingEnabledToggle.getToggleState(); | |||
| auto newState = voiceStealingEnabledToggle.getToggleState(); | |||
| listeners.call ([=] (Listener& l) { l.voiceStealingEnabledChanged (newState); }); | |||
| } | |||
| @@ -271,21 +254,6 @@ private: | |||
| } | |||
| //============================================================================== | |||
| bool areMPEParametersValid() const | |||
| { | |||
| int maxPossibleNumNoteChannels = 16 - masterChannel.getText().getIntValue(); | |||
| return noteChannels.getText().getIntValue() <= maxPossibleNumNoteChannels; | |||
| } | |||
| void handleInvalidMPEParameters() const | |||
| { | |||
| AlertWindow::showMessageBoxAsync (AlertWindow::WarningIcon, | |||
| "Invalid zone layout", | |||
| "Cannot create MPE zone:\n" | |||
| "Invalid zone parameters selected!", | |||
| "Got it"); | |||
| } | |||
| bool areLegacyModeParametersValid() const | |||
| { | |||
| return legacyStartChannel.getText().getIntValue() <= legacyEndChannel.getText().getIntValue(); | |||
| @@ -303,27 +271,39 @@ private: | |||
| //============================================================================== | |||
| Range<int> getLegacyModeChannelRange() const | |||
| { | |||
| return Range<int> (legacyStartChannel.getText().getIntValue(), | |||
| legacyEndChannel.getText().getIntValue() + 1); | |||
| return { legacyStartChannel.getText().getIntValue(), | |||
| legacyEndChannel.getText().getIntValue() + 1 }; | |||
| } | |||
| //============================================================================== | |||
| MPEZoneLayout zoneLayout; | |||
| ComboBox masterChannel, noteChannels, masterPitchbendRange, notePitchbendRange; | |||
| Label masterChannelLabel, noteChannelsLabel, masterPitchbendRangeLabel, notePitchbendRangeLabel; | |||
| TextButton addZoneButton, clearAllZonesButton; | |||
| ComboBox memberChannels, masterPitchbendRange, notePitchbendRange; | |||
| ToggleButton isLowerZoneButton { "Lower zone" }; | |||
| Label memberChannelsLabel { {}, "Nr. of member channels:" }; | |||
| Label masterPitchbendRangeLabel { {}, "Master pitchbend range (semitones):" }; | |||
| Label notePitchbendRangeLabel { {}, "Note pitchbend range (semitones):" }; | |||
| TextButton setZoneButton { "Set zone" }; | |||
| TextButton clearAllZonesButton { "Clear all zones" }; | |||
| ComboBox legacyStartChannel, legacyEndChannel, legacyPitchbendRange; | |||
| Label legacyStartChannelLabel, legacyEndChannelLabel, legacyPitchbendRangeLabel; | |||
| ToggleButton legacyModeEnabledToggle, voiceStealingEnabledToggle; | |||
| Label legacyStartChannelLabel { {}, "First channel:" }; | |||
| Label legacyEndChannelLabel { {}, "Last channel:" }; | |||
| Label legacyPitchbendRangeLabel { {}, "Pitchbend range (semitones):"}; | |||
| ToggleButton legacyModeEnabledToggle { "Enable Legacy Mode" }; | |||
| ToggleButton voiceStealingEnabledToggle { "Enable synth voice stealing" }; | |||
| ComboBox numberOfVoices; | |||
| Label numberOfVoicesLabel; | |||
| Label numberOfVoicesLabel { {}, "Number of synth voices"}; | |||
| ListenerList<Listener> listeners; | |||
| const int defaultMasterChannel = 1, defaultNoteChannels = 15, | |||
| const int defaultMasterChannel = 1, defaultMemberChannels = 15, | |||
| defaultMasterPitchbendRange = 2, defaultNotePitchbendRange = 48; | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MPESetupComponent) | |||
| @@ -29,7 +29,7 @@ | |||
| #include <array> | |||
| struct MPETestClasses | |||
| struct MPEDemoClasses | |||
| { | |||
| #include "MPESetupComponent.h" | |||
| #include "ZoneColourPicker.h" | |||
| @@ -41,11 +41,11 @@ struct MPETestClasses | |||
| //============================================================================== | |||
| class MPETestApplication : public JUCEApplication | |||
| class MPEDemoApplication : public JUCEApplication | |||
| { | |||
| public: | |||
| //============================================================================== | |||
| MPETestApplication() {} | |||
| MPEDemoApplication() {} | |||
| const String getApplicationName() override { return ProjectInfo::projectName; } | |||
| const String getApplicationVersion() override { return ProjectInfo::versionString; } | |||
| @@ -74,11 +74,11 @@ public: | |||
| MainWindow (String name) | |||
| : DocumentWindow (name, | |||
| LookAndFeel::getDefaultLookAndFeel() | |||
| .findColour (ResizableWindow::backgroundColourId), | |||
| .findColour (ResizableWindow::backgroundColourId), | |||
| DocumentWindow::allButtons) | |||
| { | |||
| setUsingNativeTitleBar (true); | |||
| setContentOwned (new MPETestClasses::MainComponent(), true); | |||
| setContentOwned (new MPEDemoClasses::MainComponent(), true); | |||
| centreWithSize (getWidth(), getHeight()); | |||
| setVisible (true); | |||
| @@ -98,4 +98,4 @@ private: | |||
| }; | |||
| //============================================================================== | |||
| START_JUCE_APPLICATION (MPETestApplication) | |||
| START_JUCE_APPLICATION (MPEDemoApplication) | |||
| @@ -41,8 +41,8 @@ public: | |||
| visualiserComp (colourPicker) | |||
| { | |||
| setSize (880, 720); | |||
| audioDeviceManager.initialise (0, 2, 0, true, String(), 0); | |||
| audioDeviceManager.addMidiInputCallback (String(), this); | |||
| audioDeviceManager.initialise (0, 2, 0, true, {}, 0); | |||
| audioDeviceManager.addMidiInputCallback ({}, this); | |||
| audioDeviceManager.addAudioCallback (this); | |||
| addAndMakeVisible (audioSetupComp); | |||
| @@ -60,7 +60,7 @@ public: | |||
| synth.setVoiceStealingEnabled (false); | |||
| for (int i = 0; i < 15; ++i) | |||
| synth.addVoice (new MPEDemoSynthVoice); | |||
| synth.addVoice (new MPEDemoSynthVoice()); | |||
| } | |||
| ~MainComponent() | |||
| @@ -71,16 +71,16 @@ public: | |||
| //============================================================================== | |||
| void resized() override | |||
| { | |||
| const int visualiserCompWidth = 2800; | |||
| const int visualiserCompHeight = 300; | |||
| const int zoneLayoutCompHeight = 60; | |||
| const float audioSetupCompRelativeWidth = 0.55f; | |||
| int visualiserCompWidth = 2800; | |||
| int visualiserCompHeight = 300; | |||
| int zoneLayoutCompHeight = 60; | |||
| float audioSetupCompRelativeWidth = 0.55f; | |||
| Rectangle<int> r (getLocalBounds()); | |||
| auto r = getLocalBounds(); | |||
| visualiserViewport.setBounds (r.removeFromBottom (visualiserCompHeight)); | |||
| visualiserComp.setBounds (Rectangle<int> (visualiserCompWidth, | |||
| visualiserViewport.getHeight() - visualiserViewport.getScrollBarThickness())); | |||
| visualiserComp.setBounds ({ visualiserCompWidth, | |||
| visualiserViewport.getHeight() - visualiserViewport.getScrollBarThickness() }); | |||
| zoneLayoutComp.setBounds (r.removeFromBottom (zoneLayoutCompHeight)); | |||
| audioSetupComp.setBounds (r.removeFromLeft (proportionOfWidth (audioSetupCompRelativeWidth))); | |||
| @@ -102,7 +102,8 @@ public: | |||
| void audioDeviceAboutToStart (AudioIODevice* device) override | |||
| { | |||
| const double sampleRate = device->getCurrentSampleRate(); | |||
| auto sampleRate = device->getCurrentSampleRate(); | |||
| midiCollector.reset (sampleRate); | |||
| synth.setCurrentPlaybackSampleRate (sampleRate); | |||
| } | |||
| @@ -121,13 +122,23 @@ private: | |||
| } | |||
| //============================================================================== | |||
| void zoneAdded (MPEZone newZone) override | |||
| void zoneChanged (bool isLowerZone, int numMemberChannels, | |||
| int perNotePitchbendRange, int masterPitchbendRange) override | |||
| { | |||
| MidiOutput* midiOutput = audioDeviceManager.getDefaultMidiOutput(); | |||
| auto* midiOutput = audioDeviceManager.getDefaultMidiOutput(); | |||
| if (midiOutput != nullptr) | |||
| midiOutput->sendBlockOfMessagesNow (MPEMessages::addZone (newZone)); | |||
| { | |||
| if (isLowerZone) | |||
| midiOutput->sendBlockOfMessagesNow (MPEMessages::setLowerZone (numMemberChannels, perNotePitchbendRange, masterPitchbendRange)); | |||
| else | |||
| midiOutput->sendBlockOfMessagesNow (MPEMessages::setUpperZone (numMemberChannels, perNotePitchbendRange, masterPitchbendRange)); | |||
| } | |||
| if (isLowerZone) | |||
| zoneLayout.setLowerZone (numMemberChannels, perNotePitchbendRange, masterPitchbendRange); | |||
| else | |||
| zoneLayout.setUpperZone (numMemberChannels, perNotePitchbendRange, masterPitchbendRange); | |||
| zoneLayout.addZone (newZone); | |||
| visualiserInstrument.setZoneLayout (zoneLayout); | |||
| synth.setZoneLayout (zoneLayout); | |||
| colourPicker.setZoneLayout (zoneLayout); | |||
| @@ -135,7 +146,7 @@ private: | |||
| void allZonesCleared() override | |||
| { | |||
| MidiOutput* midiOutput = audioDeviceManager.getDefaultMidiOutput(); | |||
| auto* midiOutput = audioDeviceManager.getDefaultMidiOutput(); | |||
| if (midiOutput != nullptr) | |||
| midiOutput->sendBlockOfMessagesNow (MPEMessages::clearAllZones()); | |||
| @@ -172,7 +183,7 @@ private: | |||
| synth.reduceNumVoices (numberOfVoices); | |||
| else | |||
| while (synth.getNumVoices() < numberOfVoices) | |||
| synth.addVoice (new MPEDemoSynthVoice); | |||
| synth.addVoice (new MPEDemoSynthVoice()); | |||
| } | |||
| //============================================================================== | |||
| @@ -84,7 +84,7 @@ private: | |||
| g.setColour (zoneColour); | |||
| Path circle, dashedCircle; | |||
| circle.addEllipse (translateToLocalBounds (getSquareAroundCentre (getNoteOffRadius()))); | |||
| const float dashLengths[] = { 3.0f, 3.0f }; | |||
| float dashLengths[] = { 3.0f, 3.0f }; | |||
| PathStrokeType (2.0, PathStrokeType::mitered).createDashedStroke (dashedCircle, circle, dashLengths, 2); | |||
| g.fillPath (dashedCircle); | |||
| } | |||
| @@ -92,7 +92,8 @@ private: | |||
| //============================================================================== | |||
| void drawNoteLabel (Graphics& g, Colour zoneColour) | |||
| { | |||
| Rectangle<int> textBounds = translateToLocalBounds (getTextRectangle()).getSmallestIntegerContainer(); | |||
| auto textBounds = translateToLocalBounds (getTextRectangle()).getSmallestIntegerContainer(); | |||
| g.drawText ("+", textBounds, Justification::centred); | |||
| g.drawText (MidiMessage::getMidiNoteName (note.initialNote, true, true, 3), textBounds, Justification::centredBottom); | |||
| g.setFont (Font (22.0f, Font::bold)); | |||
| @@ -131,7 +132,7 @@ class Visualiser : public Component, | |||
| { | |||
| public: | |||
| //============================================================================== | |||
| Visualiser (const ZoneColourPicker& zoneColourPicker) | |||
| Visualiser (ZoneColourPicker& zoneColourPicker) | |||
| : colourPicker (zoneColourPicker) | |||
| {} | |||
| @@ -140,11 +141,12 @@ public: | |||
| { | |||
| g.fillAll (Colours::black); | |||
| float noteDistance = float (getWidth()) / 128; | |||
| auto noteDistance = float (getWidth()) / 128; | |||
| for (int i = 0; i < 128; ++i) | |||
| { | |||
| float x = noteDistance * i; | |||
| int noteHeight = int (MidiMessage::isMidiNoteBlack (i) ? 0.7 * getHeight() : getHeight()); | |||
| auto x = noteDistance * i; | |||
| auto noteHeight = int (MidiMessage::isMidiNoteBlack (i) ? 0.7 * getHeight() : getHeight()); | |||
| g.setColour (MidiMessage::isMidiNoteBlack (i) ? Colours::white : Colours::grey); | |||
| g.drawLine (x, 0.0f, x, (float) noteHeight); | |||
| @@ -185,7 +187,7 @@ public: | |||
| { | |||
| const ScopedLock sl (lock); | |||
| for (int i = activeNotes.size(); --i >= 0;) | |||
| for (auto i = activeNotes.size(); --i >= 0;) | |||
| if (activeNotes.getReference(i).noteID == finishedNote.noteID) | |||
| activeNotes.remove (i); | |||
| @@ -218,7 +220,7 @@ private: | |||
| { | |||
| const ScopedLock sl (lock); | |||
| for (int i = noteComponents.size(); --i >= 0;) | |||
| for (auto i = noteComponents.size(); --i >= 0;) | |||
| if (findActiveNote (noteComponents.getUnchecked(i)->note.noteID) == nullptr) | |||
| noteComponents.remove (i); | |||
| @@ -234,18 +236,18 @@ private: | |||
| //============================================================================== | |||
| Point<float> getCentrePositionForNote (MPENote note) const | |||
| { | |||
| float n = float (note.initialNote) + float (note.totalPitchbendInSemitones); | |||
| float x = getWidth() * n / 128; | |||
| float y = getHeight() * (1 - note.timbre.asUnsignedFloat()); | |||
| auto n = float (note.initialNote) + float (note.totalPitchbendInSemitones); | |||
| auto x = getWidth() * n / 128; | |||
| auto y = getHeight() * (1 - note.timbre.asUnsignedFloat()); | |||
| return Point<float> (x, y); | |||
| return { x, y }; | |||
| } | |||
| //============================================================================== | |||
| OwnedArray<NoteComponent> noteComponents; | |||
| CriticalSection lock; | |||
| Array<MPENote> activeNotes; | |||
| const ZoneColourPicker& colourPicker; | |||
| ZoneColourPicker& colourPicker; | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Visualiser) | |||
| }; | |||
| @@ -34,42 +34,29 @@ public: | |||
| ZoneColourPicker() {} | |||
| //============================================================================== | |||
| Colour getColourForMidiChannel (int midiChannel) const noexcept | |||
| Colour getColourForMidiChannel (int midiChannel) noexcept | |||
| { | |||
| if (legacyModeEnabled) | |||
| return Colours::white; | |||
| if (zoneLayout.getNumZones() == 0) | |||
| return Colours::transparentBlack; | |||
| if (zoneLayout.getLowerZone().isUsingChannelAsMemberChannel (midiChannel)) | |||
| return getColourForZone (true); | |||
| if (auto* zone = zoneLayout.getZoneByChannel (midiChannel)) | |||
| return getColourForZoneIndex (std::distance (zoneLayout.getZoneByIndex (0), zone)); | |||
| if (zoneLayout.getUpperZone().isUsingChannelAsMemberChannel (midiChannel)) | |||
| return getColourForZone (false); | |||
| return Colours::transparentBlack; | |||
| } | |||
| //============================================================================== | |||
| Colour getColourForZoneIndex (int zoneIndex) const noexcept | |||
| Colour getColourForZone (bool isLowerZone) const noexcept | |||
| { | |||
| if (legacyModeEnabled) | |||
| return Colours::white; | |||
| if (zoneIndex >= zoneLayout.getNumZones()) | |||
| return Colours::transparentBlack; | |||
| static const std::array<Colour, 8> colours = | |||
| { | |||
| Colours::red, | |||
| Colours::yellow, | |||
| Colours::blue, | |||
| Colours::magenta, | |||
| Colours::limegreen, | |||
| Colours::cyan, | |||
| Colours::orange, | |||
| Colours::salmon | |||
| }; | |||
| return colours[zoneIndex % colours.size()]; | |||
| if (isLowerZone) | |||
| return Colours::blue; | |||
| return Colours::red; | |||
| } | |||
| //============================================================================== | |||
| @@ -49,9 +49,14 @@ public: | |||
| } | |||
| //============================================================================== | |||
| void zoneAdded (MPEZone newZone) override | |||
| void zoneChanged (bool isLowerZone, int numMemberChannels, | |||
| int perNotePitchbendRange, int masterPitchbendRange) override | |||
| { | |||
| zoneLayout.addZone (newZone); | |||
| if (isLowerZone) | |||
| zoneLayout.setLowerZone (numMemberChannels, perNotePitchbendRange, masterPitchbendRange); | |||
| else | |||
| zoneLayout.setUpperZone (numMemberChannels, perNotePitchbendRange, masterPitchbendRange); | |||
| repaint(); | |||
| } | |||
| @@ -66,6 +71,7 @@ public: | |||
| legacyModeEnabled = legacyModeShouldBeEnabled; | |||
| legacyModePitchbendRange = pitchbendRange; | |||
| legacyModeChannelRange = channelRange; | |||
| repaint(); | |||
| } | |||
| @@ -81,11 +87,10 @@ private: | |||
| for (int i = 0; i < numMidiChannels; ++i) | |||
| { | |||
| float x = float (i) * channelWidth; | |||
| auto x = float (i) * channelWidth; | |||
| Rectangle<int> channelArea ((int) x, 0, (int) channelWidth, getHeight()); | |||
| Line<float> line (x, 0.0f, x, float (getHeight())); | |||
| g.drawLine (line); | |||
| g.drawLine ({ x, 0.0f, x, float (getHeight()) }); | |||
| g.drawText (String (i + 1), channelArea.reduced (4, 4), Justification::topLeft, false); | |||
| } | |||
| } | |||
| @@ -93,35 +98,40 @@ private: | |||
| //============================================================================== | |||
| void paintZones (Graphics& g) | |||
| { | |||
| float channelWidth = getChannelRectangleWidth(); | |||
| auto channelWidth = getChannelRectangleWidth(); | |||
| Array<MPEZoneLayout::Zone> activeZones; | |||
| if (zoneLayout.getLowerZone().isActive()) activeZones.add (zoneLayout.getLowerZone()); | |||
| if (zoneLayout.getUpperZone().isActive()) activeZones.add (zoneLayout.getUpperZone()); | |||
| for (int i = 0; i < zoneLayout.getNumZones(); ++i) | |||
| for (auto zone : activeZones) | |||
| { | |||
| MPEZone zone = *zoneLayout.getZoneByIndex (i); | |||
| Colour zoneColour = colourPicker.getColourForZoneIndex (i); | |||
| auto zoneColour = colourPicker.getColourForZone (zone.isLowerZone()); | |||
| Rectangle<int> zoneRect (int (getChannelRectangleWidth() * (zone.getMasterChannel() - 1)), 0, | |||
| int (getChannelRectangleWidth() * (zone.getNumNoteChannels() + 1)), getHeight()); | |||
| zoneRect.removeFromTop (20); | |||
| auto xPos = zone.isLowerZone() ? 0 : zone.getLastMemberChannel() - 1; | |||
| g.setColour (zoneColour.withAlpha (0.3f)); | |||
| g.fillRect (zoneRect.withWidth ((int) channelWidth)); | |||
| Rectangle<int> zoneRect { int (channelWidth * (xPos)), 20, | |||
| int (channelWidth * (zone.numMemberChannels + 1)), getHeight() - 20 }; | |||
| g.setColour (zoneColour); | |||
| g.drawRect (zoneRect, 3); | |||
| g.drawText ("<>" + String (zone.getPerNotePitchbendRange()), zoneRect.withTrimmedLeft ((int) channelWidth).reduced (4, 4), Justification::bottomLeft, false); | |||
| g.setColour (Colours::black); | |||
| g.drawText ("ZONE " + String (i + 1), zoneRect.reduced (4, 4), Justification::topLeft, false); | |||
| g.drawText ("<>" + String (zone.getMasterPitchbendRange()), zoneRect.reduced (4, 4), Justification::bottomLeft, false); | |||
| auto masterRect = zone.isLowerZone() ? zoneRect.removeFromLeft (channelWidth) : zoneRect.removeFromRight (channelWidth); | |||
| g.setColour (zoneColour.withAlpha (0.3f)); | |||
| g.fillRect (masterRect); | |||
| g.setColour (zoneColour.contrasting()); | |||
| g.drawText ("<>" + String (zone.masterPitchbendRange), masterRect.reduced (4), Justification::top, false); | |||
| g.drawText ("<>" + String (zone.perNotePitchbendRange), masterRect.reduced (4), Justification::bottom, false); | |||
| } | |||
| } | |||
| //============================================================================== | |||
| void paintLegacyMode (Graphics& g) | |||
| { | |||
| int startChannel = legacyModeChannelRange.getStart() - 1; | |||
| int numChannels = legacyModeChannelRange.getEnd() - startChannel - 1; | |||
| auto startChannel = legacyModeChannelRange.getStart() - 1; | |||
| auto numChannels = legacyModeChannelRange.getEnd() - startChannel - 1; | |||
| Rectangle<int> zoneRect (int (getChannelRectangleWidth() * startChannel), 0, | |||