@@ -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 := $(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_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_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 $(CFLAGS) | ||||
JUCE_CXXFLAGS += $(JUCE_CFLAGS) -std=c++14 $(CXXFLAGS) | 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 := $(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_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_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3 $(CFLAGS) | ||||
JUCE_CXXFLAGS += $(JUCE_CFLAGS) -std=c++14 $(CXXFLAGS) | JUCE_CXXFLAGS += $(JUCE_CFLAGS) -std=c++14 $(CXXFLAGS) | ||||
@@ -89,7 +89,7 @@ OBJECTS_APP := \ | |||||
all : $(JUCE_OUTDIR)/$(JUCE_TARGET_APP) | all : $(JUCE_OUTDIR)/$(JUCE_TARGET_APP) | ||||
$(JUCE_OUTDIR)/$(JUCE_TARGET_APP) : check-pkg-config $(OBJECTS_APP) $(RESOURCES) | $(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_BINDIR) | ||||
-$(V_AT)mkdir -p $(JUCE_LIBDIR) | -$(V_AT)mkdir -p $(JUCE_LIBDIR) | ||||
-$(V_AT)mkdir -p $(JUCE_OUTDIR) | -$(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 | @pkg-config --print-errors alsa freetype2 libcurl x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0 | ||||
clean: | clean: | ||||
@echo Cleaning MPETest | |||||
@echo Cleaning MPEDemo | |||||
$(V_AT)$(CLEANCMD) | $(V_AT)$(CLEANCMD) | ||||
strip: | strip: | ||||
@echo Stripping MPETest | |||||
@echo Stripping MPEDemo | |||||
-$(V_AT)$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET) | -$(V_AT)$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET) | ||||
-include $(OBJECTS_APP:%.o=%.d) | -include $(OBJECTS_APP:%.o=%.d) |
@@ -10,9 +10,9 @@ | |||||
<key>CFBundleIdentifier</key> | <key>CFBundleIdentifier</key> | ||||
<string>com.roli.MPETest</string> | <string>com.roli.MPETest</string> | ||||
<key>CFBundleName</key> | <key>CFBundleName</key> | ||||
<string>MPETest</string> | |||||
<string>MPEDemo</string> | |||||
<key>CFBundleDisplayName</key> | <key>CFBundleDisplayName</key> | ||||
<string>MPETest</string> | |||||
<string>MPEDemo</string> | |||||
<key>CFBundlePackageType</key> | <key>CFBundlePackageType</key> | ||||
<string>APPL</string> | <string>APPL</string> | ||||
<key>CFBundleSignature</key> | <key>CFBundleSignature</key> |
@@ -75,7 +75,7 @@ | |||||
B238642BCD1B9A2C199F4DBF = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_devices"; path = "../../../../modules/juce_audio_devices"; sourceTree = "SOURCE_ROOT"; }; | 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"; }; | 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"; }; | 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"; }; | 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; }; | 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; }; | CCC23D1BCFBE5FFC700F8608 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; | ||||
@@ -100,7 +100,7 @@ | |||||
8A339D25116C57AC5F0FFBCD, | 8A339D25116C57AC5F0FFBCD, | ||||
AB1DE39BFBA22179B919703B, ); name = Source; sourceTree = "<group>"; }; | AB1DE39BFBA22179B919703B, ); name = Source; sourceTree = "<group>"; }; | ||||
C69BCE512948465235B05858 = {isa = PBXGroup; children = ( | C69BCE512948465235B05858 = {isa = PBXGroup; children = ( | ||||
47DF0B5F0B14AE411808F7CE, ); name = MPETest; sourceTree = "<group>"; }; | |||||
47DF0B5F0B14AE411808F7CE, ); name = MPEDemo; sourceTree = "<group>"; }; | |||||
38592324982B511EF7CF4FE1 = {isa = PBXGroup; children = ( | 38592324982B511EF7CF4FE1 = {isa = PBXGroup; children = ( | ||||
947FE6943BE8210665728E5A, | 947FE6943BE8210665728E5A, | ||||
B238642BCD1B9A2C199F4DBF, | B238642BCD1B9A2C199F4DBF, | ||||
@@ -259,7 +259,7 @@ | |||||
GCC_WARN_UNUSED_FUNCTION = YES; | GCC_WARN_UNUSED_FUNCTION = YES; | ||||
GCC_WARN_UNUSED_VARIABLE = YES; | GCC_WARN_UNUSED_VARIABLE = YES; | ||||
ONLY_ACTIVE_ARCH = YES; | ONLY_ACTIVE_ARCH = YES; | ||||
PRODUCT_NAME = "MPETest"; | |||||
PRODUCT_NAME = "MPEDemo"; | |||||
WARNING_CFLAGS = -Wreorder; | WARNING_CFLAGS = -Wreorder; | ||||
ZERO_LINK = NO; }; name = Debug; }; | ZERO_LINK = NO; }; name = Debug; }; | ||||
40FE0A8C9EA53BF7A25086B3 = {isa = XCBuildConfiguration; buildSettings = { | 40FE0A8C9EA53BF7A25086B3 = {isa = XCBuildConfiguration; buildSettings = { | ||||
@@ -295,7 +295,7 @@ | |||||
GCC_WARN_UNINITIALIZED_AUTOS = YES; | GCC_WARN_UNINITIALIZED_AUTOS = YES; | ||||
GCC_WARN_UNUSED_FUNCTION = YES; | GCC_WARN_UNUSED_FUNCTION = YES; | ||||
GCC_WARN_UNUSED_VARIABLE = YES; | GCC_WARN_UNUSED_VARIABLE = YES; | ||||
PRODUCT_NAME = "MPETest"; | |||||
PRODUCT_NAME = "MPEDemo"; | |||||
WARNING_CFLAGS = -Wreorder; | WARNING_CFLAGS = -Wreorder; | ||||
ZERO_LINK = NO; }; name = Release; }; | ZERO_LINK = NO; }; name = Release; }; | ||||
33F09A62C3878F91E38BA7B3 = {isa = PBXTargetDependency; target = 0DF05A38ED8E8BF6EB7D9C5C; }; | 33F09A62C3878F91E38BA7B3 = {isa = PBXTargetDependency; target = 0DF05A38ED8E8BF6EB7D9C5C; }; | ||||
@@ -341,7 +341,7 @@ | |||||
0DF05A38ED8E8BF6EB7D9C5C = {isa = PBXNativeTarget; buildConfigurationList = 20A88B838659B5B766A08F56; buildPhases = ( | 0DF05A38ED8E8BF6EB7D9C5C = {isa = PBXNativeTarget; buildConfigurationList = 20A88B838659B5B766A08F56; buildPhases = ( | ||||
518008B4BCAC2EDE2921458A, | 518008B4BCAC2EDE2921458A, | ||||
EF758DF42F97B8D22FD35F80, | 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); }; | 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; | rootObject = 9606743A47FFF871B775B1AB; |
@@ -1,7 +1,7 @@ | |||||
Microsoft Visual Studio Solution File, Format Version 11.00 | Microsoft Visual Studio Solution File, Format Version 11.00 | ||||
# Visual Studio 2015 | # 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 | EndProject | ||||
Global | Global | ||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution | GlobalSection(SolutionConfigurationPlatforms) = preSolution |
@@ -51,11 +51,11 @@ | |||||
<TargetExt>.exe</TargetExt> | <TargetExt>.exe</TargetExt> | ||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\App\</OutDir> | <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\App\</OutDir> | ||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)\$(Configuration)\App\</IntDir> | <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> | <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</GenerateManifest> | ||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\App\</OutDir> | <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\App\</OutDir> | ||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)\$(Configuration)\App\</IntDir> | <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> | <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</GenerateManifest> | ||||
<PlatformToolset>v140</PlatformToolset> | <PlatformToolset>v140</PlatformToolset> | ||||
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> | <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> | ||||
@@ -88,18 +88,18 @@ | |||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> | <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
</ResourceCompile> | </ResourceCompile> | ||||
<Link> | <Link> | ||||
<OutputFile>$(OutDir)\MPETest.exe</OutputFile> | |||||
<OutputFile>$(OutDir)\MPEDemo.exe</OutputFile> | |||||
<SuppressStartupBanner>true</SuppressStartupBanner> | <SuppressStartupBanner>true</SuppressStartupBanner> | ||||
<IgnoreSpecificDefaultLibraries>libcmt.lib; msvcrt.lib;;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries> | <IgnoreSpecificDefaultLibraries>libcmt.lib; msvcrt.lib;;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries> | ||||
<GenerateDebugInformation>true</GenerateDebugInformation> | <GenerateDebugInformation>true</GenerateDebugInformation> | ||||
<ProgramDatabaseFile>$(IntDir)\MPETest.pdb</ProgramDatabaseFile> | |||||
<ProgramDatabaseFile>$(IntDir)\MPEDemo.pdb</ProgramDatabaseFile> | |||||
<SubSystem>Windows</SubSystem> | <SubSystem>Windows</SubSystem> | ||||
<TargetMachine>MachineX86</TargetMachine> | <TargetMachine>MachineX86</TargetMachine> | ||||
<LargeAddressAware>true</LargeAddressAware> | <LargeAddressAware>true</LargeAddressAware> | ||||
</Link> | </Link> | ||||
<Bscmake> | <Bscmake> | ||||
<SuppressStartupBanner>true</SuppressStartupBanner> | <SuppressStartupBanner>true</SuppressStartupBanner> | ||||
<OutputFile>$(IntDir)\MPETest.bsc</OutputFile> | |||||
<OutputFile>$(IntDir)\MPEDemo.bsc</OutputFile> | |||||
</Bscmake> | </Bscmake> | ||||
<Lib/> | <Lib/> | ||||
</ItemDefinitionGroup> | </ItemDefinitionGroup> | ||||
@@ -130,11 +130,11 @@ | |||||
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> | <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
</ResourceCompile> | </ResourceCompile> | ||||
<Link> | <Link> | ||||
<OutputFile>$(OutDir)\MPETest.exe</OutputFile> | |||||
<OutputFile>$(OutDir)\MPEDemo.exe</OutputFile> | |||||
<SuppressStartupBanner>true</SuppressStartupBanner> | <SuppressStartupBanner>true</SuppressStartupBanner> | ||||
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries> | <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries> | ||||
<GenerateDebugInformation>false</GenerateDebugInformation> | <GenerateDebugInformation>false</GenerateDebugInformation> | ||||
<ProgramDatabaseFile>$(IntDir)\MPETest.pdb</ProgramDatabaseFile> | |||||
<ProgramDatabaseFile>$(IntDir)\MPEDemo.pdb</ProgramDatabaseFile> | |||||
<SubSystem>Windows</SubSystem> | <SubSystem>Windows</SubSystem> | ||||
<TargetMachine>MachineX86</TargetMachine> | <TargetMachine>MachineX86</TargetMachine> | ||||
<OptimizeReferences>true</OptimizeReferences> | <OptimizeReferences>true</OptimizeReferences> | ||||
@@ -143,7 +143,7 @@ | |||||
</Link> | </Link> | ||||
<Bscmake> | <Bscmake> | ||||
<SuppressStartupBanner>true</SuppressStartupBanner> | <SuppressStartupBanner>true</SuppressStartupBanner> | ||||
<OutputFile>$(IntDir)\MPETest.bsc</OutputFile> | |||||
<OutputFile>$(IntDir)\MPEDemo.bsc</OutputFile> | |||||
</Bscmake> | </Bscmake> | ||||
<Lib/> | <Lib/> | ||||
</ItemDefinitionGroup> | </ItemDefinitionGroup> | ||||
@@ -203,10 +203,10 @@ | |||||
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPESynthesiserVoice.cpp"> | <ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPESynthesiserVoice.cpp"> | ||||
<ExcludedFromBuild>true</ExcludedFromBuild> | <ExcludedFromBuild>true</ExcludedFromBuild> | ||||
</ClCompile> | </ClCompile> | ||||
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEValue.cpp"> | |||||
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEUtils.cpp"> | |||||
<ExcludedFromBuild>true</ExcludedFromBuild> | <ExcludedFromBuild>true</ExcludedFromBuild> | ||||
</ClCompile> | </ClCompile> | ||||
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEZone.cpp"> | |||||
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEValue.cpp"> | |||||
<ExcludedFromBuild>true</ExcludedFromBuild> | <ExcludedFromBuild>true</ExcludedFromBuild> | ||||
</ClCompile> | </ClCompile> | ||||
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEZoneLayout.cpp"> | <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_MPESynthesiser.h"/> | ||||
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPESynthesiserBase.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_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_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\mpe\juce_MPEZoneLayout.h"/> | ||||
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\native\juce_mac_CoreAudioLayouts.h"/> | <ClInclude Include="..\..\..\..\modules\juce_audio_basics\native\juce_mac_CoreAudioLayouts.h"/> | ||||
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\sources\juce_AudioSource.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"> | <Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||||
<ItemGroup> | <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> | ||||
<Filter Include="MPETest"> | |||||
<UniqueIdentifier>{B247D4B4-6F9D-8C96-A514-D55062B9D9F8}</UniqueIdentifier> | |||||
<Filter Include="MPEDemo"> | |||||
<UniqueIdentifier>{9C29808E-4A1F-7792-BC99-39E90332240C}</UniqueIdentifier> | |||||
</Filter> | </Filter> | ||||
<Filter Include="JUCE Modules\juce_audio_basics\audio_play_head"> | <Filter Include="JUCE Modules\juce_audio_basics\audio_play_head"> | ||||
<UniqueIdentifier>{EB58F05A-A968-CEBE-40C4-107CDD8F240F}</UniqueIdentifier> | <UniqueIdentifier>{EB58F05A-A968-CEBE-40C4-107CDD8F240F}</UniqueIdentifier> | ||||
@@ -374,7 +374,7 @@ | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<ClCompile Include="..\..\Source\Main.cpp"> | <ClCompile Include="..\..\Source\Main.cpp"> | ||||
<Filter>MPETest\Source</Filter> | |||||
<Filter>MPEDemo\Source</Filter> | |||||
</ClCompile> | </ClCompile> | ||||
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.cpp"> | <ClCompile Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.cpp"> | ||||
<Filter>JUCE Modules\juce_audio_basics\buffers</Filter> | <Filter>JUCE Modules\juce_audio_basics\buffers</Filter> | ||||
@@ -430,10 +430,10 @@ | |||||
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPESynthesiserVoice.cpp"> | <ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPESynthesiserVoice.cpp"> | ||||
<Filter>JUCE Modules\juce_audio_basics\mpe</Filter> | <Filter>JUCE Modules\juce_audio_basics\mpe</Filter> | ||||
</ClCompile> | </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> | <Filter>JUCE Modules\juce_audio_basics\mpe</Filter> | ||||
</ClCompile> | </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> | <Filter>JUCE Modules\juce_audio_basics\mpe</Filter> | ||||
</ClCompile> | </ClCompile> | ||||
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEZoneLayout.cpp"> | <ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEZoneLayout.cpp"> | ||||
@@ -2167,22 +2167,22 @@ | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<ClInclude Include="..\..\Source\MainComponent.h"> | <ClInclude Include="..\..\Source\MainComponent.h"> | ||||
<Filter>MPETest\Source</Filter> | |||||
<Filter>MPEDemo\Source</Filter> | |||||
</ClInclude> | </ClInclude> | ||||
<ClInclude Include="..\..\Source\MPEDemoSynthVoice.h"> | <ClInclude Include="..\..\Source\MPEDemoSynthVoice.h"> | ||||
<Filter>MPETest\Source</Filter> | |||||
<Filter>MPEDemo\Source</Filter> | |||||
</ClInclude> | </ClInclude> | ||||
<ClInclude Include="..\..\Source\MPESetupComponent.h"> | <ClInclude Include="..\..\Source\MPESetupComponent.h"> | ||||
<Filter>MPETest\Source</Filter> | |||||
<Filter>MPEDemo\Source</Filter> | |||||
</ClInclude> | </ClInclude> | ||||
<ClInclude Include="..\..\Source\Visualiser.h"> | <ClInclude Include="..\..\Source\Visualiser.h"> | ||||
<Filter>MPETest\Source</Filter> | |||||
<Filter>MPEDemo\Source</Filter> | |||||
</ClInclude> | </ClInclude> | ||||
<ClInclude Include="..\..\Source\ZoneColourPicker.h"> | <ClInclude Include="..\..\Source\ZoneColourPicker.h"> | ||||
<Filter>MPETest\Source</Filter> | |||||
<Filter>MPEDemo\Source</Filter> | |||||
</ClInclude> | </ClInclude> | ||||
<ClInclude Include="..\..\Source\ZoneLayoutComponent.h"> | <ClInclude Include="..\..\Source\ZoneLayoutComponent.h"> | ||||
<Filter>MPETest\Source</Filter> | |||||
<Filter>MPEDemo\Source</Filter> | |||||
</ClInclude> | </ClInclude> | ||||
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.h"> | <ClInclude Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.h"> | ||||
<Filter>JUCE Modules\juce_audio_basics\audio_play_head</Filter> | <Filter>JUCE Modules\juce_audio_basics\audio_play_head</Filter> | ||||
@@ -2253,10 +2253,10 @@ | |||||
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPESynthesiserVoice.h"> | <ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPESynthesiserVoice.h"> | ||||
<Filter>JUCE Modules\juce_audio_basics\mpe</Filter> | <Filter>JUCE Modules\juce_audio_basics\mpe</Filter> | ||||
</ClInclude> | </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> | <Filter>JUCE Modules\juce_audio_basics\mpe</Filter> | ||||
</ClInclude> | </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> | <Filter>JUCE Modules\juce_audio_basics\mpe</Filter> | ||||
</ClInclude> | </ClInclude> | ||||
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEZoneLayout.h"> | <ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEZoneLayout.h"> |
@@ -15,9 +15,9 @@ BEGIN | |||||
BEGIN | BEGIN | ||||
VALUE "CompanyName", "ROLI Ltd.\0" | VALUE "CompanyName", "ROLI Ltd.\0" | ||||
VALUE "LegalCopyright", "ROLI Ltd.\0" | VALUE "LegalCopyright", "ROLI Ltd.\0" | ||||
VALUE "FileDescription", "MPETest\0" | |||||
VALUE "FileDescription", "MPEDemo\0" | |||||
VALUE "FileVersion", "1.0.0\0" | VALUE "FileVersion", "1.0.0\0" | ||||
VALUE "ProductName", "MPETest\0" | |||||
VALUE "ProductName", "MPEDemo\0" | |||||
VALUE "ProductVersion", "1.0.0\0" | VALUE "ProductVersion", "1.0.0\0" | ||||
END | END | ||||
END | END |
@@ -1,7 +1,7 @@ | |||||
Microsoft Visual Studio Solution File, Format Version 11.00 | Microsoft Visual Studio Solution File, Format Version 11.00 | ||||
# Visual Studio 2017 | # 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 | EndProject | ||||
Global | Global | ||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution | GlobalSection(SolutionConfigurationPlatforms) = preSolution |
@@ -53,11 +53,11 @@ | |||||
<TargetExt>.exe</TargetExt> | <TargetExt>.exe</TargetExt> | ||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)\$(Configuration)\App\</OutDir> | <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)\$(Configuration)\App\</OutDir> | ||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\App\</IntDir> | <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> | <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</GenerateManifest> | ||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Platform)\$(Configuration)\App\</OutDir> | <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Platform)\$(Configuration)\App\</OutDir> | ||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\App\</IntDir> | <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> | <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</GenerateManifest> | ||||
<PlatformToolset>v141</PlatformToolset> | <PlatformToolset>v141</PlatformToolset> | ||||
<WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion> | <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion> | ||||
@@ -90,17 +90,17 @@ | |||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> | <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
</ResourceCompile> | </ResourceCompile> | ||||
<Link> | <Link> | ||||
<OutputFile>$(OutDir)\MPETest.exe</OutputFile> | |||||
<OutputFile>$(OutDir)\MPEDemo.exe</OutputFile> | |||||
<SuppressStartupBanner>true</SuppressStartupBanner> | <SuppressStartupBanner>true</SuppressStartupBanner> | ||||
<IgnoreSpecificDefaultLibraries>libcmt.lib; msvcrt.lib;;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries> | <IgnoreSpecificDefaultLibraries>libcmt.lib; msvcrt.lib;;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries> | ||||
<GenerateDebugInformation>true</GenerateDebugInformation> | <GenerateDebugInformation>true</GenerateDebugInformation> | ||||
<ProgramDatabaseFile>$(IntDir)\MPETest.pdb</ProgramDatabaseFile> | |||||
<ProgramDatabaseFile>$(IntDir)\MPEDemo.pdb</ProgramDatabaseFile> | |||||
<SubSystem>Windows</SubSystem> | <SubSystem>Windows</SubSystem> | ||||
<LargeAddressAware>true</LargeAddressAware> | <LargeAddressAware>true</LargeAddressAware> | ||||
</Link> | </Link> | ||||
<Bscmake> | <Bscmake> | ||||
<SuppressStartupBanner>true</SuppressStartupBanner> | <SuppressStartupBanner>true</SuppressStartupBanner> | ||||
<OutputFile>$(IntDir)\MPETest.bsc</OutputFile> | |||||
<OutputFile>$(IntDir)\MPEDemo.bsc</OutputFile> | |||||
</Bscmake> | </Bscmake> | ||||
<Lib/> | <Lib/> | ||||
</ItemDefinitionGroup> | </ItemDefinitionGroup> | ||||
@@ -131,11 +131,11 @@ | |||||
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> | <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
</ResourceCompile> | </ResourceCompile> | ||||
<Link> | <Link> | ||||
<OutputFile>$(OutDir)\MPETest.exe</OutputFile> | |||||
<OutputFile>$(OutDir)\MPEDemo.exe</OutputFile> | |||||
<SuppressStartupBanner>true</SuppressStartupBanner> | <SuppressStartupBanner>true</SuppressStartupBanner> | ||||
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries> | <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries> | ||||
<GenerateDebugInformation>false</GenerateDebugInformation> | <GenerateDebugInformation>false</GenerateDebugInformation> | ||||
<ProgramDatabaseFile>$(IntDir)\MPETest.pdb</ProgramDatabaseFile> | |||||
<ProgramDatabaseFile>$(IntDir)\MPEDemo.pdb</ProgramDatabaseFile> | |||||
<SubSystem>Windows</SubSystem> | <SubSystem>Windows</SubSystem> | ||||
<OptimizeReferences>true</OptimizeReferences> | <OptimizeReferences>true</OptimizeReferences> | ||||
<EnableCOMDATFolding>true</EnableCOMDATFolding> | <EnableCOMDATFolding>true</EnableCOMDATFolding> | ||||
@@ -143,7 +143,7 @@ | |||||
</Link> | </Link> | ||||
<Bscmake> | <Bscmake> | ||||
<SuppressStartupBanner>true</SuppressStartupBanner> | <SuppressStartupBanner>true</SuppressStartupBanner> | ||||
<OutputFile>$(IntDir)\MPETest.bsc</OutputFile> | |||||
<OutputFile>$(IntDir)\MPEDemo.bsc</OutputFile> | |||||
</Bscmake> | </Bscmake> | ||||
<Lib/> | <Lib/> | ||||
</ItemDefinitionGroup> | </ItemDefinitionGroup> | ||||
@@ -203,10 +203,10 @@ | |||||
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPESynthesiserVoice.cpp"> | <ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPESynthesiserVoice.cpp"> | ||||
<ExcludedFromBuild>true</ExcludedFromBuild> | <ExcludedFromBuild>true</ExcludedFromBuild> | ||||
</ClCompile> | </ClCompile> | ||||
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEValue.cpp"> | |||||
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEUtils.cpp"> | |||||
<ExcludedFromBuild>true</ExcludedFromBuild> | <ExcludedFromBuild>true</ExcludedFromBuild> | ||||
</ClCompile> | </ClCompile> | ||||
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEZone.cpp"> | |||||
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEValue.cpp"> | |||||
<ExcludedFromBuild>true</ExcludedFromBuild> | <ExcludedFromBuild>true</ExcludedFromBuild> | ||||
</ClCompile> | </ClCompile> | ||||
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEZoneLayout.cpp"> | <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_MPESynthesiser.h"/> | ||||
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPESynthesiserBase.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_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_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\mpe\juce_MPEZoneLayout.h"/> | ||||
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\native\juce_mac_CoreAudioLayouts.h"/> | <ClInclude Include="..\..\..\..\modules\juce_audio_basics\native\juce_mac_CoreAudioLayouts.h"/> | ||||
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\sources\juce_AudioSource.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"> | <Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||||
<ItemGroup> | <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> | ||||
<Filter Include="MPETest"> | |||||
<UniqueIdentifier>{B247D4B4-6F9D-8C96-A514-D55062B9D9F8}</UniqueIdentifier> | |||||
<Filter Include="MPEDemo"> | |||||
<UniqueIdentifier>{9C29808E-4A1F-7792-BC99-39E90332240C}</UniqueIdentifier> | |||||
</Filter> | </Filter> | ||||
<Filter Include="JUCE Modules\juce_audio_basics\audio_play_head"> | <Filter Include="JUCE Modules\juce_audio_basics\audio_play_head"> | ||||
<UniqueIdentifier>{EB58F05A-A968-CEBE-40C4-107CDD8F240F}</UniqueIdentifier> | <UniqueIdentifier>{EB58F05A-A968-CEBE-40C4-107CDD8F240F}</UniqueIdentifier> | ||||
@@ -374,7 +374,7 @@ | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<ClCompile Include="..\..\Source\Main.cpp"> | <ClCompile Include="..\..\Source\Main.cpp"> | ||||
<Filter>MPETest\Source</Filter> | |||||
<Filter>MPEDemo\Source</Filter> | |||||
</ClCompile> | </ClCompile> | ||||
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.cpp"> | <ClCompile Include="..\..\..\..\modules\juce_audio_basics\buffers\juce_AudioChannelSet.cpp"> | ||||
<Filter>JUCE Modules\juce_audio_basics\buffers</Filter> | <Filter>JUCE Modules\juce_audio_basics\buffers</Filter> | ||||
@@ -430,10 +430,10 @@ | |||||
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPESynthesiserVoice.cpp"> | <ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPESynthesiserVoice.cpp"> | ||||
<Filter>JUCE Modules\juce_audio_basics\mpe</Filter> | <Filter>JUCE Modules\juce_audio_basics\mpe</Filter> | ||||
</ClCompile> | </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> | <Filter>JUCE Modules\juce_audio_basics\mpe</Filter> | ||||
</ClCompile> | </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> | <Filter>JUCE Modules\juce_audio_basics\mpe</Filter> | ||||
</ClCompile> | </ClCompile> | ||||
<ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEZoneLayout.cpp"> | <ClCompile Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEZoneLayout.cpp"> | ||||
@@ -2167,22 +2167,22 @@ | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<ClInclude Include="..\..\Source\MainComponent.h"> | <ClInclude Include="..\..\Source\MainComponent.h"> | ||||
<Filter>MPETest\Source</Filter> | |||||
<Filter>MPEDemo\Source</Filter> | |||||
</ClInclude> | </ClInclude> | ||||
<ClInclude Include="..\..\Source\MPEDemoSynthVoice.h"> | <ClInclude Include="..\..\Source\MPEDemoSynthVoice.h"> | ||||
<Filter>MPETest\Source</Filter> | |||||
<Filter>MPEDemo\Source</Filter> | |||||
</ClInclude> | </ClInclude> | ||||
<ClInclude Include="..\..\Source\MPESetupComponent.h"> | <ClInclude Include="..\..\Source\MPESetupComponent.h"> | ||||
<Filter>MPETest\Source</Filter> | |||||
<Filter>MPEDemo\Source</Filter> | |||||
</ClInclude> | </ClInclude> | ||||
<ClInclude Include="..\..\Source\Visualiser.h"> | <ClInclude Include="..\..\Source\Visualiser.h"> | ||||
<Filter>MPETest\Source</Filter> | |||||
<Filter>MPEDemo\Source</Filter> | |||||
</ClInclude> | </ClInclude> | ||||
<ClInclude Include="..\..\Source\ZoneColourPicker.h"> | <ClInclude Include="..\..\Source\ZoneColourPicker.h"> | ||||
<Filter>MPETest\Source</Filter> | |||||
<Filter>MPEDemo\Source</Filter> | |||||
</ClInclude> | </ClInclude> | ||||
<ClInclude Include="..\..\Source\ZoneLayoutComponent.h"> | <ClInclude Include="..\..\Source\ZoneLayoutComponent.h"> | ||||
<Filter>MPETest\Source</Filter> | |||||
<Filter>MPEDemo\Source</Filter> | |||||
</ClInclude> | </ClInclude> | ||||
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.h"> | <ClInclude Include="..\..\..\..\modules\juce_audio_basics\audio_play_head\juce_AudioPlayHead.h"> | ||||
<Filter>JUCE Modules\juce_audio_basics\audio_play_head</Filter> | <Filter>JUCE Modules\juce_audio_basics\audio_play_head</Filter> | ||||
@@ -2253,10 +2253,10 @@ | |||||
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPESynthesiserVoice.h"> | <ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPESynthesiserVoice.h"> | ||||
<Filter>JUCE Modules\juce_audio_basics\mpe</Filter> | <Filter>JUCE Modules\juce_audio_basics\mpe</Filter> | ||||
</ClInclude> | </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> | <Filter>JUCE Modules\juce_audio_basics\mpe</Filter> | ||||
</ClInclude> | </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> | <Filter>JUCE Modules\juce_audio_basics\mpe</Filter> | ||||
</ClInclude> | </ClInclude> | ||||
<ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEZoneLayout.h"> | <ClInclude Include="..\..\..\..\modules\juce_audio_basics\mpe\juce_MPEZoneLayout.h"> |
@@ -15,9 +15,9 @@ BEGIN | |||||
BEGIN | BEGIN | ||||
VALUE "CompanyName", "ROLI Ltd.\0" | VALUE "CompanyName", "ROLI Ltd.\0" | ||||
VALUE "LegalCopyright", "ROLI Ltd.\0" | VALUE "LegalCopyright", "ROLI Ltd.\0" | ||||
VALUE "FileDescription", "MPETest\0" | |||||
VALUE "FileDescription", "MPEDemo\0" | |||||
VALUE "FileVersion", "1.0.0\0" | VALUE "FileVersion", "1.0.0\0" | ||||
VALUE "ProductName", "MPETest\0" | |||||
VALUE "ProductName", "MPEDemo\0" | |||||
VALUE "ProductVersion", "1.0.0\0" | VALUE "ProductVersion", "1.0.0\0" | ||||
END | END | ||||
END | END |
@@ -39,7 +39,7 @@ | |||||
#if ! JUCE_DONT_DECLARE_PROJECTINFO | #if ! JUCE_DONT_DECLARE_PROJECTINFO | ||||
namespace ProjectInfo | namespace ProjectInfo | ||||
{ | { | ||||
const char* const projectName = "MPETest"; | |||||
const char* const projectName = "MPEDemo"; | |||||
const char* const versionString = "1.0.0"; | const char* const versionString = "1.0.0"; | ||||
const int versionNumber = 0x10000; | const int versionNumber = 0x10000; | ||||
} | } |
@@ -1,9 +1,9 @@ | |||||
<?xml version="1.0" encoding="UTF-8"?> | <?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" | jucerVersion="5.2.1" displaySplashScreen="0" reportAppUsage="0" | ||||
companyName="ROLI Ltd." companyCopyright="ROLI Ltd."> | 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"> | <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="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"/> | <FILE id="UgOrHf" name="MainComponent.h" compile="0" resource="0" file="Source/MainComponent.h"/> | ||||
@@ -21,8 +21,8 @@ | |||||
<EXPORTFORMATS> | <EXPORTFORMATS> | ||||
<XCODE_MAC targetFolder="Builds/MacOSX"> | <XCODE_MAC targetFolder="Builds/MacOSX"> | ||||
<CONFIGURATIONS> | <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> | </CONFIGURATIONS> | ||||
<MODULEPATHS> | <MODULEPATHS> | ||||
<MODULEPATH id="juce_core" path="../../modules"/> | <MODULEPATH id="juce_core" path="../../modules"/> | ||||
@@ -43,8 +43,8 @@ | |||||
</XCODE_MAC> | </XCODE_MAC> | ||||
<LINUX_MAKE targetFolder="Builds/LinuxMakefile"> | <LINUX_MAKE targetFolder="Builds/LinuxMakefile"> | ||||
<CONFIGURATIONS> | <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> | </CONFIGURATIONS> | ||||
<MODULEPATHS> | <MODULEPATHS> | ||||
<MODULEPATH id="juce_core" path="../../modules"/> | <MODULEPATH id="juce_core" path="../../modules"/> | ||||
@@ -66,8 +66,8 @@ | |||||
<VS2015 targetFolder="Builds/VisualStudio2015"> | <VS2015 targetFolder="Builds/VisualStudio2015"> | ||||
<CONFIGURATIONS> | <CONFIGURATIONS> | ||||
<CONFIGURATION name="Debug" winWarningLevel="4" winArchitecture="32-bit" isDebug="1" | <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> | </CONFIGURATIONS> | ||||
<MODULEPATHS> | <MODULEPATHS> | ||||
<MODULEPATH id="juce_video" path="../../modules"/> | <MODULEPATH id="juce_video" path="../../modules"/> | ||||
@@ -88,8 +88,8 @@ | |||||
</VS2015> | </VS2015> | ||||
<VS2017 targetFolder="Builds/VisualStudio2017"> | <VS2017 targetFolder="Builds/VisualStudio2017"> | ||||
<CONFIGURATIONS> | <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> | </CONFIGURATIONS> | ||||
<MODULEPATHS> | <MODULEPATHS> | ||||
<MODULEPATH id="juce_video" path="../../modules"/> | <MODULEPATH id="juce_video" path="../../modules"/> |
@@ -32,10 +32,7 @@ class MPEDemoSynthVoice : public MPESynthesiserVoice | |||||
{ | { | ||||
public: | public: | ||||
//============================================================================== | //============================================================================== | ||||
MPEDemoSynthVoice() | |||||
: phase (0.0), phaseDelta (0.0), tailOff (0.0) | |||||
{ | |||||
} | |||||
MPEDemoSynthVoice() {} | |||||
//============================================================================== | //============================================================================== | ||||
void noteStarted() override | void noteStarted() override | ||||
@@ -49,7 +46,7 @@ public: | |||||
timbre.setValue (currentlyPlayingNote.timbre.asUnsignedFloat()); | timbre.setValue (currentlyPlayingNote.timbre.asUnsignedFloat()); | ||||
phase = 0.0; | phase = 0.0; | ||||
const double cyclesPerSample = frequency.getNextValue() / currentSampleRate; | |||||
auto cyclesPerSample = frequency.getNextValue() / currentSampleRate; | |||||
phaseDelta = MathConstants<double>::twoPi * cyclesPerSample; | phaseDelta = MathConstants<double>::twoPi * cyclesPerSample; | ||||
tailOff = 0.0; | tailOff = 0.0; | ||||
@@ -65,8 +62,7 @@ public: | |||||
// this and do a fade out, calling clearCurrentNote() when it's finished. | // 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 | 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 | else | ||||
{ | { | ||||
@@ -119,9 +115,9 @@ public: | |||||
{ | { | ||||
while (--numSamples >= 0) | 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); | outputBuffer.addSample (i, startSample, currentSample); | ||||
++startSample; | ++startSample; | ||||
@@ -141,9 +137,9 @@ public: | |||||
{ | { | ||||
while (--numSamples >= 0) | 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); | outputBuffer.addSample (i, startSample, currentSample); | ||||
++startSample; | ++startSample; | ||||
@@ -156,18 +152,18 @@ private: | |||||
//============================================================================== | //============================================================================== | ||||
float getNextSample() noexcept | 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. | // 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; | phaseDelta = MathConstants<double>::twoPi * cyclesPerSample; | ||||
phase = std::fmod (phase + phaseDelta, MathConstants<double>::twoPi); | phase = std::fmod (phase + phaseDelta, MathConstants<double>::twoPi); | ||||
@@ -176,7 +172,10 @@ private: | |||||
//============================================================================== | //============================================================================== | ||||
LinearSmoothedValue<double> level, timbre, frequency; | 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 maxLevel = 0.05f; | ||||
const double maxLevelDb = 31.0f; | const double maxLevelDb = 31.0f; |
@@ -39,7 +39,7 @@ public: | |||||
{ | { | ||||
public: | public: | ||||
virtual ~Listener() {} | 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 allZonesCleared() = 0; | ||||
virtual void legacyModeChanged (bool legacyModeEnabled, int pitchbendRange, Range<int> channelRange) = 0; | virtual void legacyModeChanged (bool legacyModeEnabled, int pitchbendRange, Range<int> channelRange) = 0; | ||||
virtual void voiceStealingEnabledChanged (bool voiceStealingEnabled) = 0; | virtual void voiceStealingEnabledChanged (bool voiceStealingEnabled) = 0; | ||||
@@ -51,22 +51,11 @@ public: | |||||
//============================================================================== | //============================================================================== | ||||
MPESetupComponent() | 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 (masterPitchbendRange, masterPitchbendRangeLabel, 0, 96, defaultMasterPitchbendRange); | ||||
initialiseComboBoxWithConsecutiveIntegers (notePitchbendRange, notePitchbendRangeLabel, 0, 96, defaultNotePitchbendRange); | initialiseComboBoxWithConsecutiveIntegers (notePitchbendRange, notePitchbendRangeLabel, 0, 96, defaultNotePitchbendRange); | ||||
@@ -74,12 +63,13 @@ public: | |||||
initialiseComboBoxWithConsecutiveIntegers (legacyEndChannel, legacyEndChannelLabel, 1, 16, 16, false); | initialiseComboBoxWithConsecutiveIntegers (legacyEndChannel, legacyEndChannelLabel, 1, 16, 16, false); | ||||
initialiseComboBoxWithConsecutiveIntegers (legacyPitchbendRange, legacyPitchbendRangeLabel, 0, 96, 2, false); | initialiseComboBoxWithConsecutiveIntegers (legacyPitchbendRange, legacyPitchbendRangeLabel, 0, 96, 2, false); | ||||
initialiseButton (addZoneButton); | |||||
initialiseButton (setZoneButton); | |||||
initialiseButton (clearAllZonesButton); | initialiseButton (clearAllZonesButton); | ||||
initialiseButton (legacyModeEnabledToggle); | initialiseButton (legacyModeEnabledToggle); | ||||
initialiseButton (voiceStealingEnabledToggle); | initialiseButton (voiceStealingEnabledToggle); | ||||
initialiseComboBoxWithConsecutiveIntegers (numberOfVoices, numberOfVoicesLabel, 1, 20, 15); | initialiseComboBoxWithConsecutiveIntegers (numberOfVoices, numberOfVoicesLabel, 1, 20, 15); | ||||
numberOfVoices.addListener (this); | numberOfVoices.addListener (this); | ||||
} | } | ||||
@@ -91,29 +81,29 @@ public: | |||||
const int hspace = 6; | const int hspace = 6; | ||||
const int hbigspace = 18; | const int hbigspace = 18; | ||||
masterChannel.setBounds (r.removeFromTop (h)); | |||||
isLowerZoneButton.setBounds (r.removeFromTop (h)); | |||||
r.removeFromTop (hspace); | r.removeFromTop (hspace); | ||||
noteChannels.setBounds (r.removeFromTop (h)); | |||||
memberChannels.setBounds (r.removeFromTop (h)); | |||||
r.removeFromTop (hspace); | r.removeFromTop (hspace); | ||||
notePitchbendRange.setBounds (r.removeFromTop (h)); | notePitchbendRange.setBounds (r.removeFromTop (h)); | ||||
r.removeFromTop (hspace); | r.removeFromTop (hspace); | ||||
masterPitchbendRange.setBounds (r.removeFromTop (h)); | 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()); | legacyPitchbendRange.setBounds (notePitchbendRange.getBounds()); | ||||
r.removeFromTop (hbigspace); | 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); | r.removeFromTop (hspace); | ||||
clearAllZonesButton.setBounds (r.removeFromTop (h).withLeft (buttonLeft)); | clearAllZonesButton.setBounds (r.removeFromTop (h).withLeft (buttonLeft)); | ||||
r.removeFromTop (hbigspace); | r.removeFromTop (hbigspace); | ||||
int toggleLeft = proportionOfWidth (0.25f); | |||||
auto toggleLeft = proportionOfWidth (0.25f); | |||||
legacyModeEnabledToggle.setBounds (r.removeFromTop (h).withLeft (toggleLeft)); | legacyModeEnabledToggle.setBounds (r.removeFromTop (h).withLeft (toggleLeft)); | ||||
r.removeFromTop (hspace); | r.removeFromTop (hspace); | ||||
@@ -152,33 +142,26 @@ private: | |||||
//============================================================================== | //============================================================================== | ||||
void buttonClicked (Button* button) override | 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 | else | ||||
{ | |||||
handleInvalidMPEParameters(); | |||||
} | |||||
zoneLayout.setUpperZone (numMemberChannels, perNotePb, masterPb); | |||||
listeners.call ([&] (Listener& l) { l.zoneChanged (isLowerZone, numMemberChannels, perNotePb, masterPb); }); | |||||
} | } | ||||
//============================================================================== | //============================================================================== | ||||
@@ -191,17 +174,17 @@ private: | |||||
//============================================================================== | //============================================================================== | ||||
void legacyModeEnabledToggleClicked() | 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); | 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); | legacyPitchbendRange.setVisible (legacyModeEnabled); | ||||
if (areLegacyModeParametersValid()) | if (areLegacyModeParametersValid()) | ||||
@@ -219,7 +202,7 @@ private: | |||||
//============================================================================== | //============================================================================== | ||||
void voiceStealingEnabledToggleClicked() | void voiceStealingEnabledToggleClicked() | ||||
{ | { | ||||
bool newState = voiceStealingEnabledToggle.getToggleState(); | |||||
auto newState = voiceStealingEnabledToggle.getToggleState(); | |||||
listeners.call ([=] (Listener& l) { l.voiceStealingEnabledChanged (newState); }); | 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 | bool areLegacyModeParametersValid() const | ||||
{ | { | ||||
return legacyStartChannel.getText().getIntValue() <= legacyEndChannel.getText().getIntValue(); | return legacyStartChannel.getText().getIntValue() <= legacyEndChannel.getText().getIntValue(); | ||||
@@ -303,27 +271,39 @@ private: | |||||
//============================================================================== | //============================================================================== | ||||
Range<int> getLegacyModeChannelRange() const | Range<int> getLegacyModeChannelRange() const | ||||
{ | { | ||||
return Range<int> (legacyStartChannel.getText().getIntValue(), | |||||
legacyEndChannel.getText().getIntValue() + 1); | |||||
return { legacyStartChannel.getText().getIntValue(), | |||||
legacyEndChannel.getText().getIntValue() + 1 }; | |||||
} | } | ||||
//============================================================================== | //============================================================================== | ||||
MPEZoneLayout zoneLayout; | 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; | 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; | ComboBox numberOfVoices; | ||||
Label numberOfVoicesLabel; | |||||
Label numberOfVoicesLabel { {}, "Number of synth voices"}; | |||||
ListenerList<Listener> listeners; | ListenerList<Listener> listeners; | ||||
const int defaultMasterChannel = 1, defaultNoteChannels = 15, | |||||
const int defaultMasterChannel = 1, defaultMemberChannels = 15, | |||||
defaultMasterPitchbendRange = 2, defaultNotePitchbendRange = 48; | defaultMasterPitchbendRange = 2, defaultNotePitchbendRange = 48; | ||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MPESetupComponent) | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MPESetupComponent) |
@@ -29,7 +29,7 @@ | |||||
#include <array> | #include <array> | ||||
struct MPETestClasses | |||||
struct MPEDemoClasses | |||||
{ | { | ||||
#include "MPESetupComponent.h" | #include "MPESetupComponent.h" | ||||
#include "ZoneColourPicker.h" | #include "ZoneColourPicker.h" | ||||
@@ -41,11 +41,11 @@ struct MPETestClasses | |||||
//============================================================================== | //============================================================================== | ||||
class MPETestApplication : public JUCEApplication | |||||
class MPEDemoApplication : public JUCEApplication | |||||
{ | { | ||||
public: | public: | ||||
//============================================================================== | //============================================================================== | ||||
MPETestApplication() {} | |||||
MPEDemoApplication() {} | |||||
const String getApplicationName() override { return ProjectInfo::projectName; } | const String getApplicationName() override { return ProjectInfo::projectName; } | ||||
const String getApplicationVersion() override { return ProjectInfo::versionString; } | const String getApplicationVersion() override { return ProjectInfo::versionString; } | ||||
@@ -74,11 +74,11 @@ public: | |||||
MainWindow (String name) | MainWindow (String name) | ||||
: DocumentWindow (name, | : DocumentWindow (name, | ||||
LookAndFeel::getDefaultLookAndFeel() | LookAndFeel::getDefaultLookAndFeel() | ||||
.findColour (ResizableWindow::backgroundColourId), | |||||
.findColour (ResizableWindow::backgroundColourId), | |||||
DocumentWindow::allButtons) | DocumentWindow::allButtons) | ||||
{ | { | ||||
setUsingNativeTitleBar (true); | setUsingNativeTitleBar (true); | ||||
setContentOwned (new MPETestClasses::MainComponent(), true); | |||||
setContentOwned (new MPEDemoClasses::MainComponent(), true); | |||||
centreWithSize (getWidth(), getHeight()); | centreWithSize (getWidth(), getHeight()); | ||||
setVisible (true); | setVisible (true); | ||||
@@ -98,4 +98,4 @@ private: | |||||
}; | }; | ||||
//============================================================================== | //============================================================================== | ||||
START_JUCE_APPLICATION (MPETestApplication) | |||||
START_JUCE_APPLICATION (MPEDemoApplication) |
@@ -41,8 +41,8 @@ public: | |||||
visualiserComp (colourPicker) | visualiserComp (colourPicker) | ||||
{ | { | ||||
setSize (880, 720); | 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); | audioDeviceManager.addAudioCallback (this); | ||||
addAndMakeVisible (audioSetupComp); | addAndMakeVisible (audioSetupComp); | ||||
@@ -60,7 +60,7 @@ public: | |||||
synth.setVoiceStealingEnabled (false); | synth.setVoiceStealingEnabled (false); | ||||
for (int i = 0; i < 15; ++i) | for (int i = 0; i < 15; ++i) | ||||
synth.addVoice (new MPEDemoSynthVoice); | |||||
synth.addVoice (new MPEDemoSynthVoice()); | |||||
} | } | ||||
~MainComponent() | ~MainComponent() | ||||
@@ -71,16 +71,16 @@ public: | |||||
//============================================================================== | //============================================================================== | ||||
void resized() override | 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)); | 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)); | zoneLayoutComp.setBounds (r.removeFromBottom (zoneLayoutCompHeight)); | ||||
audioSetupComp.setBounds (r.removeFromLeft (proportionOfWidth (audioSetupCompRelativeWidth))); | audioSetupComp.setBounds (r.removeFromLeft (proportionOfWidth (audioSetupCompRelativeWidth))); | ||||
@@ -102,7 +102,8 @@ public: | |||||
void audioDeviceAboutToStart (AudioIODevice* device) override | void audioDeviceAboutToStart (AudioIODevice* device) override | ||||
{ | { | ||||
const double sampleRate = device->getCurrentSampleRate(); | |||||
auto sampleRate = device->getCurrentSampleRate(); | |||||
midiCollector.reset (sampleRate); | midiCollector.reset (sampleRate); | ||||
synth.setCurrentPlaybackSampleRate (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) | 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); | visualiserInstrument.setZoneLayout (zoneLayout); | ||||
synth.setZoneLayout (zoneLayout); | synth.setZoneLayout (zoneLayout); | ||||
colourPicker.setZoneLayout (zoneLayout); | colourPicker.setZoneLayout (zoneLayout); | ||||
@@ -135,7 +146,7 @@ private: | |||||
void allZonesCleared() override | void allZonesCleared() override | ||||
{ | { | ||||
MidiOutput* midiOutput = audioDeviceManager.getDefaultMidiOutput(); | |||||
auto* midiOutput = audioDeviceManager.getDefaultMidiOutput(); | |||||
if (midiOutput != nullptr) | if (midiOutput != nullptr) | ||||
midiOutput->sendBlockOfMessagesNow (MPEMessages::clearAllZones()); | midiOutput->sendBlockOfMessagesNow (MPEMessages::clearAllZones()); | ||||
@@ -172,7 +183,7 @@ private: | |||||
synth.reduceNumVoices (numberOfVoices); | synth.reduceNumVoices (numberOfVoices); | ||||
else | else | ||||
while (synth.getNumVoices() < numberOfVoices) | while (synth.getNumVoices() < numberOfVoices) | ||||
synth.addVoice (new MPEDemoSynthVoice); | |||||
synth.addVoice (new MPEDemoSynthVoice()); | |||||
} | } | ||||
//============================================================================== | //============================================================================== |
@@ -84,7 +84,7 @@ private: | |||||
g.setColour (zoneColour); | g.setColour (zoneColour); | ||||
Path circle, dashedCircle; | Path circle, dashedCircle; | ||||
circle.addEllipse (translateToLocalBounds (getSquareAroundCentre (getNoteOffRadius()))); | 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); | PathStrokeType (2.0, PathStrokeType::mitered).createDashedStroke (dashedCircle, circle, dashLengths, 2); | ||||
g.fillPath (dashedCircle); | g.fillPath (dashedCircle); | ||||
} | } | ||||
@@ -92,7 +92,8 @@ private: | |||||
//============================================================================== | //============================================================================== | ||||
void drawNoteLabel (Graphics& g, Colour zoneColour) | void drawNoteLabel (Graphics& g, Colour zoneColour) | ||||
{ | { | ||||
Rectangle<int> textBounds = translateToLocalBounds (getTextRectangle()).getSmallestIntegerContainer(); | |||||
auto textBounds = translateToLocalBounds (getTextRectangle()).getSmallestIntegerContainer(); | |||||
g.drawText ("+", textBounds, Justification::centred); | g.drawText ("+", textBounds, Justification::centred); | ||||
g.drawText (MidiMessage::getMidiNoteName (note.initialNote, true, true, 3), textBounds, Justification::centredBottom); | g.drawText (MidiMessage::getMidiNoteName (note.initialNote, true, true, 3), textBounds, Justification::centredBottom); | ||||
g.setFont (Font (22.0f, Font::bold)); | g.setFont (Font (22.0f, Font::bold)); | ||||
@@ -131,7 +132,7 @@ class Visualiser : public Component, | |||||
{ | { | ||||
public: | public: | ||||
//============================================================================== | //============================================================================== | ||||
Visualiser (const ZoneColourPicker& zoneColourPicker) | |||||
Visualiser (ZoneColourPicker& zoneColourPicker) | |||||
: colourPicker (zoneColourPicker) | : colourPicker (zoneColourPicker) | ||||
{} | {} | ||||
@@ -140,11 +141,12 @@ public: | |||||
{ | { | ||||
g.fillAll (Colours::black); | g.fillAll (Colours::black); | ||||
float noteDistance = float (getWidth()) / 128; | |||||
auto noteDistance = float (getWidth()) / 128; | |||||
for (int i = 0; i < 128; ++i) | 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.setColour (MidiMessage::isMidiNoteBlack (i) ? Colours::white : Colours::grey); | ||||
g.drawLine (x, 0.0f, x, (float) noteHeight); | g.drawLine (x, 0.0f, x, (float) noteHeight); | ||||
@@ -185,7 +187,7 @@ public: | |||||
{ | { | ||||
const ScopedLock sl (lock); | 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) | if (activeNotes.getReference(i).noteID == finishedNote.noteID) | ||||
activeNotes.remove (i); | activeNotes.remove (i); | ||||
@@ -218,7 +220,7 @@ private: | |||||
{ | { | ||||
const ScopedLock sl (lock); | 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) | if (findActiveNote (noteComponents.getUnchecked(i)->note.noteID) == nullptr) | ||||
noteComponents.remove (i); | noteComponents.remove (i); | ||||
@@ -234,18 +236,18 @@ private: | |||||
//============================================================================== | //============================================================================== | ||||
Point<float> getCentrePositionForNote (MPENote note) const | 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; | OwnedArray<NoteComponent> noteComponents; | ||||
CriticalSection lock; | CriticalSection lock; | ||||
Array<MPENote> activeNotes; | Array<MPENote> activeNotes; | ||||
const ZoneColourPicker& colourPicker; | |||||
ZoneColourPicker& colourPicker; | |||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Visualiser) | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Visualiser) | ||||
}; | }; |
@@ -34,42 +34,29 @@ public: | |||||
ZoneColourPicker() {} | ZoneColourPicker() {} | ||||
//============================================================================== | //============================================================================== | ||||
Colour getColourForMidiChannel (int midiChannel) const noexcept | |||||
Colour getColourForMidiChannel (int midiChannel) noexcept | |||||
{ | { | ||||
if (legacyModeEnabled) | if (legacyModeEnabled) | ||||
return Colours::white; | 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; | return Colours::transparentBlack; | ||||
} | } | ||||
//============================================================================== | |||||
Colour getColourForZoneIndex (int zoneIndex) const noexcept | |||||
Colour getColourForZone (bool isLowerZone) const noexcept | |||||
{ | { | ||||
if (legacyModeEnabled) | if (legacyModeEnabled) | ||||
return Colours::white; | 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(); | repaint(); | ||||
} | } | ||||
@@ -66,6 +71,7 @@ public: | |||||
legacyModeEnabled = legacyModeShouldBeEnabled; | legacyModeEnabled = legacyModeShouldBeEnabled; | ||||
legacyModePitchbendRange = pitchbendRange; | legacyModePitchbendRange = pitchbendRange; | ||||
legacyModeChannelRange = channelRange; | legacyModeChannelRange = channelRange; | ||||
repaint(); | repaint(); | ||||
} | } | ||||
@@ -81,11 +87,10 @@ private: | |||||
for (int i = 0; i < numMidiChannels; ++i) | 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()); | 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); | g.drawText (String (i + 1), channelArea.reduced (4, 4), Justification::topLeft, false); | ||||
} | } | ||||
} | } | ||||
@@ -93,35 +98,40 @@ private: | |||||
//============================================================================== | //============================================================================== | ||||
void paintZones (Graphics& g) | 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.setColour (zoneColour); | ||||
g.drawRect (zoneRect, 3); | 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) | 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, | Rectangle<int> zoneRect (int (getChannelRectangleWidth() * startChannel), 0, |