# HG changeset patch # User Andrew McPherson # Date 1384193975 0 # Node ID 3580ffe87dc8f9c51ffe47df15553733ea98c923 First commit of TouchKeys public pre-release. diff -r 000000000000 -r 3580ffe87dc8 Builds/Linux/Makefile --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Builds/Linux/Makefile Mon Nov 11 18:19:35 2013 +0000 @@ -0,0 +1,444 @@ +# Automatically generated makefile, created by the Introjucer +# Don't edit this file! Your changes will be overwritten when you re-save the Introjucer project! + +# (this disables dependency generation if multiple architectures are set) +DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD) + +ifndef CONFIG + CONFIG=Debug +endif + +ifeq ($(CONFIG),Debug) + BINDIR := build + LIBDIR := build + OBJDIR := build/intermediate/Debug + OUTDIR := build + + ifeq ($(TARGET_ARCH),) + TARGET_ARCH := -march=native + endif + + CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../juce/modules + CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 + CXXFLAGS += $(CFLAGS) + LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt /usr/local/lib/liblo.a + LDDEPS := + RESFLAGS := -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../juce/modules + TARGET := TouchKeys + BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) +endif + +ifeq ($(CONFIG),Release) + BINDIR := build + LIBDIR := build + OBJDIR := build/intermediate/Release + OUTDIR := build + + ifeq ($(TARGET_ARCH),) + TARGET_ARCH := -march=native + endif + + CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../juce/modules + CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -Os + CXXFLAGS += $(CFLAGS) + LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt /usr/local/lib/liblo.a + LDDEPS := + RESFLAGS := -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../juce/modules + TARGET := TouchKeys + BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) +endif + +OBJECTS := \ + $(OBJDIR)/MainWindow_ca618186.o \ + $(OBJDIR)/KeyboardZoneComponent_fd0d7a77.o \ + $(OBJDIR)/ControlWindowMainComponent_c67f9014.o \ + $(OBJDIR)/MappingListComponent_402cf84e.o \ + $(OBJDIR)/MappingListItem_7a9eebac.o \ + $(OBJDIR)/TouchkeyVibratoMappingShortEditor_27ad15dd.o \ + $(OBJDIR)/TouchkeyVibratoMapping_ea5c5156.o \ + $(OBJDIR)/TouchkeyVibratoMappingFactory_f90040de.o \ + $(OBJDIR)/TouchkeyReleaseAngleMapping_170b0b0a.o \ + $(OBJDIR)/TouchkeyReleaseAngleMappingFactory_9052f4aa.o \ + $(OBJDIR)/TouchkeyPitchBendMappingShortEditor_6afc649d.o \ + $(OBJDIR)/TouchkeyPitchBendMapping_78aba96.o \ + $(OBJDIR)/TouchkeyPitchBendMappingFactory_9fc4ef9e.o \ + $(OBJDIR)/TouchkeyOnsetAngleMapping_a77ca3ca.o \ + $(OBJDIR)/TouchkeyOnsetAngleMappingFactory_6a4803ea.o \ + $(OBJDIR)/TouchkeyMultiFingerTriggerMapping_f7bfe8a.o \ + $(OBJDIR)/TouchkeyMultiFingerTriggerMappingFactory_e811112a.o \ + $(OBJDIR)/TouchkeyKeyDivisionMapping_cea38eb0.o \ + $(OBJDIR)/TouchkeyKeyDivisionMappingFactory_33b42a44.o \ + $(OBJDIR)/TouchkeyControlMappingShortEditor_993f27a5.o \ + $(OBJDIR)/TouchkeyControlMapping_1e638c8e.o \ + $(OBJDIR)/TouchkeyControlMappingFactory_1db276a6.o \ + $(OBJDIR)/MappingScheduler_3b3284f8.o \ + $(OBJDIR)/TouchkeyBaseMapping_d96a411c.o \ + $(OBJDIR)/Mapping_57653e8d.o \ + $(OBJDIR)/MappingFactorySplitter_9525552e.o \ + $(OBJDIR)/MIDIKeyPositionMapping_750093d2.o \ + $(OBJDIR)/MRPMapping_742529ce.o \ + $(OBJDIR)/KeyboardDisplay_d9f334cf.o \ + $(OBJDIR)/KeyPositionGraphDisplay_5606e2d0.o \ + $(OBJDIR)/RawSensorDisplay_f15a0e36.o \ + $(OBJDIR)/IIRFilter_c9874248.o \ + $(OBJDIR)/Scheduler_5d9eed19.o \ + $(OBJDIR)/TimerNode_477a3545.o \ + $(OBJDIR)/TimestampSynchronizer_df7831b6.o \ + $(OBJDIR)/Trigger_66a771d6.o \ + $(OBJDIR)/MidiKeyboardSegment_e1be9d70.o \ + $(OBJDIR)/KeyIdleDetector_2efa023e.o \ + $(OBJDIR)/KeyPositionTracker_4c4c0dd5.o \ + $(OBJDIR)/LogPlayback_1debad04.o \ + $(OBJDIR)/MidiInputController_1864322a.o \ + $(OBJDIR)/MidiOutputController_a68d4623.o \ + $(OBJDIR)/Osc_433b9284.o \ + $(OBJDIR)/OscMidiConverter_75608f25.o \ + $(OBJDIR)/PianoKey_1afca9bb.o \ + $(OBJDIR)/PianoKeyboard_f097ab55.o \ + $(OBJDIR)/PianoKeyCalibrator_6932659c.o \ + $(OBJDIR)/PianoPedal_34544d96.o \ + $(OBJDIR)/TouchkeyDevice_be3b7a9b.o \ + $(OBJDIR)/MainApplicationController_90b344b4.o \ + $(OBJDIR)/Main_90ebc5c2.o \ + $(OBJDIR)/BinaryData_ce4232d4.o \ + $(OBJDIR)/juce_audio_basics_5460bccb.o \ + $(OBJDIR)/juce_audio_devices_44d00ac9.o \ + $(OBJDIR)/juce_audio_formats_73515469.o \ + $(OBJDIR)/juce_core_5f5a3bad.o \ + $(OBJDIR)/juce_data_structures_7e517fa9.o \ + $(OBJDIR)/juce_events_88dd09a1.o \ + $(OBJDIR)/juce_graphics_29b23085.o \ + $(OBJDIR)/juce_gui_basics_a9efcd81.o \ + $(OBJDIR)/juce_gui_extra_a9396b49.o \ + $(OBJDIR)/juce_opengl_492531cd.o \ + +.PHONY: clean + +$(OUTDIR)/$(TARGET): $(OBJECTS) $(LDDEPS) $(RESOURCES) + @echo Linking TouchKeys + -@mkdir -p $(BINDIR) + -@mkdir -p $(LIBDIR) + -@mkdir -p $(OUTDIR) + @$(BLDCMD) + +clean: + @echo Cleaning TouchKeys + -@rm -f $(OUTDIR)/$(TARGET) + -@rm -rf $(OBJDIR)/* + -@rm -rf $(OBJDIR) + +strip: + @echo Stripping TouchKeys + -@strip --strip-unneeded $(OUTDIR)/$(TARGET) + +$(OBJDIR)/MainWindow_ca618186.o: ../../Source/GUI/MainWindow.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling MainWindow.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/KeyboardZoneComponent_fd0d7a77.o: ../../Source/GUI/KeyboardZoneComponent.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling KeyboardZoneComponent.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/ControlWindowMainComponent_c67f9014.o: ../../Source/GUI/ControlWindowMainComponent.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling ControlWindowMainComponent.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/MappingListComponent_402cf84e.o: ../../Source/GUI/MappingListComponent.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling MappingListComponent.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/MappingListItem_7a9eebac.o: ../../Source/GUI/MappingListItem.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling MappingListItem.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyVibratoMappingShortEditor_27ad15dd.o: ../../Source/Mappings/Vibrato/TouchkeyVibratoMappingShortEditor.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyVibratoMappingShortEditor.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyVibratoMapping_ea5c5156.o: ../../Source/Mappings/Vibrato/TouchkeyVibratoMapping.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyVibratoMapping.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyVibratoMappingFactory_f90040de.o: ../../Source/Mappings/Vibrato/TouchkeyVibratoMappingFactory.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyVibratoMappingFactory.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyReleaseAngleMapping_170b0b0a.o: ../../Source/Mappings/ReleaseAngle/TouchkeyReleaseAngleMapping.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyReleaseAngleMapping.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyReleaseAngleMappingFactory_9052f4aa.o: ../../Source/Mappings/ReleaseAngle/TouchkeyReleaseAngleMappingFactory.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyReleaseAngleMappingFactory.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyPitchBendMappingShortEditor_6afc649d.o: ../../Source/Mappings/PitchBend/TouchkeyPitchBendMappingShortEditor.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyPitchBendMappingShortEditor.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyPitchBendMapping_78aba96.o: ../../Source/Mappings/PitchBend/TouchkeyPitchBendMapping.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyPitchBendMapping.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyPitchBendMappingFactory_9fc4ef9e.o: ../../Source/Mappings/PitchBend/TouchkeyPitchBendMappingFactory.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyPitchBendMappingFactory.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyOnsetAngleMapping_a77ca3ca.o: ../../Source/Mappings/OnsetAngle/TouchkeyOnsetAngleMapping.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyOnsetAngleMapping.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyOnsetAngleMappingFactory_6a4803ea.o: ../../Source/Mappings/OnsetAngle/TouchkeyOnsetAngleMappingFactory.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyOnsetAngleMappingFactory.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyMultiFingerTriggerMapping_f7bfe8a.o: ../../Source/Mappings/MultiFingerTrigger/TouchkeyMultiFingerTriggerMapping.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyMultiFingerTriggerMapping.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyMultiFingerTriggerMappingFactory_e811112a.o: ../../Source/Mappings/MultiFingerTrigger/TouchkeyMultiFingerTriggerMappingFactory.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyMultiFingerTriggerMappingFactory.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyKeyDivisionMapping_cea38eb0.o: ../../Source/Mappings/KeyDivision/TouchkeyKeyDivisionMapping.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyKeyDivisionMapping.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyKeyDivisionMappingFactory_33b42a44.o: ../../Source/Mappings/KeyDivision/TouchkeyKeyDivisionMappingFactory.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyKeyDivisionMappingFactory.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyControlMappingShortEditor_993f27a5.o: ../../Source/Mappings/Control/TouchkeyControlMappingShortEditor.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyControlMappingShortEditor.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyControlMapping_1e638c8e.o: ../../Source/Mappings/Control/TouchkeyControlMapping.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyControlMapping.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyControlMappingFactory_1db276a6.o: ../../Source/Mappings/Control/TouchkeyControlMappingFactory.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyControlMappingFactory.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/MappingScheduler_3b3284f8.o: ../../Source/Mappings/MappingScheduler.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling MappingScheduler.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyBaseMapping_d96a411c.o: ../../Source/Mappings/TouchkeyBaseMapping.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyBaseMapping.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/Mapping_57653e8d.o: ../../Source/Mappings/Mapping.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling Mapping.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/MappingFactorySplitter_9525552e.o: ../../Source/Mappings/MappingFactorySplitter.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling MappingFactorySplitter.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/MIDIKeyPositionMapping_750093d2.o: ../../Source/Mappings/MIDIKeyPositionMapping.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling MIDIKeyPositionMapping.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/MRPMapping_742529ce.o: ../../Source/Mappings/MRPMapping.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling MRPMapping.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/KeyboardDisplay_d9f334cf.o: ../../Source/Display/KeyboardDisplay.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling KeyboardDisplay.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/KeyPositionGraphDisplay_5606e2d0.o: ../../Source/Display/KeyPositionGraphDisplay.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling KeyPositionGraphDisplay.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/RawSensorDisplay_f15a0e36.o: ../../Source/Display/RawSensorDisplay.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling RawSensorDisplay.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/IIRFilter_c9874248.o: ../../Source/Utility/IIRFilter.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling IIRFilter.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/Scheduler_5d9eed19.o: ../../Source/Utility/Scheduler.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling Scheduler.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TimerNode_477a3545.o: ../../Source/Utility/TimerNode.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TimerNode.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TimestampSynchronizer_df7831b6.o: ../../Source/Utility/TimestampSynchronizer.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TimestampSynchronizer.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/Trigger_66a771d6.o: ../../Source/Utility/Trigger.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling Trigger.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/MidiKeyboardSegment_e1be9d70.o: ../../Source/TouchKeys/MidiKeyboardSegment.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling MidiKeyboardSegment.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/KeyIdleDetector_2efa023e.o: ../../Source/TouchKeys/KeyIdleDetector.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling KeyIdleDetector.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/KeyPositionTracker_4c4c0dd5.o: ../../Source/TouchKeys/KeyPositionTracker.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling KeyPositionTracker.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/LogPlayback_1debad04.o: ../../Source/TouchKeys/LogPlayback.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling LogPlayback.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/MidiInputController_1864322a.o: ../../Source/TouchKeys/MidiInputController.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling MidiInputController.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/MidiOutputController_a68d4623.o: ../../Source/TouchKeys/MidiOutputController.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling MidiOutputController.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/Osc_433b9284.o: ../../Source/TouchKeys/Osc.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling Osc.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/OscMidiConverter_75608f25.o: ../../Source/TouchKeys/OscMidiConverter.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling OscMidiConverter.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/PianoKey_1afca9bb.o: ../../Source/TouchKeys/PianoKey.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling PianoKey.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/PianoKeyboard_f097ab55.o: ../../Source/TouchKeys/PianoKeyboard.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling PianoKeyboard.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/PianoKeyCalibrator_6932659c.o: ../../Source/TouchKeys/PianoKeyCalibrator.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling PianoKeyCalibrator.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/PianoPedal_34544d96.o: ../../Source/TouchKeys/PianoPedal.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling PianoPedal.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyDevice_be3b7a9b.o: ../../Source/TouchKeys/TouchkeyDevice.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyDevice.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/MainApplicationController_90b344b4.o: ../../Source/MainApplicationController.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling MainApplicationController.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling Main.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/BinaryData_ce4232d4.o: ../../JuceLibraryCode/BinaryData.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling BinaryData.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_audio_basics_5460bccb.o: ../../../juce/modules/juce_audio_basics/juce_audio_basics.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_audio_basics.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_audio_devices_44d00ac9.o: ../../../juce/modules/juce_audio_devices/juce_audio_devices.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_audio_devices.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_audio_formats_73515469.o: ../../../juce/modules/juce_audio_formats/juce_audio_formats.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_audio_formats.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_core_5f5a3bad.o: ../../../juce/modules/juce_core/juce_core.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_core.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_data_structures_7e517fa9.o: ../../../juce/modules/juce_data_structures/juce_data_structures.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_data_structures.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_events_88dd09a1.o: ../../../juce/modules/juce_events/juce_events.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_events.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_graphics_29b23085.o: ../../../juce/modules/juce_graphics/juce_graphics.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_graphics.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_gui_basics_a9efcd81.o: ../../../juce/modules/juce_gui_basics/juce_gui_basics.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_gui_basics.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_gui_extra_a9396b49.o: ../../../juce/modules/juce_gui_extra/juce_gui_extra.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_gui_extra.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_opengl_492531cd.o: ../../../juce/modules/juce_opengl/juce_opengl.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_opengl.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +-include $(OBJECTS:%.o=%.d) diff -r 000000000000 -r 3580ffe87dc8 Builds/Linux32/Makefile --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Builds/Linux32/Makefile Mon Nov 11 18:19:35 2013 +0000 @@ -0,0 +1,444 @@ +# Automatically generated makefile, created by the Introjucer +# Don't edit this file! Your changes will be overwritten when you re-save the Introjucer project! + +# (this disables dependency generation if multiple architectures are set) +DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD) + +ifndef CONFIG + CONFIG=Debug +endif + +ifeq ($(CONFIG),Debug) + BINDIR := build + LIBDIR := build + OBJDIR := build/intermediate/Debug + OUTDIR := build + + ifeq ($(TARGET_ARCH),) + TARGET_ARCH := -march=native + endif + + CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_BCF8FE09=1" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../juce/modules + CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 -m32 + CXXFLAGS += $(CFLAGS) + LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt -L/usr/lib/i386-linux-gnu -L/usr/lib/i386-linux-gnu/mesa -m32 /usr/local/lib/liblo32.a + LDDEPS := + RESFLAGS := -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_BCF8FE09=1" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../juce/modules + TARGET := TouchKeys + BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) +endif + +ifeq ($(CONFIG),Release) + BINDIR := build + LIBDIR := build + OBJDIR := build/intermediate/Release + OUTDIR := build + + ifeq ($(TARGET_ARCH),) + TARGET_ARCH := -march=native + endif + + CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_BCF8FE09=1" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../juce/modules + CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -Os -m32 + CXXFLAGS += $(CFLAGS) + LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt -L/usr/lib/i386-linux-gnu -L/usr/lib/i386-linux-gnu/mesa -m32 /usr/local/lib/liblo32.a + LDDEPS := + RESFLAGS := -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_BCF8FE09=1" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../juce/modules + TARGET := TouchKeys + BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) +endif + +OBJECTS := \ + $(OBJDIR)/MainWindow_ca618186.o \ + $(OBJDIR)/KeyboardZoneComponent_fd0d7a77.o \ + $(OBJDIR)/ControlWindowMainComponent_c67f9014.o \ + $(OBJDIR)/MappingListComponent_402cf84e.o \ + $(OBJDIR)/MappingListItem_7a9eebac.o \ + $(OBJDIR)/TouchkeyVibratoMappingShortEditor_27ad15dd.o \ + $(OBJDIR)/TouchkeyVibratoMapping_ea5c5156.o \ + $(OBJDIR)/TouchkeyVibratoMappingFactory_f90040de.o \ + $(OBJDIR)/TouchkeyReleaseAngleMapping_170b0b0a.o \ + $(OBJDIR)/TouchkeyReleaseAngleMappingFactory_9052f4aa.o \ + $(OBJDIR)/TouchkeyPitchBendMappingShortEditor_6afc649d.o \ + $(OBJDIR)/TouchkeyPitchBendMapping_78aba96.o \ + $(OBJDIR)/TouchkeyPitchBendMappingFactory_9fc4ef9e.o \ + $(OBJDIR)/TouchkeyOnsetAngleMapping_a77ca3ca.o \ + $(OBJDIR)/TouchkeyOnsetAngleMappingFactory_6a4803ea.o \ + $(OBJDIR)/TouchkeyMultiFingerTriggerMapping_f7bfe8a.o \ + $(OBJDIR)/TouchkeyMultiFingerTriggerMappingFactory_e811112a.o \ + $(OBJDIR)/TouchkeyKeyDivisionMapping_cea38eb0.o \ + $(OBJDIR)/TouchkeyKeyDivisionMappingFactory_33b42a44.o \ + $(OBJDIR)/TouchkeyControlMappingShortEditor_993f27a5.o \ + $(OBJDIR)/TouchkeyControlMapping_1e638c8e.o \ + $(OBJDIR)/TouchkeyControlMappingFactory_1db276a6.o \ + $(OBJDIR)/MappingScheduler_3b3284f8.o \ + $(OBJDIR)/TouchkeyBaseMapping_d96a411c.o \ + $(OBJDIR)/Mapping_57653e8d.o \ + $(OBJDIR)/MappingFactorySplitter_9525552e.o \ + $(OBJDIR)/MIDIKeyPositionMapping_750093d2.o \ + $(OBJDIR)/MRPMapping_742529ce.o \ + $(OBJDIR)/KeyboardDisplay_d9f334cf.o \ + $(OBJDIR)/KeyPositionGraphDisplay_5606e2d0.o \ + $(OBJDIR)/RawSensorDisplay_f15a0e36.o \ + $(OBJDIR)/IIRFilter_c9874248.o \ + $(OBJDIR)/Scheduler_5d9eed19.o \ + $(OBJDIR)/TimerNode_477a3545.o \ + $(OBJDIR)/TimestampSynchronizer_df7831b6.o \ + $(OBJDIR)/Trigger_66a771d6.o \ + $(OBJDIR)/MidiKeyboardSegment_e1be9d70.o \ + $(OBJDIR)/KeyIdleDetector_2efa023e.o \ + $(OBJDIR)/KeyPositionTracker_4c4c0dd5.o \ + $(OBJDIR)/LogPlayback_1debad04.o \ + $(OBJDIR)/MidiInputController_1864322a.o \ + $(OBJDIR)/MidiOutputController_a68d4623.o \ + $(OBJDIR)/Osc_433b9284.o \ + $(OBJDIR)/OscMidiConverter_75608f25.o \ + $(OBJDIR)/PianoKey_1afca9bb.o \ + $(OBJDIR)/PianoKeyboard_f097ab55.o \ + $(OBJDIR)/PianoKeyCalibrator_6932659c.o \ + $(OBJDIR)/PianoPedal_34544d96.o \ + $(OBJDIR)/TouchkeyDevice_be3b7a9b.o \ + $(OBJDIR)/MainApplicationController_90b344b4.o \ + $(OBJDIR)/Main_90ebc5c2.o \ + $(OBJDIR)/BinaryData_ce4232d4.o \ + $(OBJDIR)/juce_audio_basics_5460bccb.o \ + $(OBJDIR)/juce_audio_devices_44d00ac9.o \ + $(OBJDIR)/juce_audio_formats_73515469.o \ + $(OBJDIR)/juce_core_5f5a3bad.o \ + $(OBJDIR)/juce_data_structures_7e517fa9.o \ + $(OBJDIR)/juce_events_88dd09a1.o \ + $(OBJDIR)/juce_graphics_29b23085.o \ + $(OBJDIR)/juce_gui_basics_a9efcd81.o \ + $(OBJDIR)/juce_gui_extra_a9396b49.o \ + $(OBJDIR)/juce_opengl_492531cd.o \ + +.PHONY: clean + +$(OUTDIR)/$(TARGET): $(OBJECTS) $(LDDEPS) $(RESOURCES) + @echo Linking TouchKeys + -@mkdir -p $(BINDIR) + -@mkdir -p $(LIBDIR) + -@mkdir -p $(OUTDIR) + @$(BLDCMD) + +clean: + @echo Cleaning TouchKeys + -@rm -f $(OUTDIR)/$(TARGET) + -@rm -rf $(OBJDIR)/* + -@rm -rf $(OBJDIR) + +strip: + @echo Stripping TouchKeys + -@strip --strip-unneeded $(OUTDIR)/$(TARGET) + +$(OBJDIR)/MainWindow_ca618186.o: ../../Source/GUI/MainWindow.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling MainWindow.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/KeyboardZoneComponent_fd0d7a77.o: ../../Source/GUI/KeyboardZoneComponent.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling KeyboardZoneComponent.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/ControlWindowMainComponent_c67f9014.o: ../../Source/GUI/ControlWindowMainComponent.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling ControlWindowMainComponent.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/MappingListComponent_402cf84e.o: ../../Source/GUI/MappingListComponent.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling MappingListComponent.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/MappingListItem_7a9eebac.o: ../../Source/GUI/MappingListItem.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling MappingListItem.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyVibratoMappingShortEditor_27ad15dd.o: ../../Source/Mappings/Vibrato/TouchkeyVibratoMappingShortEditor.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyVibratoMappingShortEditor.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyVibratoMapping_ea5c5156.o: ../../Source/Mappings/Vibrato/TouchkeyVibratoMapping.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyVibratoMapping.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyVibratoMappingFactory_f90040de.o: ../../Source/Mappings/Vibrato/TouchkeyVibratoMappingFactory.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyVibratoMappingFactory.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyReleaseAngleMapping_170b0b0a.o: ../../Source/Mappings/ReleaseAngle/TouchkeyReleaseAngleMapping.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyReleaseAngleMapping.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyReleaseAngleMappingFactory_9052f4aa.o: ../../Source/Mappings/ReleaseAngle/TouchkeyReleaseAngleMappingFactory.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyReleaseAngleMappingFactory.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyPitchBendMappingShortEditor_6afc649d.o: ../../Source/Mappings/PitchBend/TouchkeyPitchBendMappingShortEditor.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyPitchBendMappingShortEditor.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyPitchBendMapping_78aba96.o: ../../Source/Mappings/PitchBend/TouchkeyPitchBendMapping.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyPitchBendMapping.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyPitchBendMappingFactory_9fc4ef9e.o: ../../Source/Mappings/PitchBend/TouchkeyPitchBendMappingFactory.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyPitchBendMappingFactory.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyOnsetAngleMapping_a77ca3ca.o: ../../Source/Mappings/OnsetAngle/TouchkeyOnsetAngleMapping.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyOnsetAngleMapping.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyOnsetAngleMappingFactory_6a4803ea.o: ../../Source/Mappings/OnsetAngle/TouchkeyOnsetAngleMappingFactory.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyOnsetAngleMappingFactory.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyMultiFingerTriggerMapping_f7bfe8a.o: ../../Source/Mappings/MultiFingerTrigger/TouchkeyMultiFingerTriggerMapping.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyMultiFingerTriggerMapping.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyMultiFingerTriggerMappingFactory_e811112a.o: ../../Source/Mappings/MultiFingerTrigger/TouchkeyMultiFingerTriggerMappingFactory.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyMultiFingerTriggerMappingFactory.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyKeyDivisionMapping_cea38eb0.o: ../../Source/Mappings/KeyDivision/TouchkeyKeyDivisionMapping.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyKeyDivisionMapping.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyKeyDivisionMappingFactory_33b42a44.o: ../../Source/Mappings/KeyDivision/TouchkeyKeyDivisionMappingFactory.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyKeyDivisionMappingFactory.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyControlMappingShortEditor_993f27a5.o: ../../Source/Mappings/Control/TouchkeyControlMappingShortEditor.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyControlMappingShortEditor.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyControlMapping_1e638c8e.o: ../../Source/Mappings/Control/TouchkeyControlMapping.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyControlMapping.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyControlMappingFactory_1db276a6.o: ../../Source/Mappings/Control/TouchkeyControlMappingFactory.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyControlMappingFactory.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/MappingScheduler_3b3284f8.o: ../../Source/Mappings/MappingScheduler.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling MappingScheduler.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyBaseMapping_d96a411c.o: ../../Source/Mappings/TouchkeyBaseMapping.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyBaseMapping.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/Mapping_57653e8d.o: ../../Source/Mappings/Mapping.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling Mapping.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/MappingFactorySplitter_9525552e.o: ../../Source/Mappings/MappingFactorySplitter.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling MappingFactorySplitter.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/MIDIKeyPositionMapping_750093d2.o: ../../Source/Mappings/MIDIKeyPositionMapping.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling MIDIKeyPositionMapping.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/MRPMapping_742529ce.o: ../../Source/Mappings/MRPMapping.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling MRPMapping.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/KeyboardDisplay_d9f334cf.o: ../../Source/Display/KeyboardDisplay.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling KeyboardDisplay.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/KeyPositionGraphDisplay_5606e2d0.o: ../../Source/Display/KeyPositionGraphDisplay.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling KeyPositionGraphDisplay.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/RawSensorDisplay_f15a0e36.o: ../../Source/Display/RawSensorDisplay.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling RawSensorDisplay.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/IIRFilter_c9874248.o: ../../Source/Utility/IIRFilter.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling IIRFilter.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/Scheduler_5d9eed19.o: ../../Source/Utility/Scheduler.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling Scheduler.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TimerNode_477a3545.o: ../../Source/Utility/TimerNode.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TimerNode.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TimestampSynchronizer_df7831b6.o: ../../Source/Utility/TimestampSynchronizer.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TimestampSynchronizer.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/Trigger_66a771d6.o: ../../Source/Utility/Trigger.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling Trigger.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/MidiKeyboardSegment_e1be9d70.o: ../../Source/TouchKeys/MidiKeyboardSegment.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling MidiKeyboardSegment.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/KeyIdleDetector_2efa023e.o: ../../Source/TouchKeys/KeyIdleDetector.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling KeyIdleDetector.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/KeyPositionTracker_4c4c0dd5.o: ../../Source/TouchKeys/KeyPositionTracker.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling KeyPositionTracker.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/LogPlayback_1debad04.o: ../../Source/TouchKeys/LogPlayback.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling LogPlayback.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/MidiInputController_1864322a.o: ../../Source/TouchKeys/MidiInputController.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling MidiInputController.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/MidiOutputController_a68d4623.o: ../../Source/TouchKeys/MidiOutputController.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling MidiOutputController.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/Osc_433b9284.o: ../../Source/TouchKeys/Osc.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling Osc.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/OscMidiConverter_75608f25.o: ../../Source/TouchKeys/OscMidiConverter.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling OscMidiConverter.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/PianoKey_1afca9bb.o: ../../Source/TouchKeys/PianoKey.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling PianoKey.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/PianoKeyboard_f097ab55.o: ../../Source/TouchKeys/PianoKeyboard.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling PianoKeyboard.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/PianoKeyCalibrator_6932659c.o: ../../Source/TouchKeys/PianoKeyCalibrator.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling PianoKeyCalibrator.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/PianoPedal_34544d96.o: ../../Source/TouchKeys/PianoPedal.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling PianoPedal.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TouchkeyDevice_be3b7a9b.o: ../../Source/TouchKeys/TouchkeyDevice.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling TouchkeyDevice.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/MainApplicationController_90b344b4.o: ../../Source/MainApplicationController.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling MainApplicationController.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling Main.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/BinaryData_ce4232d4.o: ../../JuceLibraryCode/BinaryData.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling BinaryData.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_audio_basics_5460bccb.o: ../../../juce/modules/juce_audio_basics/juce_audio_basics.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_audio_basics.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_audio_devices_44d00ac9.o: ../../../juce/modules/juce_audio_devices/juce_audio_devices.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_audio_devices.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_audio_formats_73515469.o: ../../../juce/modules/juce_audio_formats/juce_audio_formats.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_audio_formats.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_core_5f5a3bad.o: ../../../juce/modules/juce_core/juce_core.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_core.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_data_structures_7e517fa9.o: ../../../juce/modules/juce_data_structures/juce_data_structures.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_data_structures.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_events_88dd09a1.o: ../../../juce/modules/juce_events/juce_events.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_events.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_graphics_29b23085.o: ../../../juce/modules/juce_graphics/juce_graphics.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_graphics.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_gui_basics_a9efcd81.o: ../../../juce/modules/juce_gui_basics/juce_gui_basics.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_gui_basics.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_gui_extra_a9396b49.o: ../../../juce/modules/juce_gui_extra/juce_gui_extra.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_gui_extra.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_opengl_492531cd.o: ../../../juce/modules/juce_opengl/juce_opengl.cpp + -@mkdir -p $(OBJDIR) + @echo "Compiling juce_opengl.cpp" + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +-include $(OBJECTS:%.o=%.d) diff -r 000000000000 -r 3580ffe87dc8 Builds/MacOSX/TouchKeys.xcodeproj/project.pbxproj --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Builds/MacOSX/TouchKeys.xcodeproj/project.pbxproj Mon Nov 11 18:19:35 2013 +0000 @@ -0,0 +1,2271 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + + 4078BC0343B4DFB6F9816BD5 = { isa = PBXBuildFile; fileRef = 1A9B74287470FD1944123E26; }; + 40646EF394D495C462E347F1 = { isa = PBXBuildFile; fileRef = 7964EC4FD4E5860CF85469A6; }; + 63154C3F49640855CA89CB9B = { isa = PBXBuildFile; fileRef = DF870F58DC21D8A032AE4D03; }; + 2985C4121F644A826FC287AE = { isa = PBXBuildFile; fileRef = 5BC3C1BA534425DE943BCA22; }; + 1A30D1B8526CD3E1AB79110C = { isa = PBXBuildFile; fileRef = 9DEC36437E061C38E07BAC75; }; + 30C3A2842A3EA665887A7CC8 = { isa = PBXBuildFile; fileRef = 20BA5BC9BB93D1041D8F4C73; }; + FA58715E881C0982BF8E2FCD = { isa = PBXBuildFile; fileRef = 3DFDF8135971D71B8889E84B; }; + 853FB568630B7E920E30E0EE = { isa = PBXBuildFile; fileRef = 6606A45FBF92643F83F78021; }; + C3F1C6DDE2A344D657712C75 = { isa = PBXBuildFile; fileRef = 7BBF33364D3B65730CEAD5F1; }; + BADB457195977038A2BF09A4 = { isa = PBXBuildFile; fileRef = F07FDD832AD269D84A40DAF1; }; + D05E8CCFCD6C2065EDE16DD6 = { isa = PBXBuildFile; fileRef = 5EDDEE17AD20B0C75DF6DF12; }; + C5AF559E110329B9AB35DFCB = { isa = PBXBuildFile; fileRef = 283FF67DF916C041CE17E244; }; + 2B9C3DDF5283C5EFF1BC924A = { isa = PBXBuildFile; fileRef = 55010ADB4310C9FF2CD11D52; }; + B8EE628D560C9E474792128A = { isa = PBXBuildFile; fileRef = 7B9FCDB57204606F4A7FDAD4; }; + 1A85E080026A7A0DF0521F27 = { isa = PBXBuildFile; fileRef = 0C9554C2C80A409B9486F101; }; + CD4F6761CDABB836FBADCD80 = { isa = PBXBuildFile; fileRef = E9E267650C0230141C461A4B; }; + 2378CAD03E1C80BF0AB4AAF5 = { isa = PBXBuildFile; fileRef = BA2C6578AE3F6F2B82656B4F; }; + 998FC7F9C3E8817D8C617391 = { isa = PBXBuildFile; fileRef = 01A3C0D5D0FDDA38CE02C685; }; + BA527B7D0D87CA5A51EF0D17 = { isa = PBXBuildFile; fileRef = 119E49FA10A84C0AED360605; }; + B3470DC81675B3D490C27CFD = { isa = PBXBuildFile; fileRef = DE6A8EF9DD39C0260ADD27B0; }; + 5F6E53AD9FA709E7146A1CE6 = { isa = PBXBuildFile; fileRef = 001418B9F0352A2205CDAA96; }; + BE6B15C227B2372ACE438EC8 = { isa = PBXBuildFile; fileRef = 5DE5675862714BFEFF231027; }; + 13F86C7E26FBFDC47423240D = { isa = PBXBuildFile; fileRef = 91AADDB641BD3F80E9011C65; }; + 0F57CE11332869C573488442 = { isa = PBXBuildFile; fileRef = 25875D01B837C34F01EF8C2F; }; + 0B15BCE918EEF2CCA0AEA482 = { isa = PBXBuildFile; fileRef = F89BC7CFD2C4BC07D31DFA04; }; + C07B7D53DED5507FB71A2686 = { isa = PBXBuildFile; fileRef = 77D10D2C57D62DF18D3CE862; }; + 310713516FB26036F129F9B4 = { isa = PBXBuildFile; fileRef = F63EB3D2F75EC36B2FBFCDBA; }; + 8FBDE042A025832E21E6F8F4 = { isa = PBXBuildFile; fileRef = F0B30E3238044CF573DFF44D; }; + BB430A3EF5BE9214B1032DDD = { isa = PBXBuildFile; fileRef = 0A767ED26F1C6854875AC0DB; }; + 3BF49ACD7F6CF44414FB5922 = { isa = PBXBuildFile; fileRef = 879BA74FC54118852648722F; }; + 222381A07D9F4638272B89EF = { isa = PBXBuildFile; fileRef = 77BA61409E24E072AF1E5493; }; + 12510AB6876158F044CAAD7E = { isa = PBXBuildFile; fileRef = 56EF3900C63C00BED0E574D0; }; + 82DFEC1C0E1F1717ECFF46EF = { isa = PBXBuildFile; fileRef = FEB3A41EEF9A3958E3FD1BDB; }; + 2C4FDCA1E6A76506B05D37DD = { isa = PBXBuildFile; fileRef = 0D2D03F562749971564F7773; }; + 6EA3790C69AED29FC35AED08 = { isa = PBXBuildFile; fileRef = 8ADF834CD28E353B15D200C7; }; + 3EDCB8DC01EBCD339722C0B2 = { isa = PBXBuildFile; fileRef = AF8EFA9540E8757E68922E40; }; + 562759D28DA0813B92BD7FEA = { isa = PBXBuildFile; fileRef = F55D37A9CFDBAA406A95E743; }; + 3BCBF5B38F6056D9FE683B0E = { isa = PBXBuildFile; fileRef = A6B7D7B713F01F521411F2D3; }; + 0178872E496D3D0EAC27AE7E = { isa = PBXBuildFile; fileRef = 7A002562A60140BEE1434ECF; }; + 9A83928E33C71ADCAE448871 = { isa = PBXBuildFile; fileRef = 61A7ED9BEB8538FEE656E782; }; + 8B6C8D046A64E8F9A7A8A8A1 = { isa = PBXBuildFile; fileRef = C2762F0E696E257A507595A5; }; + 04F763266CBDE1710ECDFBD1 = { isa = PBXBuildFile; fileRef = C2D442FDEECC11C9BD433379; }; + CAC2A323D111092F0ACA800D = { isa = PBXBuildFile; fileRef = 3FDF3206CD46EA7C0063B295; }; + 0719C742CAB513BC7D9133DE = { isa = PBXBuildFile; fileRef = 849B3D266CC18D432434AA9B; }; + 0A1BCC62A1753D24D01A3DAD = { isa = PBXBuildFile; fileRef = 8776329610ED3DF98A95ECD2; }; + 4CF799D17D4295DD3F50720D = { isa = PBXBuildFile; fileRef = DBDB2CBDB7DD3D7B9713D4C5; }; + 0209777D29C1CF3F89FBF254 = { isa = PBXBuildFile; fileRef = 32302BE7297F75C489B19CED; }; + FF44DE892280A28F67C7BFDD = { isa = PBXBuildFile; fileRef = 9D627B675B5F55FD5A203346; }; + 274E9F984B46BBDBF714003B = { isa = PBXBuildFile; fileRef = 4BFF669E2B855A7A576E8CE2; }; + BA8E15B815FCC3C7830C972E = { isa = PBXBuildFile; fileRef = 68A9E6D3AA5B1E80308A5400; }; + 1AEFD23290811D94FB840E74 = { isa = PBXBuildFile; fileRef = 05A3090F3BD2DAA8D6DF24B6; }; + 5E0BF5CD6F5667E5A0C37651 = { isa = PBXBuildFile; fileRef = B7497C02BCD8C01280DA32B2; }; + 64F134ABEC30EA26D5473D34 = { isa = PBXBuildFile; fileRef = 5A7A1022A19D6DD162029AA6; }; + 53E5A8D73743B36758DA4DA4 = { isa = PBXBuildFile; fileRef = E38A23A31D7FB8E86851666B; }; + FF8B3EA68E9255C839ABA3F8 = { isa = PBXBuildFile; fileRef = FD7BF71F32457EFD941519E0; }; + 384EC6340C198680B166A0A6 = { isa = PBXBuildFile; fileRef = F0F457D2A8E7EC3DE1CADC28; }; + BA1577A5D5903CDC1BCFAB06 = { isa = PBXBuildFile; fileRef = 178A386F6FE9CCEAD2ACEA3A; }; + B98E92A0AAE513E18217810A = { isa = PBXBuildFile; fileRef = 183D81D9E023859A3E499243; }; + A526339B267B82C838D28D09 = { isa = PBXBuildFile; fileRef = 9C0B692CB270EFA9DB7FA4D7; }; + 5A0669E021464C9CF05C2B95 = { isa = PBXBuildFile; fileRef = 83AE3F5E0B7AE5D956415BCC; }; + 1FDA7AEB064670D6A6B1E5A9 = { isa = PBXBuildFile; fileRef = 67B1EA88315E60BDDEF78A9B; }; + E1B3A08EBE789ABADC0C025E = { isa = PBXBuildFile; fileRef = 76824FE677CBBE997E6B95AC; }; + 9261B00A2C5E7187B5C04319 = { isa = PBXBuildFile; fileRef = 26646EAE80CBDF47DADEE278; }; + 2FB5C71C709DD3E25C6CC541 = { isa = PBXBuildFile; fileRef = 638AC9A213FFAFC1647D3C78; }; + B74FCF91BC16623F02F69D86 = { isa = PBXBuildFile; fileRef = E5F79D13171E0F28729529DD; }; + 8394B72883ACCC5CB2A13768 = { isa = PBXBuildFile; fileRef = FBD0A4CCB4013E8B8AA653E2; }; + 5492D1307B92C3F63B9EDF09 = { isa = PBXBuildFile; fileRef = BA641413905F4396597FDF78; }; + E810879EB266795004A4C22F = { isa = PBXBuildFile; fileRef = 23E81037EDC6EBA8A4145A66; }; + F68DD438981A3BA730A626CB = { isa = PBXBuildFile; fileRef = 75A33066D1965DA1A60D41B0; }; + C4A41EFBBFFC08EC2CC75C92 = { isa = PBXBuildFile; fileRef = 5D2E40E321F1A2340FB42A05; }; + C7C650DB080B12CD2552EC3B = { isa = PBXBuildFile; fileRef = 5FBE2E2D25174AF84CAB065C; }; + F44235BA2064C306B810CE62 = { isa = PBXBuildFile; fileRef = 91157413471588AA9BBA75D7; }; + 80917C6EBEAD3F8DF0C99FD3 = { isa = PBXBuildFile; fileRef = 007AEF97B8A9D76A0A2D83FC; }; + 52944F2FAC4CEBFB17FB29E4 = { isa = PBXBuildFile; fileRef = 76566BC742E2FB1F6FDC34F5; }; + D88B64FB4066D913682D5BA3 = { isa = PBXBuildFile; fileRef = 8CA21E32C250B212F23EA8AF; }; + 001418B9F0352A2205CDAA96 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = TouchkeyVibratoMappingFactory.cpp; path = ../../Source/Mappings/Vibrato/TouchkeyVibratoMappingFactory.cpp; sourceTree = "SOURCE_ROOT"; }; + 006F973FB5A7E243D7293AA6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Justification.h"; path = "../../../juce/modules/juce_graphics/placement/juce_Justification.h"; sourceTree = "SOURCE_ROOT"; }; + 007AEF97B8A9D76A0A2D83FC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_gui_basics.mm"; path = "../../../juce/modules/juce_gui_basics/juce_gui_basics.mm"; sourceTree = "SOURCE_ROOT"; }; + 012940D53AFFB34E7515BA0D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Colours.h"; path = "../../../juce/modules/juce_graphics/colour/juce_Colours.h"; sourceTree = "SOURCE_ROOT"; }; + 018F96DE10ED9ABDBBE82873 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarButton.h"; path = "../../../juce/modules/juce_gui_basics/buttons/juce_ToolbarButton.h"; sourceTree = "SOURCE_ROOT"; }; + 01A3C0D5D0FDDA38CE02C685 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MappingListItem.cpp; path = ../../Source/GUI/MappingListItem.cpp; sourceTree = "SOURCE_ROOT"; }; + 021AF0A3F7822EA031EE86A1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedValueSet.h"; path = "../../../juce/modules/juce_core/containers/juce_NamedValueSet.h"; sourceTree = "SOURCE_ROOT"; }; + 021EAA7FB2AF6D2F19996A6D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiTouchMapper.h"; path = "../../../juce/modules/juce_gui_basics/native/juce_MultiTouchMapper.h"; sourceTree = "SOURCE_ROOT"; }; + 022C3AEC95B6F5C85673E1B9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LocalisedStrings.cpp"; path = "../../../juce/modules/juce_core/text/juce_LocalisedStrings.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0241560E0F43D8F64C26A397 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSource.h"; path = "../../../juce/modules/juce_audio_basics/sources/juce_AudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 026C6BCB121C0BB163DE9F06 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedValueSet.cpp"; path = "../../../juce/modules/juce_core/containers/juce_NamedValueSet.cpp"; sourceTree = "SOURCE_ROOT"; }; + 02AFF71371B8781BB9914E14 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiFile.cpp"; path = "../../../juce/modules/juce_audio_basics/midi/juce_MidiFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + 02F82B7A43C1B002A55C8645 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Identifier.cpp"; path = "../../../juce/modules/juce_core/text/juce_Identifier.cpp"; sourceTree = "SOURCE_ROOT"; }; + 035E2239C42EE699D96A082C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Files.cpp"; path = "../../../juce/modules/juce_core/native/juce_linux_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0390578A9F961786A2E91266 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBoundsConstrainer.cpp"; path = "../../../juce/modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 03944A3451E95129394471C3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_ios.h"; path = "../../../juce/modules/juce_opengl/native/juce_OpenGL_ios.h"; sourceTree = "SOURCE_ROOT"; }; + 03FD289F5F76E8E1644CE8AB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableCornerComponent.cpp"; path = "../../../juce/modules/juce_gui_basics/layout/juce_ResizableCornerComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0436257DE1C3D66483C147A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChannelRemappingAudioSource.cpp"; path = "../../../juce/modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 04B1699E31A404BB6C7E4D93 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PopupMenu.cpp"; path = "../../../juce/modules/juce_gui_basics/menus/juce_PopupMenu.cpp"; sourceTree = "SOURCE_ROOT"; }; + 05A3090F3BD2DAA8D6DF24B6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = KeyIdleDetector.cpp; path = ../../Source/TouchKeys/KeyIdleDetector.cpp; sourceTree = "SOURCE_ROOT"; }; + 06111D0738FEE481A9A0212B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_posix_NamedPipe.cpp"; path = "../../../juce/modules/juce_core/native/juce_posix_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; }; + 06462D0D2425BAF020472691 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NSViewComponent.h"; path = "../../../juce/modules/juce_gui_extra/embedding/juce_NSViewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 070312CF9497593454CB10C1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OutputStream.cpp"; path = "../../../juce/modules/juce_core/streams/juce_OutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0738BD96A6B0D207B2656964 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicLibrary.h"; path = "../../../juce/modules/juce_core/threads/juce_DynamicLibrary.h"; sourceTree = "SOURCE_ROOT"; }; + 0754AE37A2269C502075E46B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponent.mm"; path = "../../../juce/modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + 077F55BB50ECFDEA65F71DF6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBoundsConstrainer.h"; path = "../../../juce/modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.h"; sourceTree = "SOURCE_ROOT"; }; + 07D76602E68244DA48A496C3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextInputTarget.h"; path = "../../../juce/modules/juce_gui_basics/keyboard/juce_TextInputTarget.h"; sourceTree = "SOURCE_ROOT"; }; + 07F3126C9F1842B069672882 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TouchkeyMultiFingerTriggerMappingFactory.h; path = ../../Source/Mappings/MultiFingerTrigger/TouchkeyMultiFingerTriggerMappingFactory.h; sourceTree = "SOURCE_ROOT"; }; + 0838AE8A8B614755B5F31595 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ColourSelector.cpp"; path = "../../../juce/modules/juce_gui_extra/misc/juce_ColourSelector.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0900F84A5A94029BABD4F3D0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Windowing.cpp"; path = "../../../juce/modules/juce_gui_basics/native/juce_android_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; + 091527B6BC312B2295FA565A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MainApplicationController.h; path = ../../Source/MainApplicationController.h; sourceTree = "SOURCE_ROOT"; }; + 091FB91B90B6E8C215BB309B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableObjectResizer.cpp"; path = "../../../juce/modules/juce_gui_basics/layout/juce_StretchableObjectResizer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0955F3A0CD0B38AA81A04149 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Trigger.h; path = ../../Source/Utility/Trigger.h; sourceTree = "SOURCE_ROOT"; }; + 09995800CE4E0E3EF8C11EF8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AsyncUpdater.h"; path = "../../../juce/modules/juce_events/broadcasters/juce_AsyncUpdater.h"; sourceTree = "SOURCE_ROOT"; }; + 099F9D0711B4409A70F97168 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ListBox.cpp"; path = "../../../juce/modules/juce_gui_basics/widgets/juce_ListBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + 09AFFC227A610CE469F29590 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableListBox.cpp"; path = "../../../juce/modules/juce_gui_basics/widgets/juce_TableListBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + 09DB2381F553CE3AE1190F3C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResamplingAudioSource.cpp"; path = "../../../juce/modules/juce_audio_basics/sources/juce_ResamplingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 09E18B170D35E65AABCC3C90 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatReader.cpp"; path = "../../../juce/modules/juce_audio_formats/format/juce_AudioFormatReader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0A106C01DDEECF61E2D7F51E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Image.h"; path = "../../../juce/modules/juce_graphics/images/juce_Image.h"; sourceTree = "SOURCE_ROOT"; }; + 0A486C6A586B60525C9BAB59 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MappingListItem.h; path = ../../Source/GUI/MappingListItem.h; sourceTree = "SOURCE_ROOT"; }; + 0A5EA54B877D84C939B6F6D7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TouchkeyControlMappingShortEditor.h; path = ../../Source/Mappings/Control/TouchkeyControlMappingShortEditor.h; sourceTree = "SOURCE_ROOT"; }; + 0A767ED26F1C6854875AC0DB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = TouchkeyMultiFingerTriggerMapping.cpp; path = ../../Source/Mappings/MultiFingerTrigger/TouchkeyMultiFingerTriggerMapping.cpp; sourceTree = "SOURCE_ROOT"; }; + 0A982DF57CE775D8F05AD78B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TouchkeyMultiFingerTriggerMapping.h; path = ../../Source/Mappings/MultiFingerTrigger/TouchkeyMultiFingerTriggerMapping.h; sourceTree = "SOURCE_ROOT"; }; + 0A9A3C2E3F533AB2FD618DD9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputSource.h"; path = "../../../juce/modules/juce_core/streams/juce_InputSource.h"; sourceTree = "SOURCE_ROOT"; }; + 0B15F842C077C9765284446A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TouchkeyPitchBendMapping.h; path = ../../Source/Mappings/PitchBend/TouchkeyPitchBendMapping.h; sourceTree = "SOURCE_ROOT"; }; + 0C516DEBD52810652C1B4F87 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PreferencesPanel.cpp"; path = "../../../juce/modules/juce_gui_extra/misc/juce_PreferencesPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0C9554C2C80A409B9486F101 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = KeyboardZoneComponent.cpp; path = ../../Source/GUI/KeyboardZoneComponent.cpp; sourceTree = "SOURCE_ROOT"; }; + 0CCFFE7CFFC883C81D7D9441 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Application.cpp"; path = "../../../juce/modules/juce_gui_basics/application/juce_Application.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0D2D03F562749971564F7773 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = TouchkeyControlMapping.cpp; path = ../../Source/Mappings/Control/TouchkeyControlMapping.cpp; sourceTree = "SOURCE_ROOT"; }; + 0D5355C05137A13E0F9C3577 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextButton.cpp"; path = "../../../juce/modules/juce_gui_basics/buttons/juce_TextButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0DD2016AB1A5661593E69C5A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FilePreviewComponent.h"; path = "../../../juce/modules/juce_gui_basics/filebrowser/juce_FilePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 0E1393D568B97F822EC620E2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsList.h"; path = "../../../juce/modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.h"; sourceTree = "SOURCE_ROOT"; }; + 0E25A6A37156A0D0F5063494 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TouchkeyDevice.h; path = ../../Source/TouchKeys/TouchkeyDevice.h; sourceTree = "SOURCE_ROOT"; }; + 0F654BA2689F1C8D04DE1864 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Messaging.cpp"; path = "../../../juce/modules/juce_events/native/juce_win32_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0F78459420EA5BD1915A0A8A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Uuid.cpp"; path = "../../../juce/modules/juce_core/misc/juce_Uuid.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0FD7CCA5B5517C3CF7C2CCA9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageManager.h"; path = "../../../juce/modules/juce_events/messages/juce_MessageManager.h"; sourceTree = "SOURCE_ROOT"; }; + 0FF0FEC5D686372FEF413FF4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessageCollector.h"; path = "../../../juce/modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.h"; sourceTree = "SOURCE_ROOT"; }; + 0FF3EA4E9EBFF0FE96DF62E2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CustomTypeface.cpp"; path = "../../../juce/modules/juce_graphics/fonts/juce_CustomTypeface.cpp"; sourceTree = "SOURCE_ROOT"; }; + 102054A65E6A2C9E170F6C29 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_basics.h"; path = "../../../juce/modules/juce_audio_basics/juce_audio_basics.h"; sourceTree = "SOURCE_ROOT"; }; + 10674C5BE3CBDC1812E82AFF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormat.cpp"; path = "../../../juce/modules/juce_audio_formats/format/juce_AudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 106C5E90696E6F1CC04EF896 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TimeSliceThread.h"; path = "../../../juce/modules/juce_core/threads/juce_TimeSliceThread.h"; sourceTree = "SOURCE_ROOT"; }; + 10E1A1A46BECA9BD86A43829 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandTarget.cpp"; path = "../../../juce/modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1144B3B90A0E8142CCBC8097 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPressMappingSet.cpp"; path = "../../../juce/modules/juce_gui_basics/commands/juce_KeyPressMappingSet.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1167AC1646F727991030443D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ShapeButton.cpp"; path = "../../../juce/modules/juce_gui_basics/buttons/juce_ShapeButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 119E49FA10A84C0AED360605 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = TouchkeyVibratoMappingShortEditor.cpp; path = ../../Source/Mappings/Vibrato/TouchkeyVibratoMappingShortEditor.cpp; sourceTree = "SOURCE_ROOT"; }; + 11DF49143B2E40D5E8AB074D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryOutputStream.cpp"; path = "../../../juce/modules/juce_core/streams/juce_MemoryOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 11E656746B2425A8E99C2B1F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLTexture.h"; path = "../../../juce/modules/juce_opengl/opengl/juce_OpenGLTexture.h"; sourceTree = "SOURCE_ROOT"; }; + 11E71A3ED179AF068E6D8A9D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSampleBuffer.cpp"; path = "../../../juce/modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 121CF611E14695D8AC8D4AB3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableEdgeComponent.h"; path = "../../../juce/modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 1256FA69F41BA1090B5C1A16 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyListener.h"; path = "../../../juce/modules/juce_gui_basics/keyboard/juce_KeyListener.h"; sourceTree = "SOURCE_ROOT"; }; + 1291BBAFB29453DAF847D561 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_EdgeTable.h"; path = "../../../juce/modules/juce_graphics/geometry/juce_EdgeTable.h"; sourceTree = "SOURCE_ROOT"; }; + 12EF0EF35B5F1C68F6576FBF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OptionalScopedPointer.h"; path = "../../../juce/modules/juce_core/memory/juce_OptionalScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; + 133CEEB518DC3E0387DDDAAA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Time.cpp"; path = "../../../juce/modules/juce_core/time/juce_Time.cpp"; sourceTree = "SOURCE_ROOT"; }; + 13C0DA6E480188AAA99E4283 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PathStrokeType.h"; path = "../../../juce/modules/juce_graphics/geometry/juce_PathStrokeType.h"; sourceTree = "SOURCE_ROOT"; }; + 13F3F140177E3986BCBC12EB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AiffAudioFormat.cpp"; path = "../../../juce/modules/juce_audio_formats/codecs/juce_AiffAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 143C31FDEB6ACD8A02F6F861 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseListener.cpp"; path = "../../../juce/modules/juce_gui_basics/mouse/juce_MouseListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + 158AE747154A3811549CECBB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableImage.cpp"; path = "../../../juce/modules/juce_gui_basics/drawables/juce_DrawableImage.cpp"; sourceTree = "SOURCE_ROOT"; }; + 158BA823A17ACCB4E6826026 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LeakedObjectDetector.h"; path = "../../../juce/modules/juce_core/memory/juce_LeakedObjectDetector.h"; sourceTree = "SOURCE_ROOT"; }; + 1596880D3FEA7FDC94B7D71A = { isa = PBXFileReference; lastKnownFileType = image.png; name = "tk-icon-128.png"; path = "../../Resources/tk-icon-128.png"; sourceTree = "SOURCE_ROOT"; }; + 16BA68E8565D501ED6085968 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_WindowsMediaAudioFormat.cpp"; path = "../../../juce/modules/juce_audio_formats/codecs/juce_WindowsMediaAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 172BE377D36CE8F6915DECC0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormat.h"; path = "../../../juce/modules/juce_audio_formats/format/juce_AudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 176B62DE2BBD7453ADE87482 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatWriter.cpp"; path = "../../../juce/modules/juce_audio_formats/format/juce_AudioFormatWriter.cpp"; sourceTree = "SOURCE_ROOT"; }; + 178A386F6FE9CCEAD2ACEA3A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = OscMidiConverter.cpp; path = ../../Source/TouchKeys/OscMidiConverter.cpp; sourceTree = "SOURCE_ROOT"; }; + 179FD2EA9B129C845CB4DCA7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedXLock.h"; path = "../../../juce/modules/juce_events/native/juce_ScopedXLock.h"; sourceTree = "SOURCE_ROOT"; }; + 17C5876FBE7CBA0393D71B51 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileOutputStream.cpp"; path = "../../../juce/modules/juce_core/files/juce_FileOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 17FC0AB961883C8A5AB58D30 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Path.cpp"; path = "../../../juce/modules/juce_graphics/geometry/juce_Path.cpp"; sourceTree = "SOURCE_ROOT"; }; + 182845A3D1FBA30CEF9E0DA2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToggleButton.cpp"; path = "../../../juce/modules/juce_gui_basics/buttons/juce_ToggleButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 183D81D9E023859A3E499243 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = PianoKey.cpp; path = ../../Source/TouchKeys/PianoKey.cpp; sourceTree = "SOURCE_ROOT"; }; + 189E1AEC6F95E5DF992C910D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentListener.cpp"; path = "../../../juce/modules/juce_gui_basics/components/juce_ComponentListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + 19241B0EBAE0BB8B2B78C861 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ByteOrder.h"; path = "../../../juce/modules/juce_core/memory/juce_ByteOrder.h"; sourceTree = "SOURCE_ROOT"; }; + 196DBB540F88035040706D73 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Component.h"; path = "../../../juce/modules/juce_gui_basics/components/juce_Component.h"; sourceTree = "SOURCE_ROOT"; }; + 19ECE65352DCC21F539ADFDE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ModalComponentManager.h"; path = "../../../juce/modules/juce_gui_basics/components/juce_ModalComponentManager.h"; sourceTree = "SOURCE_ROOT"; }; + 1A4837FC0BE8B165FAFD999A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandID.h"; path = "../../../juce/modules/juce_gui_basics/commands/juce_ApplicationCommandID.h"; sourceTree = "SOURCE_ROOT"; }; + 1A67F2C4654C988FD919A612 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TopLevelWindow.cpp"; path = "../../../juce/modules/juce_gui_basics/windows/juce_TopLevelWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1A96C45EFEBAAD6DA351F6E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BubbleComponent.cpp"; path = "../../../juce/modules/juce_gui_basics/misc/juce_BubbleComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1A9B74287470FD1944123E26 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; + 1B21A0523192F8E570190A8D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Sampler.cpp"; path = "../../../juce/modules/juce_audio_formats/sampler/juce_Sampler.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1B47C271A0750D61976A387B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadPool.cpp"; path = "../../../juce/modules/juce_core/threads/juce_ThreadPool.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1BAF3D8502C6D43B2CA5CF8A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SubregionStream.h"; path = "../../../juce/modules/juce_core/streams/juce_SubregionStream.h"; sourceTree = "SOURCE_ROOT"; }; + 1C1E6DBAE366BBF6B93C6231 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TreeView.h"; path = "../../../juce/modules/juce_gui_basics/widgets/juce_TreeView.h"; sourceTree = "SOURCE_ROOT"; }; + 1C2CDFD33D4679F91D0FBE57 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Drawable.cpp"; path = "../../../juce/modules/juce_gui_basics/drawables/juce_Drawable.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1C3B338D3F36E6ADB417204D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Array.h"; path = "../../../juce/modules/juce_core/containers/juce_Array.h"; sourceTree = "SOURCE_ROOT"; }; + 1C69D05010E094E31BACC6AA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilterAudioSource.cpp"; path = "../../../juce/modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1CD21A58F0E15076E1027B2E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageEffectFilter.h"; path = "../../../juce/modules/juce_graphics/effects/juce_ImageEffectFilter.h"; sourceTree = "SOURCE_ROOT"; }; + 1D41477949C13C4A9C7F0536 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JSON.cpp"; path = "../../../juce/modules/juce_core/javascript/juce_JSON.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1D633C390EEF3C24FE44FF27 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Threads.cpp"; path = "../../../juce/modules/juce_core/native/juce_android_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1DCB093C0AA6B07F8846CE5F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AiffAudioFormat.h"; path = "../../../juce/modules/juce_audio_formats/codecs/juce_AiffAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 1DCDF6FC01C7DBDDA7D7AFEA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TouchkeyPitchBendMappingShortEditor.h; path = ../../Source/Mappings/PitchBend/TouchkeyPitchBendMappingShortEditor.h; sourceTree = "SOURCE_ROOT"; }; + 1DD5318B2EC76DCE6B3F715C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AbstractFifo.h"; path = "../../../juce/modules/juce_core/containers/juce_AbstractFifo.h"; sourceTree = "SOURCE_ROOT"; }; + 1EDD89AA0A5497A9AC685E41 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TimestampSynchronizer.h; path = ../../Source/Utility/TimestampSynchronizer.h; sourceTree = "SOURCE_ROOT"; }; + 1F101BE64CA15979764736A3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlDocument.cpp"; path = "../../../juce/modules/juce_core/xml/juce_XmlDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1F4C487096EFF581BE969D75 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListBox.h"; path = "../../../juce/modules/juce_gui_basics/widgets/juce_ListBox.h"; sourceTree = "SOURCE_ROOT"; }; + 1F61F541D6F0256136E4F37B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLPixelFormat.cpp"; path = "../../../juce/modules/juce_opengl/opengl/juce_OpenGLPixelFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1F76B83EE0CFAA4761604B94 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallbackMessage.h"; path = "../../../juce/modules/juce_events/messages/juce_CallbackMessage.h"; sourceTree = "SOURCE_ROOT"; }; + 1FA09EB888ECFBF0424174B2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlowEffect.cpp"; path = "../../../juce/modules/juce_graphics/effects/juce_GlowEffect.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1FADCBF1B7451DE704A9E5DE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Desktop.cpp"; path = "../../../juce/modules/juce_gui_basics/components/juce_Desktop.cpp"; sourceTree = "SOURCE_ROOT"; }; + 1FB429A8B8F85E403CA12650 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativePointPath.h"; path = "../../../juce/modules/juce_gui_basics/positioning/juce_RelativePointPath.h"; sourceTree = "SOURCE_ROOT"; }; + 206A731B98F5606ED6B6F951 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemAudioVolume.h"; path = "../../../juce/modules/juce_audio_devices/audio_io/juce_SystemAudioVolume.h"; sourceTree = "SOURCE_ROOT"; }; + 20BA5BC9BB93D1041D8F4C73 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; }; + 213F98F1913ED639AE895474 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel_V2.h"; path = "../../../juce/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h"; sourceTree = "SOURCE_ROOT"; }; + 216C43FE64E807DFDDE137BB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SystemTrayIconComponent.cpp"; path = "../../../juce/modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 21761A1F87F6E65A6DDF9AF3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AttributedString.cpp"; path = "../../../juce/modules/juce_graphics/fonts/juce_AttributedString.cpp"; sourceTree = "SOURCE_ROOT"; }; + 226A0BD39983B2132DDBD732 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertiesFile.cpp"; path = "../../../juce/modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + 22A640D49DAB8EC000C48C37 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BigInteger.cpp"; path = "../../../juce/modules/juce_core/maths/juce_BigInteger.cpp"; sourceTree = "SOURCE_ROOT"; }; + 22C2B16BCB6F4CA405233C04 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSampleBuffer.h"; path = "../../../juce/modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h"; sourceTree = "SOURCE_ROOT"; }; + 23E81037EDC6EBA8A4145A66 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_formats.mm"; path = "../../../juce/modules/juce_audio_formats/juce_audio_formats.mm"; sourceTree = "SOURCE_ROOT"; }; + 24BBD2EEE5685F7BF08524DC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NewLine.h"; path = "../../../juce/modules/juce_core/text/juce_NewLine.h"; sourceTree = "SOURCE_ROOT"; }; + 25875D01B837C34F01EF8C2F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = TouchkeyPitchBendMappingShortEditor.cpp; path = ../../Source/Mappings/PitchBend/TouchkeyPitchBendMappingShortEditor.cpp; sourceTree = "SOURCE_ROOT"; }; + 25E54DE680924E94F31F7727 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferingAudioSource.cpp"; path = "../../../juce/modules/juce_audio_basics/sources/juce_BufferingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 265BDA429218A7AE3E5608CD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TopLevelWindow.h"; path = "../../../juce/modules/juce_gui_basics/windows/juce_TopLevelWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 26646EAE80CBDF47DADEE278 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MainApplicationController.cpp; path = ../../Source/MainApplicationController.cpp; sourceTree = "SOURCE_ROOT"; }; + 267AFF098D4880F1941B5201 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLPixelFormat.h"; path = "../../../juce/modules/juce_opengl/opengl/juce_OpenGLPixelFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 27034337E8AAB0ED01CA45E9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioIODevice.cpp"; path = "../../../juce/modules/juce_audio_devices/audio_io/juce_AudioIODevice.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2710E4CE033A62C80F13B7F2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MACAddress.cpp"; path = "../../../juce/modules/juce_core/network/juce_MACAddress.cpp"; sourceTree = "SOURCE_ROOT"; }; + 277CDB2F2319FD585A04F00D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Registry.cpp"; path = "../../../juce/modules/juce_core/native/juce_win32_Registry.cpp"; sourceTree = "SOURCE_ROOT"; }; + 27829CDA49F7FB509A7B5A1C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertySet.h"; path = "../../../juce/modules/juce_core/containers/juce_PropertySet.h"; sourceTree = "SOURCE_ROOT"; }; + 283FF67DF916C041CE17E244 = { isa = PBXFileReference; lastKnownFileType = file.nib; name = RecentFilesMenuTemplate.nib; path = RecentFilesMenuTemplate.nib; sourceTree = "SOURCE_ROOT"; }; + 2846850D6D318CBE5662505E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DragAndDropContainer.cpp"; path = "../../../juce/modules/juce_gui_basics/mouse/juce_DragAndDropContainer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 286E94AA7893E151671EFACC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentMovementWatcher.cpp"; path = "../../../juce/modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.cpp"; sourceTree = "SOURCE_ROOT"; }; + 28A31552383A162DC607EAA0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemComponent.h"; path = "../../../juce/modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 29057C0D0A47537D39F20C9C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessageSequence.cpp"; path = "../../../juce/modules/juce_audio_basics/midi/juce_MidiMessageSequence.cpp"; sourceTree = "SOURCE_ROOT"; }; + 290AE3B1231EFE4B43011C38 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Desktop.h"; path = "../../../juce/modules/juce_gui_basics/components/juce_Desktop.h"; sourceTree = "SOURCE_ROOT"; }; + 293AA70C67056ED558221FCD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TouchkeyControlMapping.h; path = ../../Source/Mappings/Control/TouchkeyControlMapping.h; sourceTree = "SOURCE_ROOT"; }; + 2A64318B395562B54E8B978D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferedInputStream.cpp"; path = "../../../juce/modules/juce_core/streams/juce_BufferedInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2AB205503EDC14D07B0CDFA7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TouchkeyBaseMapping.h; path = ../../Source/Mappings/TouchkeyBaseMapping.h; sourceTree = "SOURCE_ROOT"; }; + 2B3A1D8D1A77B39FFBA39EC8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlElement.cpp"; path = "../../../juce/modules/juce_core/xml/juce_XmlElement.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2B4B4811F717681D3CEA3C06 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TooltipWindow.cpp"; path = "../../../juce/modules/juce_gui_basics/windows/juce_TooltipWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2B545CB34532967184BB979C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropTarget.h"; path = "../../../juce/modules/juce_gui_basics/mouse/juce_DragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; + 2C07FA9C85BA4477E7E732BA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileInputStream.cpp"; path = "../../../juce/modules/juce_core/files/juce_FileInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2C144159C82D78DDD70C4105 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DialogWindow.cpp"; path = "../../../juce/modules/juce_gui_basics/windows/juce_DialogWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2C14D0A7927411AE5E37293F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_HyperlinkButton.cpp"; path = "../../../juce/modules/juce_gui_basics/buttons/juce_HyperlinkButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2C65A282C235450315BFA7B7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileSearchPath.h"; path = "../../../juce/modules/juce_core/files/juce_FileSearchPath.h"; sourceTree = "SOURCE_ROOT"; }; + 2C8F38028F686154B4760DC4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FloatVectorOperations.cpp"; path = "../../../juce/modules/juce_audio_basics/buffers/juce_FloatVectorOperations.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2CBEEB3DDE7452AFAA496A53 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_gui_extra.h"; path = "../../../juce/modules/juce_gui_extra/juce_gui_extra.h"; sourceTree = "SOURCE_ROOT"; }; + 2CEB8C23A0AE5989D02CA488 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DropShadowEffect.cpp"; path = "../../../juce/modules/juce_graphics/effects/juce_DropShadowEffect.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2CFC336DBA57275297F8966D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeTokeniser.h"; path = "../../../juce/modules/juce_gui_extra/code_editor/juce_CodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; + 2D8CAD385E5572C8E790B98E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WebBrowserComponent.h"; path = "../../../juce/modules/juce_gui_extra/misc/juce_WebBrowserComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 2DA07ABEBAE78CBA17AD496C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_ObjCHelpers.h"; path = "../../../juce/modules/juce_core/native/juce_osx_ObjCHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + 2DB8DD2C8970470DD6C94355 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IIRFilterAudioSource.h"; path = "../../../juce/modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 2DF4F5F337BF6C45F00C2921 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF32.h"; path = "../../../juce/modules/juce_core/text/juce_CharPointer_UTF32.h"; sourceTree = "SOURCE_ROOT"; }; + 2E2351F96F9FEDFB06036B45 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarModel.cpp"; path = "../../../juce/modules/juce_gui_basics/menus/juce_MenuBarModel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 2E8E49CCC7727B5DBE866711 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MACAddress.h"; path = "../../../juce/modules/juce_core/network/juce_MACAddress.h"; sourceTree = "SOURCE_ROOT"; }; + 2ED84C912889F7D0DA71BC31 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ElementComparator.h"; path = "../../../juce/modules/juce_core/containers/juce_ElementComparator.h"; sourceTree = "SOURCE_ROOT"; }; + 2EFF4ABBAACFB3611A738940 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Socket.h"; path = "../../../juce/modules/juce_core/network/juce_Socket.h"; sourceTree = "SOURCE_ROOT"; }; + 2F46807285895EC6D5DDA8E3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionBroadcaster.h"; path = "../../../juce/modules/juce_events/broadcasters/juce_ActionBroadcaster.h"; sourceTree = "SOURCE_ROOT"; }; + 2F5F168DE166CF81749EDE32 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PerformanceCounter.h"; path = "../../../juce/modules/juce_core/time/juce_PerformanceCounter.h"; sourceTree = "SOURCE_ROOT"; }; + 2F6C87AE0D32BF2600B951B2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipWindow.h"; path = "../../../juce/modules/juce_gui_basics/windows/juce_TooltipWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 2FEDA73E284BA8DD022BD7E0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextPropertyComponent.h"; path = "../../../juce/modules/juce_gui_basics/properties/juce_TextPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 3014C4D84D91D187C834D4D9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel_V1.cpp"; path = "../../../juce/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V1.cpp"; sourceTree = "SOURCE_ROOT"; }; + 30787E67674DB9065149BCF9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReadWriteLock.h"; path = "../../../juce/modules/juce_core/threads/juce_ReadWriteLock.h"; sourceTree = "SOURCE_ROOT"; }; + 30B72EA5CC760FDC1D68A1D5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UndoManager.h"; path = "../../../juce/modules/juce_data_structures/undomanager/juce_UndoManager.h"; sourceTree = "SOURCE_ROOT"; }; + 30BABDF73CAF7CC000817364 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsDisplayComponent.cpp"; path = "../../../juce/modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 31F03E9FBCC8C55504B03502 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemTrayIcon.cpp"; path = "../../../juce/modules/juce_gui_extra/native/juce_linux_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3206DFDE463E6BD093541953 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CoreAudioFormat.cpp"; path = "../../../juce/modules/juce_audio_formats/codecs/juce_CoreAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 32302BE7297F75C489B19CED = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = TimerNode.cpp; path = ../../Source/Utility/TimerNode.cpp; sourceTree = "SOURCE_ROOT"; }; + 32C7614FDFD477BFC45C7A05 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PlatformDefs.h"; path = "../../../juce/modules/juce_core/system/juce_PlatformDefs.h"; sourceTree = "SOURCE_ROOT"; }; + 33486E83204368CF282A73F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MP3AudioFormat.h"; path = "../../../juce/modules/juce_audio_formats/codecs/juce_MP3AudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 335BCF6E40FD20E31CFFCCE4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeDocument.h"; path = "../../../juce/modules/juce_gui_extra/code_editor/juce_CodeDocument.h"; sourceTree = "SOURCE_ROOT"; }; + 336105F72E57EF2412E2D362 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../juce/modules/juce_gui_basics/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 34F26056D1BF4026D3CA3DFB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableHeaderComponent.cpp"; path = "../../../juce/modules/juce_gui_basics/widgets/juce_TableHeaderComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 34F6C441AE3E69C11C988F58 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Toolbar.cpp"; path = "../../../juce/modules/juce_gui_basics/widgets/juce_Toolbar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 350BF12B579608D2FBAD6AFC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_FileChooser.cpp"; path = "../../../juce/modules/juce_gui_basics/native/juce_android_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 350CAF816F5658A6F048333B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageButton.cpp"; path = "../../../juce/modules/juce_gui_basics/buttons/juce_ImageButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3513EF2F4FDDA4BB173BA3D7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_WebBrowserComponent.cpp"; path = "../../../juce/modules/juce_gui_extra/native/juce_win32_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 354D2DA37EA34EFC3121E523 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessageCollector.cpp"; path = "../../../juce/modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.cpp"; sourceTree = "SOURCE_ROOT"; }; + 35660D5C79544657DACE648E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextDiff.cpp"; path = "../../../juce/modules/juce_core/text/juce_TextDiff.cpp"; sourceTree = "SOURCE_ROOT"; }; + 35C231F40757E0C7B7BE74A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Files.cpp"; path = "../../../juce/modules/juce_core/native/juce_android_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + 369F9740183012CD9E400C49 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioIODeviceType.cpp"; path = "../../../juce/modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.cpp"; sourceTree = "SOURCE_ROOT"; }; + 36F8B4676EACEAFCED73F5A0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_AudioCDBurner.cpp"; path = "../../../juce/modules/juce_audio_devices/native/juce_win32_AudioCDBurner.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3721BA53A6BAB64AFCE77C35 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_String.cpp"; path = "../../../juce/modules/juce_core/text/juce_String.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3738D2B9C5D2ACBA23938BD6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedArray.h"; path = "../../../juce/modules/juce_core/containers/juce_ReferenceCountedArray.h"; sourceTree = "SOURCE_ROOT"; }; + 37D9F61856238A58FBAF151C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharacterFunctions.h"; path = "../../../juce/modules/juce_core/text/juce_CharacterFunctions.h"; sourceTree = "SOURCE_ROOT"; }; + 3851FE5AD54A9688682B21E9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableWindow.h"; path = "../../../juce/modules/juce_gui_basics/windows/juce_ResizableWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 3882417E73E282C25A526368 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringArray.cpp"; path = "../../../juce/modules/juce_core/text/juce_StringArray.cpp"; sourceTree = "SOURCE_ROOT"; }; + 390F98D3E43D2BC741B08D5B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryOutputStream.h"; path = "../../../juce/modules/juce_core/streams/juce_MemoryOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 394A564D17F7FC26D45DD047 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBasedDocument.cpp"; path = "../../../juce/modules/juce_gui_extra/documents/juce_FileBasedDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; + 396B15B57E8411B6131561B1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiOutput.h"; path = "../../../juce/modules/juce_audio_devices/midi_io/juce_MidiOutput.h"; sourceTree = "SOURCE_ROOT"; }; + 399F9880BC2270EF7FD9BFA1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GroupComponent.h"; path = "../../../juce/modules/juce_gui_basics/layout/juce_GroupComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 39A2849DABF6CBB1F554501D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GZIPDecompressorInputStream.cpp"; path = "../../../juce/modules/juce_core/zip/juce_GZIPDecompressorInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 39A9EBDF9FF3E480CD2B43EB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLShaderProgram.cpp"; path = "../../../juce/modules/juce_opengl/opengl/juce_OpenGLShaderProgram.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3B0FB247B6CA70098D56B522 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferedInputStream.h"; path = "../../../juce/modules/juce_core/streams/juce_BufferedInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 3BA1D64E8B635B5EFBD8C416 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TouchkeyReleaseAngleMappingFactory.h; path = ../../Source/Mappings/ReleaseAngle/TouchkeyReleaseAngleMappingFactory.h; sourceTree = "SOURCE_ROOT"; }; + 3C49A71B859640FC4A39B8F5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnection.cpp"; path = "../../../juce/modules/juce_events/interprocess/juce_InterprocessConnection.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3CC9C766A7CA3465A75C1264 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ModalComponentManager.cpp"; path = "../../../juce/modules/juce_gui_basics/components/juce_ModalComponentManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3D220516F82AD82C888C6765 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = KeyboardDisplay.h; path = ../../Source/Display/KeyboardDisplay.h; sourceTree = "SOURCE_ROOT"; }; + 3D29826EB4A5B899C3624500 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ConcertinaPanel.h"; path = "../../../juce/modules/juce_gui_basics/layout/juce_ConcertinaPanel.h"; sourceTree = "SOURCE_ROOT"; }; + 3D2DF36E0CC698317233B864 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Label.cpp"; path = "../../../juce/modules/juce_gui_basics/widgets/juce_Label.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3D8CB5CFD9B2031C3E016A0B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PathIterator.h"; path = "../../../juce/modules/juce_graphics/geometry/juce_PathIterator.h"; sourceTree = "SOURCE_ROOT"; }; + 3D9C5122C7D61F188F36817E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Process.h"; path = "../../../juce/modules/juce_core/threads/juce_Process.h"; sourceTree = "SOURCE_ROOT"; }; + 3DB49071D4E78F56A380391D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioCDReader.cpp"; path = "../../../juce/modules/juce_audio_devices/audio_cd/juce_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3DFDF8135971D71B8889E84B = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = System/Library/Frameworks/DiscRecording.framework; sourceTree = SDKROOT; }; + 3E03094D5D1AC333A39F4B7A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BigInteger.h"; path = "../../../juce/modules/juce_core/maths/juce_BigInteger.h"; sourceTree = "SOURCE_ROOT"; }; + 3F044B1232BF1AD76CF25C05 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringPool.cpp"; path = "../../../juce/modules/juce_core/text/juce_StringPool.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3F12742B404F1BCE9FD1182F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedLock.h"; path = "../../../juce/modules/juce_core/threads/juce_ScopedLock.h"; sourceTree = "SOURCE_ROOT"; }; + 3F55433E0CFB772D4CEC69EA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AsyncUpdater.cpp"; path = "../../../juce/modules/juce_events/broadcasters/juce_AsyncUpdater.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3F8F763B8A07A2EE8D42C0C2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLHelpers.h"; path = "../../../juce/modules/juce_opengl/opengl/juce_OpenGLHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + 3FA6827CE8208A2676F7D89D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLShaderProgram.h"; path = "../../../juce/modules/juce_opengl/opengl/juce_OpenGLShaderProgram.h"; sourceTree = "SOURCE_ROOT"; }; + 3FBF5C96BBAA8C88CB37943C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = KeyboardZoneComponent.h; path = ../../Source/GUI/KeyboardZoneComponent.h; sourceTree = "SOURCE_ROOT"; }; + 3FDF3206CD46EA7C0063B295 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = KeyPositionGraphDisplay.cpp; path = ../../Source/Display/KeyPositionGraphDisplay.cpp; sourceTree = "SOURCE_ROOT"; }; + 4025F5D575B9A5A511EF8F30 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TouchkeyVibratoMapping.h; path = ../../Source/Mappings/Vibrato/TouchkeyVibratoMapping.h; sourceTree = "SOURCE_ROOT"; }; + 40B64B6C8BD06AD2930DA9F0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Value.h"; path = "../../../juce/modules/juce_data_structures/values/juce_Value.h"; sourceTree = "SOURCE_ROOT"; }; + 41D8CD12402ACE94C06C12CF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel_V3.h"; path = "../../../juce/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.h"; sourceTree = "SOURCE_ROOT"; }; + 420CD52BA81E8FA04E73B0A1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentPeer.cpp"; path = "../../../juce/modules/juce_gui_basics/windows/juce_ComponentPeer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4218E86125D6E9C9ACB58741 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_AudioCDReader.cpp"; path = "../../../juce/modules/juce_audio_devices/native/juce_linux_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 42312AF39D46367A8CCAB92F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = OpenGLJuceCanvas.h; path = ../../Source/Display/OpenGLJuceCanvas.h; sourceTree = "SOURCE_ROOT"; }; + 4262B169F606570751DE5855 = { isa = PBXFileReference; lastKnownFileType = image.png; name = "tk-icon-256.png"; path = "../../Resources/tk-icon-256.png"; sourceTree = "SOURCE_ROOT"; }; + 42C6DE63A9107E8D5B543F73 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../juce/modules/juce_data_structures/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 42C95CE7D85568838409D2CF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ProgressBar.h"; path = "../../../juce/modules/juce_gui_basics/widgets/juce_ProgressBar.h"; sourceTree = "SOURCE_ROOT"; }; + 42DE2C4C5791303F70375058 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MidiOutputController.h; path = ../../Source/TouchKeys/MidiOutputController.h; sourceTree = "SOURCE_ROOT"; }; + 435F555EAB5F88A7DE95C8FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Atomic.h"; path = "../../../juce/modules/juce_core/memory/juce_Atomic.h"; sourceTree = "SOURCE_ROOT"; }; + 439AF7EB00EE96C9B8E9B480 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = KeyPositionGraphDisplay.h; path = ../../Source/Display/KeyPositionGraphDisplay.h; sourceTree = "SOURCE_ROOT"; }; + 440B6F250CB865AA74386018 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SpinLock.h"; path = "../../../juce/modules/juce_core/threads/juce_SpinLock.h"; sourceTree = "SOURCE_ROOT"; }; + 44820B2991A9F69F106501EB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertyComponent.h"; path = "../../../juce/modules/juce_gui_basics/properties/juce_PropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 451D1DA2175F20466C358449 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeBroadcaster.h"; path = "../../../juce/modules/juce_events/broadcasters/juce_ChangeBroadcaster.h"; sourceTree = "SOURCE_ROOT"; }; + 4693A834FF8117902FFF4D3F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_String.h"; path = "../../../juce/modules/juce_core/text/juce_String.h"; sourceTree = "SOURCE_ROOT"; }; + 4722FD5DDEA12074E23626F6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChildProcess.cpp"; path = "../../../juce/modules/juce_core/threads/juce_ChildProcess.cpp"; sourceTree = "SOURCE_ROOT"; }; + 47AFF0730B6F48B44D9AF21F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeTime.h"; path = "../../../juce/modules/juce_core/time/juce_RelativeTime.h"; sourceTree = "SOURCE_ROOT"; }; + 47C9F191ACA30DA8866F8162 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferingAudioSource.h"; path = "../../../juce/modules/juce_audio_basics/sources/juce_BufferingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 482B36C5234DB4CED73506B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Timer.cpp"; path = "../../../juce/modules/juce_events/timers/juce_Timer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 486B2D4FE311DCB82E37DF60 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioDataConverters.cpp"; path = "../../../juce/modules/juce_audio_basics/buffers/juce_AudioDataConverters.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4881596CF3AA3B6809FD95FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_CommonFile.cpp"; path = "../../../juce/modules/juce_core/native/juce_linux_CommonFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + 48D74A7F2C32E5ED9838F5FE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TemporaryFile.h"; path = "../../../juce/modules/juce_core/files/juce_TemporaryFile.h"; sourceTree = "SOURCE_ROOT"; }; + 4953D82D7A84A83E3E7572A3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ActionBroadcaster.cpp"; path = "../../../juce/modules/juce_events/broadcasters/juce_ActionBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; }; + 49745E79E63C5B9BC9A57AB1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Windowing.mm"; path = "../../../juce/modules/juce_gui_basics/native/juce_mac_Windowing.mm"; sourceTree = "SOURCE_ROOT"; }; + 4A0BF982E2E874D2FEC6073A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLHelpers.cpp"; path = "../../../juce/modules/juce_opengl/opengl/juce_OpenGLHelpers.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4A136908B5FF7712EBAD9981 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Application.h"; path = "../../../juce/modules/juce_gui_basics/application/juce_Application.h"; sourceTree = "SOURCE_ROOT"; }; + 4A2C4C9905C7DBE7BD7A0A7D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallOutBox.h"; path = "../../../juce/modules/juce_gui_basics/windows/juce_CallOutBox.h"; sourceTree = "SOURCE_ROOT"; }; + 4A75AF43CD5BD452E2B322A0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ProgressBar.cpp"; path = "../../../juce/modules/juce_gui_basics/widgets/juce_ProgressBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4AA95F2942C46275D0CC1206 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Button.cpp"; path = "../../../juce/modules/juce_gui_basics/buttons/juce_Button.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4AD0E0592C453AF63D48A792 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TimerNode.h; path = ../../Source/Utility/TimerNode.h; sourceTree = "SOURCE_ROOT"; }; + 4AF53AC364CD4D92FA9C66B1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RawSensorDisplay.h; path = ../../Source/Display/RawSensorDisplay.h; sourceTree = "SOURCE_ROOT"; }; + 4B5B59C3EB40E81B0EB3FF2A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Scheduler.h; path = ../../Source/Utility/Scheduler.h; sourceTree = "SOURCE_ROOT"; }; + 4B6DD49A71F451207F114891 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarComponent.cpp"; path = "../../../juce/modules/juce_gui_basics/menus/juce_MenuBarComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4B9F0E9662F5974FEB6D3EA6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringRef.h"; path = "../../../juce/modules/juce_core/text/juce_StringRef.h"; sourceTree = "SOURCE_ROOT"; }; + 4BA89F5127922FC8A0D88602 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReverbAudioSource.cpp"; path = "../../../juce/modules/juce_audio_basics/sources/juce_ReverbAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4BF12D55902ABB1FC8FC63AF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileInputStream.h"; path = "../../../juce/modules/juce_core/files/juce_FileInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 4BFF669E2B855A7A576E8CE2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Trigger.cpp; path = ../../Source/Utility/Trigger.cpp; sourceTree = "SOURCE_ROOT"; }; + 4C27098692905309308ADA65 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = KeyIdleDetector.h; path = ../../Source/TouchKeys/KeyIdleDetector.h; sourceTree = "SOURCE_ROOT"; }; + 4C8A9DE41142589CE8A66D22 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableImage.h"; path = "../../../juce/modules/juce_gui_basics/drawables/juce_DrawableImage.h"; sourceTree = "SOURCE_ROOT"; }; + 4CAF6AD5590B3C8C9D2DCA10 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeParallelogram.h"; path = "../../../juce/modules/juce_gui_basics/positioning/juce_RelativeParallelogram.h"; sourceTree = "SOURCE_ROOT"; }; + 4D3486477C93D169F9841EBD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrowButton.h"; path = "../../../juce/modules/juce_gui_basics/buttons/juce_ArrowButton.h"; sourceTree = "SOURCE_ROOT"; }; + 4D6A4F688249F5B876849207 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MessageManager.mm"; path = "../../../juce/modules/juce_events/native/juce_mac_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; }; + 4E546FBB3A7626EFD573D41D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentPeer.h"; path = "../../../juce/modules/juce_gui_basics/windows/juce_ComponentPeer.h"; sourceTree = "SOURCE_ROOT"; }; + 4E7E0F0BE092AB6743B03D43 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiFile.h"; path = "../../../juce/modules/juce_audio_basics/midi/juce_MidiFile.h"; sourceTree = "SOURCE_ROOT"; }; + 4E88EE61D4328B092B1F0BB2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SortedSet.h"; path = "../../../juce/modules/juce_core/containers/juce_SortedSet.h"; sourceTree = "SOURCE_ROOT"; }; + 4EA0B74126E80DFAA6075D51 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Logger.cpp"; path = "../../../juce/modules/juce_core/logging/juce_Logger.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4EF55CBE453A2F06A5880E6C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MP3AudioFormat.cpp"; path = "../../../juce/modules/juce_audio_formats/codecs/juce_MP3AudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4F0FBB923DC40FD7859CA9B6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Time.h"; path = "../../../juce/modules/juce_core/time/juce_Time.h"; sourceTree = "SOURCE_ROOT"; }; + 4F63CAE984068E8493AB1C59 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutResizerBar.h"; path = "../../../juce/modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.h"; sourceTree = "SOURCE_ROOT"; }; + 4FAEFEF7315CD4697A3A4A5F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Button.h"; path = "../../../juce/modules/juce_gui_basics/buttons/juce_Button.h"; sourceTree = "SOURCE_ROOT"; }; + 4FF0EE53340B306B09230CAB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CPlusPlusCodeTokeniser.h"; path = "../../../juce/modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; + 500B161A0A390BE6A7AC6E67 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Viewport.cpp"; path = "../../../juce/modules/juce_gui_basics/layout/juce_Viewport.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5092DF5BA82449512AAA7D7B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_SystemStats.cpp"; path = "../../../juce/modules/juce_core/native/juce_android_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + 50B10AEABDF8CFDB4C1F5198 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarItemPalette.cpp"; path = "../../../juce/modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.cpp"; sourceTree = "SOURCE_ROOT"; }; + 50FBD249C6C5C1B4DBA459E6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF16.h"; path = "../../../juce/modules/juce_core/text/juce_CharPointer_UTF16.h"; sourceTree = "SOURCE_ROOT"; }; + 51824FD31518891951469CBA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Font.h"; path = "../../../juce/modules/juce_graphics/fonts/juce_Font.h"; sourceTree = "SOURCE_ROOT"; }; + 52503B83C3EB95429DBCF2B8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Random.h"; path = "../../../juce/modules/juce_core/maths/juce_Random.h"; sourceTree = "SOURCE_ROOT"; }; + 52FC4A84B75D864E89E3AB5B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Drawable.h"; path = "../../../juce/modules/juce_gui_basics/drawables/juce_Drawable.h"; sourceTree = "SOURCE_ROOT"; }; + 53297CAD72BBB338874C593F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_AudioCDReader.cpp"; path = "../../../juce/modules/juce_audio_devices/native/juce_win32_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 53C317A2BC085C625C1ABB49 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Midi.cpp"; path = "../../../juce/modules/juce_audio_devices/native/juce_linux_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; + 542B60D386C30F602E8F37C7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarItemComponent.cpp"; path = "../../../juce/modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 547C4147F20B76FD1596DF3B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPairArray.h"; path = "../../../juce/modules/juce_core/text/juce_StringPairArray.h"; sourceTree = "SOURCE_ROOT"; }; + 54C9DB3C192D2E3C4BB796F6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RenderingHelpers.h"; path = "../../../juce/modules/juce_graphics/native/juce_RenderingHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + 55010ADB4310C9FF2CD11D52 = { isa = PBXFileReference; lastKnownFileType = file.icns; name = Icon.icns; path = Icon.icns; sourceTree = "SOURCE_ROOT"; }; + 5535E1D2AB0D896D5EA1528C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GroupComponent.cpp"; path = "../../../juce/modules/juce_gui_basics/layout/juce_GroupComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 55614439CEA2AA4C3C83960C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Font.cpp"; path = "../../../juce/modules/juce_graphics/fonts/juce_Font.cpp"; sourceTree = "SOURCE_ROOT"; }; + 558764F1D4A196E74A8B4D47 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextLayout.h"; path = "../../../juce/modules/juce_graphics/fonts/juce_TextLayout.h"; sourceTree = "SOURCE_ROOT"; }; + 55E99E81FC362EA304FEFC7D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PianoKeyCalibrator.h; path = ../../Source/TouchKeys/PianoKeyCalibrator.h; sourceTree = "SOURCE_ROOT"; }; + 560BA4677563ADBFEAA4A9A8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BasicNativeHeaders.h"; path = "../../../juce/modules/juce_core/native/juce_BasicNativeHeaders.h"; sourceTree = "SOURCE_ROOT"; }; + 564725F265FA251EA1E85EFE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ZipFile.cpp"; path = "../../../juce/modules/juce_core/zip/juce_ZipFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + 56EF3900C63C00BED0E574D0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = TouchkeyKeyDivisionMappingFactory.cpp; path = ../../Source/Mappings/KeyDivision/TouchkeyKeyDivisionMappingFactory.cpp; sourceTree = "SOURCE_ROOT"; }; + 57370DDA62616114166E89B2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Image.cpp"; path = "../../../juce/modules/juce_graphics/images/juce_Image.cpp"; sourceTree = "SOURCE_ROOT"; }; + 577688014EC968E5BB50E11B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyPressMappingSet.h"; path = "../../../juce/modules/juce_gui_basics/commands/juce_KeyPressMappingSet.h"; sourceTree = "SOURCE_ROOT"; }; + 57E7CFA95F5E9A5C31E0706A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Synthesiser.h"; path = "../../../juce/modules/juce_audio_basics/synthesisers/juce_Synthesiser.h"; sourceTree = "SOURCE_ROOT"; }; + 585AE1E2582CD19A8F9FE2D2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DropShadower.h"; path = "../../../juce/modules/juce_gui_basics/misc/juce_DropShadower.h"; sourceTree = "SOURCE_ROOT"; }; + 586FCB50DD095947B527E462 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Network.mm"; path = "../../../juce/modules/juce_core/native/juce_mac_Network.mm"; sourceTree = "SOURCE_ROOT"; }; + 588647ADF4EEADF6DD8C573F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Fonts.cpp"; path = "../../../juce/modules/juce_graphics/native/juce_linux_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; + 58E550A1B386C2A56A4E5205 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Misc.cpp"; path = "../../../juce/modules/juce_core/native/juce_android_Misc.cpp"; sourceTree = "SOURCE_ROOT"; }; + 595D9603C966DD7A96601770 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeListener.h"; path = "../../../juce/modules/juce_events/broadcasters/juce_ChangeListener.h"; sourceTree = "SOURCE_ROOT"; }; + 596161CC0A4A8DD05A368B32 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Fonts.cpp"; path = "../../../juce/modules/juce_graphics/native/juce_android_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5A557C5800B7FD7879B89A9A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MathsFunctions.h"; path = "../../../juce/modules/juce_core/maths/juce_MathsFunctions.h"; sourceTree = "SOURCE_ROOT"; }; + 5A740A5459309CC1144016FD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DeletedAtShutdown.h"; path = "../../../juce/modules/juce_events/messages/juce_DeletedAtShutdown.h"; sourceTree = "SOURCE_ROOT"; }; + 5A7A1022A19D6DD162029AA6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = LogPlayback.cpp; path = ../../Source/TouchKeys/LogPlayback.cpp; sourceTree = "SOURCE_ROOT"; }; + 5AA0C6F1D0EEB64916D79A1F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ColourGradient.cpp"; path = "../../../juce/modules/juce_graphics/colour/juce_ColourGradient.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5AA900E1C54219C4371B3907 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Range.h"; path = "../../../juce/modules/juce_core/maths/juce_Range.h"; sourceTree = "SOURCE_ROOT"; }; + 5AAE89A72D91459EB9548A5D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableRectangle.cpp"; path = "../../../juce/modules/juce_gui_basics/drawables/juce_DrawableRectangle.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5AC453F4B30AB8DA51B8B9B0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImagePreviewComponent.h"; path = "../../../juce/modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 5B03F93B4E808E5B42C5F984 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UndoManager.cpp"; path = "../../../juce/modules/juce_data_structures/undomanager/juce_UndoManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5B1EA934207F64017DAEB18F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioCDBurner.h"; path = "../../../juce/modules/juce_audio_devices/audio_cd/juce_AudioCDBurner.h"; sourceTree = "SOURCE_ROOT"; }; + 5B83D18A4AF71418DA5F54F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeParallelogram.cpp"; path = "../../../juce/modules/juce_gui_basics/positioning/juce_RelativeParallelogram.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5B851A07868E688F0C765CA1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadLocalValue.h"; path = "../../../juce/modules/juce_core/threads/juce_ThreadLocalValue.h"; sourceTree = "SOURCE_ROOT"; }; + 5BC3C1BA534425DE943BCA22 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + 5BDDEB249D4D04F0DAAA97B6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FillType.cpp"; path = "../../../juce/modules/juce_graphics/colour/juce_FillType.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5BDFD343F8067BB49E2C2125 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryBlock.h"; path = "../../../juce/modules/juce_core/memory/juce_MemoryBlock.h"; sourceTree = "SOURCE_ROOT"; }; + 5C085DEDBB1A8F755F800922 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TouchkeyBaseMappingFactory.h; path = ../../Source/Mappings/TouchkeyBaseMappingFactory.h; sourceTree = "SOURCE_ROOT"; }; + 5CD67ECB4B41375D889C1A2F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PianoKey.h; path = ../../Source/TouchKeys/PianoKey.h; sourceTree = "SOURCE_ROOT"; }; + 5CFC24DCE2459CF5A80FD766 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedObject.h"; path = "../../../juce/modules/juce_core/memory/juce_ReferenceCountedObject.h"; sourceTree = "SOURCE_ROOT"; }; + 5D1750119D2E86324ED67585 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageListener.h"; path = "../../../juce/modules/juce_events/messages/juce_MessageListener.h"; sourceTree = "SOURCE_ROOT"; }; + 5D2E40E321F1A2340FB42A05 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_data_structures.mm"; path = "../../../juce/modules/juce_data_structures/juce_data_structures.mm"; sourceTree = "SOURCE_ROOT"; }; + 5D5300842AF71C49D1E5EDF5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AnimatedPosition.h"; path = "../../../juce/modules/juce_gui_basics/layout/juce_AnimatedPosition.h"; sourceTree = "SOURCE_ROOT"; }; + 5D9DBA8EC90E8161918F12E0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableListBox.h"; path = "../../../juce/modules/juce_gui_basics/widgets/juce_TableListBox.h"; sourceTree = "SOURCE_ROOT"; }; + 5DE5675862714BFEFF231027 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = TouchkeyReleaseAngleMapping.cpp; path = ../../Source/Mappings/ReleaseAngle/TouchkeyReleaseAngleMapping.cpp; sourceTree = "SOURCE_ROOT"; }; + 5DFC9E79432F0E8B0245B05E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooser.cpp"; path = "../../../juce/modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5E21284BD5A78CCF9533A7CB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicObject.h"; path = "../../../juce/modules/juce_core/containers/juce_DynamicObject.h"; sourceTree = "SOURCE_ROOT"; }; + 5E2C8035BF527680811D1CF5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RecentlyOpenedFilesList.cpp"; path = "../../../juce/modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5E4F05C1C0E47ABAD690E924 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterprocessConnection.h"; path = "../../../juce/modules/juce_events/interprocess/juce_InterprocessConnection.h"; sourceTree = "SOURCE_ROOT"; }; + 5E9303619B553ED5D8014075 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Windowing.cpp"; path = "../../../juce/modules/juce_gui_basics/native/juce_linux_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5EDDEE17AD20B0C75DF6DF12 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; + 5F46502A5D1A44BD738467D4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TreeView.cpp"; path = "../../../juce/modules/juce_gui_basics/widgets/juce_TreeView.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5F9AD4578F56B8BEC2E311C3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_ALSA.cpp"; path = "../../../juce/modules/juce_audio_devices/native/juce_linux_ALSA.cpp"; sourceTree = "SOURCE_ROOT"; }; + 5FBE2E2D25174AF84CAB065C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_events.mm"; path = "../../../juce/modules/juce_events/juce_events.mm"; sourceTree = "SOURCE_ROOT"; }; + 601196F609721F1C314F9F50 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseCursor.cpp"; path = "../../../juce/modules/juce_gui_basics/mouse/juce_MouseCursor.cpp"; sourceTree = "SOURCE_ROOT"; }; + 601CBE152587954A406ED25F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SubregionStream.cpp"; path = "../../../juce/modules/juce_core/streams/juce_SubregionStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 606F2538F89C451EC8BB479D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MappingScheduler.h; path = ../../Source/Mappings/MappingScheduler.h; sourceTree = "SOURCE_ROOT"; }; + 608D7036802547CACA0C8EB9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HashMap.h"; path = "../../../juce/modules/juce_core/containers/juce_HashMap.h"; sourceTree = "SOURCE_ROOT"; }; + 6099FF0A5378073D75F68649 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AlertWindow.h"; path = "../../../juce/modules/juce_gui_basics/windows/juce_AlertWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 610013306039A681BE00CDF4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DeletedAtShutdown.cpp"; path = "../../../juce/modules/juce_events/messages/juce_DeletedAtShutdown.cpp"; sourceTree = "SOURCE_ROOT"; }; + 61A7ED9BEB8538FEE656E782 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MIDIKeyPositionMapping.cpp; path = ../../Source/Mappings/MIDIKeyPositionMapping.cpp; sourceTree = "SOURCE_ROOT"; }; + 62A053A579D81CD2C6171B4E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_JackAudio.cpp"; path = "../../../juce/modules/juce_audio_devices/native/juce_linux_JackAudio.cpp"; sourceTree = "SOURCE_ROOT"; }; + 62A0804DA5C8D8F076538D7D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileInputSource.h"; path = "../../../juce/modules/juce_core/streams/juce_FileInputSource.h"; sourceTree = "SOURCE_ROOT"; }; + 62F2282824CD10B6F82A703F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseListener.h"; path = "../../../juce/modules/juce_gui_basics/mouse/juce_MouseListener.h"; sourceTree = "SOURCE_ROOT"; }; + 63271E5A2866BBC8014C76F6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ValueTree.cpp"; path = "../../../juce/modules/juce_data_structures/values/juce_ValueTree.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6348A0AF83CD2B08A0B0F867 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLFrameBuffer.h"; path = "../../../juce/modules/juce_opengl/opengl/juce_OpenGLFrameBuffer.h"; sourceTree = "SOURCE_ROOT"; }; + 638AC9A213FFAFC1647D3C78 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Main.cpp; path = ../../Source/Main.cpp; sourceTree = "SOURCE_ROOT"; }; + 638FEE22F7BC4DEE41443DC3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsSoftwareRenderer.h"; path = "../../../juce/modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h"; sourceTree = "SOURCE_ROOT"; }; + 6395794A858E7036D062579C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Decibels.h"; path = "../../../juce/modules/juce_audio_basics/effects/juce_Decibels.h"; sourceTree = "SOURCE_ROOT"; }; + 639B0783D7C0F63CACBC8616 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageFileFormat.cpp"; path = "../../../juce/modules/juce_graphics/images/juce_ImageFileFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 63BF081465ACDD86B21207F5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedComponent.h"; path = "../../../juce/modules/juce_gui_basics/layout/juce_TabbedComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 63E32F29B1D3528BDDE0B72A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WeakReference.h"; path = "../../../juce/modules/juce_core/memory/juce_WeakReference.h"; sourceTree = "SOURCE_ROOT"; }; + 63FB3D8BC053ED771331E303 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChangeBroadcaster.cpp"; path = "../../../juce/modules/juce_events/broadcasters/juce_ChangeBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; }; + 641DCDEE4366C19C302BCDC7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PixelFormats.h"; path = "../../../juce/modules/juce_graphics/colour/juce_PixelFormats.h"; sourceTree = "SOURCE_ROOT"; }; + 647A3C5CF4D3DE9C169861D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileListComponent.h"; path = "../../../juce/modules/juce_gui_basics/filebrowser/juce_FileListComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 64C0F5A52B61A2F5A8689840 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_mac_CoreMidi.cpp"; path = "../../../juce/modules/juce_audio_devices/native/juce_mac_CoreMidi.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6500D22CD08FD736625BA949 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SliderPropertyComponent.h"; path = "../../../juce/modules/juce_gui_basics/properties/juce_SliderPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 65851006CAF520CAAC0F81B7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_QuickTimeAudioFormat.h"; path = "../../../juce/modules/juce_audio_formats/codecs/juce_QuickTimeAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 65D27B3F8F17B07DCC171F1C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_formats.h"; path = "../../../juce/modules/juce_audio_formats/juce_audio_formats.h"; sourceTree = "SOURCE_ROOT"; }; + 6604B7074C60D16C2958058B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Files.cpp"; path = "../../../juce/modules/juce_core/native/juce_win32_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6606A45FBF92643F83F78021 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; }; + 6610029938CB08266FAD5120 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandManager.cpp"; path = "../../../juce/modules/juce_gui_basics/commands/juce_ApplicationCommandManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 66F5603A6C984CEFD02530D3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemTrayIconComponent.h"; path = "../../../juce/modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 673187B7CDEE9090F0503F45 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../juce/modules/juce_audio_formats/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 67B1EA88315E60BDDEF78A9B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = PianoPedal.cpp; path = ../../Source/TouchKeys/PianoPedal.cpp; sourceTree = "SOURCE_ROOT"; }; + 67FBBBE888B8FF071E9A6E9B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarModel.h"; path = "../../../juce/modules/juce_gui_basics/menus/juce_MenuBarModel.h"; sourceTree = "SOURCE_ROOT"; }; + 684832C67BAC9A135AD0F420 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPCompressorOutputStream.h"; path = "../../../juce/modules/juce_core/zip/juce_GZIPCompressorOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 688D8F39D56A47170508B993 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiBuffer.cpp"; path = "../../../juce/modules/juce_audio_basics/midi/juce_MidiBuffer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 68A9E6D3AA5B1E80308A5400 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MidiKeyboardSegment.cpp; path = ../../Source/TouchKeys/MidiKeyboardSegment.cpp; sourceTree = "SOURCE_ROOT"; }; + 68B7DB3155ECA7DF6A79D5EC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OwnedArray.h"; path = "../../../juce/modules/juce_core/containers/juce_OwnedArray.h"; sourceTree = "SOURCE_ROOT"; }; + 68EC729C279BCAD684AEBF9C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentAnimator.cpp"; path = "../../../juce/modules/juce_gui_basics/layout/juce_ComponentAnimator.cpp"; sourceTree = "SOURCE_ROOT"; }; + 68F90A1AC81BD36F4AFCA49D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlacAudioFormat.h"; path = "../../../juce/modules/juce_audio_formats/codecs/juce_FlacAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 692CFED8D5A615CCE73120FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TouchkeyVibratoMappingShortEditor.h; path = ../../Source/Mappings/Vibrato/TouchkeyVibratoMappingShortEditor.h; sourceTree = "SOURCE_ROOT"; }; + 6A14D41C2C4B1022DFCFDEC9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Direct2DGraphicsContext.cpp"; path = "../../../juce/modules/juce_graphics/native/juce_win32_Direct2DGraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6A2C76C28ADEBBEB65637ED4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AlertWindow.cpp"; path = "../../../juce/modules/juce_gui_basics/windows/juce_AlertWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6A58296B30F95486340DFD85 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Messaging.cpp"; path = "../../../juce/modules/juce_events/native/juce_android_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6A59FD6927F7863EA627B22B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Javascript.cpp"; path = "../../../juce/modules/juce_core/javascript/juce_Javascript.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6ABB704327024442CCD18ADD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CodeEditorComponent.cpp"; path = "../../../juce/modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6B4AAA40F2D016E163663316 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableCornerComponent.h"; path = "../../../juce/modules/juce_gui_basics/layout/juce_ResizableCornerComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 6B4D53A3F41AB62FA997F22E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertyComponent.cpp"; path = "../../../juce/modules/juce_gui_basics/properties/juce_PropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6B502138661E9AB628F374F6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComboBox.h"; path = "../../../juce/modules/juce_gui_basics/widgets/juce_ComboBox.h"; sourceTree = "SOURCE_ROOT"; }; + 6B53EFC11817616594E2D9BB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsSoftwareRenderer.cpp"; path = "../../../juce/modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6B6237A52DA8FB843E47CE0A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DocumentWindow.h"; path = "../../../juce/modules/juce_gui_basics/windows/juce_DocumentWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 6BBD376C70ED0BF7DB547474 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryMappedAudioFormatReader.h"; path = "../../../juce/modules/juce_audio_formats/format/juce_MemoryMappedAudioFormatReader.h"; sourceTree = "SOURCE_ROOT"; }; + 6C119011A8A9B7A6F092F10D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileLogger.h"; path = "../../../juce/modules/juce_core/logging/juce_FileLogger.h"; sourceTree = "SOURCE_ROOT"; }; + 6C1F7220FB3D51C3E401670D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferingAudioFormatReader.h"; path = "../../../juce/modules/juce_audio_formats/format/juce_BufferingAudioFormatReader.h"; sourceTree = "SOURCE_ROOT"; }; + 6CA0CAA72433DDE5E6E2BA99 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableWindow.cpp"; path = "../../../juce/modules/juce_gui_basics/windows/juce_ResizableWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6CD813F180C163518C623E8C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_CoreGraphicsContext.mm"; path = "../../../juce/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm"; sourceTree = "SOURCE_ROOT"; }; + 6CF3B1703B8D1E75091098B0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyboardFocusTraverser.cpp"; path = "../../../juce/modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6CF6DF68577964FD68EFB132 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLContext.cpp"; path = "../../../juce/modules/juce_opengl/opengl/juce_OpenGLContext.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6D365652129D06390251A09D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_linux.h"; path = "../../../juce/modules/juce_opengl/native/juce_OpenGL_linux.h"; sourceTree = "SOURCE_ROOT"; }; + 6D7B40AF156B7244E6D37851 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = LogPlayback.h; path = ../../Source/TouchKeys/LogPlayback.h; sourceTree = "SOURCE_ROOT"; }; + 6DF85AFF4681188E85089BF5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioDeviceManager.cpp"; path = "../../../juce/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6EE034FF03FFA7308A5766AC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SVGParser.cpp"; path = "../../../juce/modules/juce_gui_basics/drawables/juce_SVGParser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 6EF7B06580A10399CCD7BD5F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_MessageManager.mm"; path = "../../../juce/modules/juce_events/native/juce_ios_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; }; + 6F7A2A1DF08F35D772F72DA9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AudioCDReader.mm"; path = "../../../juce/modules/juce_audio_devices/native/juce_mac_AudioCDReader.mm"; sourceTree = "SOURCE_ROOT"; }; + 6F9A5F79F66D8B56E1B62B9B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioDeviceManager.h"; path = "../../../juce/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.h"; sourceTree = "SOURCE_ROOT"; }; + 70007C0A1E082ED1349FD91B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Typeface.h"; path = "../../../juce/modules/juce_graphics/fonts/juce_Typeface.h"; sourceTree = "SOURCE_ROOT"; }; + 7036D606B54801EF8B582B14 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiDocumentPanel.h"; path = "../../../juce/modules/juce_gui_basics/layout/juce_MultiDocumentPanel.h"; sourceTree = "SOURCE_ROOT"; }; + 707B322BFF21635B171475AE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_posix_SharedCode.h"; path = "../../../juce/modules/juce_core/native/juce_posix_SharedCode.h"; sourceTree = "SOURCE_ROOT"; }; + 70D03CB09823072EB0FECD50 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Audio.cpp"; path = "../../../juce/modules/juce_audio_devices/native/juce_android_Audio.cpp"; sourceTree = "SOURCE_ROOT"; }; + 70DF91DDFADBF8A69040904F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessage.h"; path = "../../../juce/modules/juce_audio_basics/midi/juce_MidiMessage.h"; sourceTree = "SOURCE_ROOT"; }; + 70E7379DBBD8C42D6DF053AE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatReaderSource.cpp"; path = "../../../juce/modules/juce_audio_formats/format/juce_AudioFormatReaderSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7103BB75D00938B3DEF6F943 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Node.h; path = ../../Source/Utility/Node.h; sourceTree = "SOURCE_ROOT"; }; + 7172E38F5AA96EB0063A67AC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DropShadower.cpp"; path = "../../../juce/modules/juce_gui_basics/misc/juce_DropShadower.cpp"; sourceTree = "SOURCE_ROOT"; }; + 71D4D37B1DBDF821E57F68F3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GraphicsContext.cpp"; path = "../../../juce/modules/juce_graphics/contexts/juce_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; + 724ABFBF59674B3C9B5C2437 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TouchkeyKeyDivisionMapping.h; path = ../../Source/Mappings/KeyDivision/TouchkeyKeyDivisionMapping.h; sourceTree = "SOURCE_ROOT"; }; + 724CC1B7FF7ECEC8F25400AF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectangleList.h"; path = "../../../juce/modules/juce_graphics/geometry/juce_RectangleList.h"; sourceTree = "SOURCE_ROOT"; }; + 725AA29F72430257825A0E8B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = KeyPositionTracker.h; path = ../../Source/TouchKeys/KeyPositionTracker.h; sourceTree = "SOURCE_ROOT"; }; + 726E5869DFBD1AE70FB39109 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextPropertyComponent.cpp"; path = "../../../juce/modules/juce_gui_basics/properties/juce_TextPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 72972DBFFD3B26C1A933CD0F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_android_JNIHelpers.h"; path = "../../../juce/modules/juce_core/native/juce_android_JNIHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + 72D026BC20AD5DA4743D6A68 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryMappedFile.h"; path = "../../../juce/modules/juce_core/files/juce_MemoryMappedFile.h"; sourceTree = "SOURCE_ROOT"; }; + 72DEAE1CFA0E4495953E162B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandInfo.h"; path = "../../../juce/modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.h"; sourceTree = "SOURCE_ROOT"; }; + 7362738354A361AC4913C252 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiDocumentPanel.cpp"; path = "../../../juce/modules/juce_gui_basics/layout/juce_MultiDocumentPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 74367CCDFA812324602A8232 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Colours.cpp"; path = "../../../juce/modules/juce_graphics/colour/juce_Colours.cpp"; sourceTree = "SOURCE_ROOT"; }; + 743847CB7587F825B89E6FE8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = "SOURCE_ROOT"; }; + 74A7CB1DEB75A34CDD0CD4C4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageListener.cpp"; path = "../../../juce/modules/juce_events/messages/juce_MessageListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7512B86BFA154BD74FC8AC07 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Accumulator.h; path = ../../Source/Utility/Accumulator.h; sourceTree = "SOURCE_ROOT"; }; + 752E69ECB400EFBC66DB8081 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Draggable3DOrientation.h"; path = "../../../juce/modules/juce_opengl/opengl/juce_Draggable3DOrientation.h"; sourceTree = "SOURCE_ROOT"; }; + 75A33066D1965DA1A60D41B0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_core.mm"; path = "../../../juce/modules/juce_core/juce_core.mm"; sourceTree = "SOURCE_ROOT"; }; + 75CA737B306C29F574308F8E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadPool.h"; path = "../../../juce/modules/juce_core/threads/juce_ThreadPool.h"; sourceTree = "SOURCE_ROOT"; }; + 7640817A6F712E83E8127229 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_SystemStats.mm"; path = "../../../juce/modules/juce_core/native/juce_mac_SystemStats.mm"; sourceTree = "SOURCE_ROOT"; }; + 764F6B4DF0E407661F9594C1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessageSequence.h"; path = "../../../juce/modules/juce_audio_basics/midi/juce_MidiMessageSequence.h"; sourceTree = "SOURCE_ROOT"; }; + 76566BC742E2FB1F6FDC34F5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_gui_extra.mm"; path = "../../../juce/modules/juce_gui_extra/juce_gui_extra.mm"; sourceTree = "SOURCE_ROOT"; }; + 765EE2C3B48F47F94E607FBF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_File.h"; path = "../../../juce/modules/juce_core/files/juce_File.h"; sourceTree = "SOURCE_ROOT"; }; + 76758FB3B866000523F0B144 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SplashScreen.cpp"; path = "../../../juce/modules/juce_gui_extra/misc/juce_SplashScreen.cpp"; sourceTree = "SOURCE_ROOT"; }; + 76824FE677CBBE997E6B95AC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = TouchkeyDevice.cpp; path = ../../Source/TouchKeys/TouchkeyDevice.cpp; sourceTree = "SOURCE_ROOT"; }; + 7688BA989669160877676209 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileListComponent.cpp"; path = "../../../juce/modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 76ACD5EA5060FE1084BE7407 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemClipboard.h"; path = "../../../juce/modules/juce_gui_basics/keyboard/juce_SystemClipboard.h"; sourceTree = "SOURCE_ROOT"; }; + 7756797D74D0D9D929AA9A80 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableRectangle.h"; path = "../../../juce/modules/juce_gui_basics/drawables/juce_DrawableRectangle.h"; sourceTree = "SOURCE_ROOT"; }; + 776A2D8E1CDE4CBEFFA042B0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Strings.mm"; path = "../../../juce/modules/juce_core/native/juce_mac_Strings.mm"; sourceTree = "SOURCE_ROOT"; }; + 778872C42C72FA6949A2536E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageComponent.cpp"; path = "../../../juce/modules/juce_gui_basics/widgets/juce_ImageComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 77BA61409E24E072AF1E5493 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = TouchkeyKeyDivisionMapping.cpp; path = ../../Source/Mappings/KeyDivision/TouchkeyKeyDivisionMapping.cpp; sourceTree = "SOURCE_ROOT"; }; + 77D10D2C57D62DF18D3CE862 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = TouchkeyPitchBendMappingFactory.cpp; path = ../../Source/Mappings/PitchBend/TouchkeyPitchBendMappingFactory.cpp; sourceTree = "SOURCE_ROOT"; }; + 77E88D86D01AF16261B9E3AC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_win32_ComSmartPtr.h"; path = "../../../juce/modules/juce_core/native/juce_win32_ComSmartPtr.h"; sourceTree = "SOURCE_ROOT"; }; + 7828BC7ED00966FBBE2A90CB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBrowserComponent.h"; path = "../../../juce/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 7964EC4FD4E5860CF85469A6 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; + 797AB794731D226BD260BA38 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentListener.h"; path = "../../../juce/modules/juce_gui_basics/components/juce_ComponentListener.h"; sourceTree = "SOURCE_ROOT"; }; + 79892EC92519C81D7E02BDE1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_gui_basics.h"; path = "../../../juce/modules/juce_gui_basics/juce_gui_basics.h"; sourceTree = "SOURCE_ROOT"; }; + 79EBCB683DF7BD707B29F835 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReverbAudioSource.h"; path = "../../../juce/modules/juce_audio_basics/sources/juce_ReverbAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 79EC7F603DD271F787FE2EC9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LocalisedStrings.h"; path = "../../../juce/modules/juce_core/text/juce_LocalisedStrings.h"; sourceTree = "SOURCE_ROOT"; }; + 79ED04A9195FA283CCBF6492 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListenerList.h"; path = "../../../juce/modules/juce_events/broadcasters/juce_ListenerList.h"; sourceTree = "SOURCE_ROOT"; }; + 79FB5A147DA4950BDB10B97B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ScrollBar.cpp"; path = "../../../juce/modules/juce_gui_basics/layout/juce_ScrollBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7A002562A60140BEE1434ECF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MappingFactorySplitter.cpp; path = ../../Source/Mappings/MappingFactorySplitter.cpp; sourceTree = "SOURCE_ROOT"; }; + 7A05F75D7C08D0921F4DBA0E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileDragAndDropTarget.h"; path = "../../../juce/modules/juce_gui_basics/mouse/juce_FileDragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; + 7A2A67299D56679990772E1A = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../juce/modules/juce_audio_basics/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 7AD3466889EF224CEB709119 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseInputSource.h"; path = "../../../juce/modules/juce_gui_basics/mouse/juce_MouseInputSource.h"; sourceTree = "SOURCE_ROOT"; }; + 7B299BDFEBA4DABD680B7116 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TouchkeyPitchBendMappingFactory.h; path = ../../Source/Mappings/PitchBend/TouchkeyPitchBendMappingFactory.h; sourceTree = "SOURCE_ROOT"; }; + 7B799825EC1230F6618EC6FA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_opengl.h"; path = "../../../juce/modules/juce_opengl/juce_opengl.h"; sourceTree = "SOURCE_ROOT"; }; + 7B945396F869A8F9750F3F45 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Threads.cpp"; path = "../../../juce/modules/juce_core/native/juce_win32_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7B9FCDB57204606F4A7FDAD4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MainWindow.cpp; path = ../../Source/GUI/MainWindow.cpp; sourceTree = "SOURCE_ROOT"; }; + 7BBF33364D3B65730CEAD5F1 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; + 7CB06A483D91B0345A110791 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioTransportSource.cpp"; path = "../../../juce/modules/juce_audio_devices/sources/juce_AudioTransportSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7CF528A9CF4D2D0C77AECA41 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioDataConverters.h"; path = "../../../juce/modules/juce_audio_basics/buffers/juce_AudioDataConverters.h"; sourceTree = "SOURCE_ROOT"; }; + 7D4128713E8FB000F14BF646 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageButton.h"; path = "../../../juce/modules/juce_gui_basics/buttons/juce_ImageButton.h"; sourceTree = "SOURCE_ROOT"; }; + 7D4A55601B7F8AB486B0AF21 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Matrix3D.h"; path = "../../../juce/modules/juce_opengl/opengl/juce_Matrix3D.h"; sourceTree = "SOURCE_ROOT"; }; + 7D8C65927B21E027450B23F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedPipe.cpp"; path = "../../../juce/modules/juce_core/network/juce_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7DE576785D066AA5B72476F5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemStats.h"; path = "../../../juce/modules/juce_core/system/juce_SystemStats.h"; sourceTree = "SOURCE_ROOT"; }; + 7EB4672F9008FB273FB0E5A0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComboBox.cpp"; path = "../../../juce/modules/juce_gui_basics/widgets/juce_ComboBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7ED45DC66FA713C394B2EA1F = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../juce/modules/juce_events/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 7EDCB02E405529C4B4A60DA9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MIDIKeyPositionMapping.h; path = ../../Source/Mappings/MIDIKeyPositionMapping.h; sourceTree = "SOURCE_ROOT"; }; + 7EE4DAABDC4CF9F13A3B5541 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_UIViewComponent.mm"; path = "../../../juce/modules/juce_gui_extra/native/juce_ios_UIViewComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + 7EE90399313A416997604AAE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileFilter.h"; path = "../../../juce/modules/juce_gui_basics/filebrowser/juce_FileFilter.h"; sourceTree = "SOURCE_ROOT"; }; + 801654FBD686CBFC671446FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedButtonBar.h"; path = "../../../juce/modules/juce_gui_basics/layout/juce_TabbedButtonBar.h"; sourceTree = "SOURCE_ROOT"; }; + 80474D6CC77F91AADA740AC3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Midi.cpp"; path = "../../../juce/modules/juce_audio_devices/native/juce_android_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; + 80878F914A6A514CE5FEDD3C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LAMEEncoderAudioFormat.h"; path = "../../../juce/modules/juce_audio_formats/codecs/juce_LAMEEncoderAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 808B32EDF79E1139064ABB52 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InputStream.cpp"; path = "../../../juce/modules/juce_core/streams/juce_InputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 80BDEDE0C822A9AE504A2C38 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = KeyTouchFrame.h; path = ../../Source/TouchKeys/KeyTouchFrame.h; sourceTree = "SOURCE_ROOT"; }; + 80EBFCB95D6DF2DA4B645F20 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableComposite.cpp"; path = "../../../juce/modules/juce_gui_basics/drawables/juce_DrawableComposite.cpp"; sourceTree = "SOURCE_ROOT"; }; + 80FAE594348676A04BACD99F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CPlusPlusCodeTokeniserFunctions.h"; path = "../../../juce/modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniserFunctions.h"; sourceTree = "SOURCE_ROOT"; }; + 8166153E2B41CAFEF2012166 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileSearchPathListComponent.h"; path = "../../../juce/modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 821F73F15E2DCF3438652D3B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToneGeneratorAudioSource.h"; path = "../../../juce/modules/juce_audio_basics/sources/juce_ToneGeneratorAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 83AE3F5E0B7AE5D956415BCC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = PianoKeyCalibrator.cpp; path = ../../Source/TouchKeys/PianoKeyCalibrator.cpp; sourceTree = "SOURCE_ROOT"; }; + 83BB636195AA2F443ADEE961 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBrowserComponent.cpp"; path = "../../../juce/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 84329C0EAC5C8BCD99E03174 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryBlock.cpp"; path = "../../../juce/modules/juce_core/memory/juce_MemoryBlock.cpp"; sourceTree = "SOURCE_ROOT"; }; + 849B3D266CC18D432434AA9B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = RawSensorDisplay.cpp; path = ../../Source/Display/RawSensorDisplay.cpp; sourceTree = "SOURCE_ROOT"; }; + 84AB0ED9ED35EC083E56C73B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectanglePlacement.h"; path = "../../../juce/modules/juce_graphics/placement/juce_RectanglePlacement.h"; sourceTree = "SOURCE_ROOT"; }; + 84E1E20BD5B317A9C8AEB844 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AttributedString.h"; path = "../../../juce/modules/juce_graphics/fonts/juce_AttributedString.h"; sourceTree = "SOURCE_ROOT"; }; + 84EBC2A31E96330B004B8ACD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_JSON.h"; path = "../../../juce/modules/juce_core/javascript/juce_JSON.h"; sourceTree = "SOURCE_ROOT"; }; + 84FFC974D174B7938505FCE2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ButtonPropertyComponent.h"; path = "../../../juce/modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 8517608903BDD585564A2BD9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CarbonViewWrapperComponent.h"; path = "../../../juce/modules/juce_gui_extra/native/juce_mac_CarbonViewWrapperComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 857081343554E08270399A7A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CallOutBox.cpp"; path = "../../../juce/modules/juce_gui_basics/windows/juce_CallOutBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8577418313DD8B1192FDD61D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = BinaryData.h; path = ../../JuceLibraryCode/BinaryData.h; sourceTree = "SOURCE_ROOT"; }; + 859ABCC7E6D33E942919BC4B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AffineTransform.cpp"; path = "../../../juce/modules/juce_graphics/geometry/juce_AffineTransform.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8628FF7B8F05A904C8C59EC4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBasedDocument.h"; path = "../../../juce/modules/juce_gui_extra/documents/juce_FileBasedDocument.h"; sourceTree = "SOURCE_ROOT"; }; + 8688C08B789657B322528750 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResamplingAudioSource.h"; path = "../../../juce/modules/juce_audio_basics/sources/juce_ResamplingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + 86A8F063C7880CC175FCB59A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DynamicObject.cpp"; path = "../../../juce/modules/juce_core/containers/juce_DynamicObject.cpp"; sourceTree = "SOURCE_ROOT"; }; + 86C14BDBEB5F070A2166E8E6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationProperties.h"; path = "../../../juce/modules/juce_data_structures/app_properties/juce_ApplicationProperties.h"; sourceTree = "SOURCE_ROOT"; }; + 87083E81CEAC3B0F8BE7AAAD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Point.h"; path = "../../../juce/modules/juce_graphics/geometry/juce_Point.h"; sourceTree = "SOURCE_ROOT"; }; + 8720C0E6620ACF2E555C1CB5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextButton.h"; path = "../../../juce/modules/juce_gui_basics/buttons/juce_TextButton.h"; sourceTree = "SOURCE_ROOT"; }; + 8776329610ED3DF98A95ECD2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = IIRFilter.cpp; path = ../../Source/Utility/IIRFilter.cpp; sourceTree = "SOURCE_ROOT"; }; + 879BA74FC54118852648722F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = TouchkeyMultiFingerTriggerMappingFactory.cpp; path = ../../Source/Mappings/MultiFingerTrigger/TouchkeyMultiFingerTriggerMappingFactory.cpp; sourceTree = "SOURCE_ROOT"; }; + 88464C31A0A0F8F876BD5CA2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatReaderSource.h"; path = "../../../juce/modules/juce_audio_formats/format/juce_AudioFormatReaderSource.h"; sourceTree = "SOURCE_ROOT"; }; + 884FF9165E861BE4F04646FC = { isa = PBXFileReference; lastKnownFileType = image.png; name = "tk-icon-512.png"; path = "../../Resources/tk-icon-512.png"; sourceTree = "SOURCE_ROOT"; }; + 88D0E8DA9A02D3ADB13FB753 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_WavAudioFormat.cpp"; path = "../../../juce/modules/juce_audio_formats/codecs/juce_WavAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 890B8EF2DC47885686DAAF94 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_ASCII.h"; path = "../../../juce/modules/juce_core/text/juce_CharPointer_ASCII.h"; sourceTree = "SOURCE_ROOT"; }; + 89130E3BE0652A8CAB11A2BE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_MessageQueue.h"; path = "../../../juce/modules/juce_events/native/juce_osx_MessageQueue.h"; sourceTree = "SOURCE_ROOT"; }; + 8990C39751CB1A719998A52D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextDragAndDropTarget.h"; path = "../../../juce/modules/juce_gui_basics/mouse/juce_TextDragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; + 89EB02CBE5C658A77500E836 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LassoComponent.h"; path = "../../../juce/modules/juce_gui_basics/mouse/juce_LassoComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 8A02BB6161F2E74E22ABE635 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageCache.h"; path = "../../../juce/modules/juce_graphics/images/juce_ImageCache.h"; sourceTree = "SOURCE_ROOT"; }; + 8AB62337AC1BB45D8DD8B43D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MarkerList.cpp"; path = "../../../juce/modules/juce_gui_basics/positioning/juce_MarkerList.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8ADF834CD28E353B15D200C7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = TouchkeyControlMappingFactory.cpp; path = ../../Source/Mappings/Control/TouchkeyControlMappingFactory.cpp; sourceTree = "SOURCE_ROOT"; }; + 8BA8A815340C0C952C6DAA46 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageConvolutionKernel.cpp"; path = "../../../juce/modules/juce_graphics/images/juce_ImageConvolutionKernel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8BC0A410AADDAFD652051BDC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RectanglePlacement.cpp"; path = "../../../juce/modules/juce_graphics/placement/juce_RectanglePlacement.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8BD94C1723C9174065B1CA57 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Variant.h"; path = "../../../juce/modules/juce_core/containers/juce_Variant.h"; sourceTree = "SOURCE_ROOT"; }; + 8C46F1B244F115E716B37147 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLFrameBuffer.cpp"; path = "../../../juce/modules/juce_opengl/opengl/juce_OpenGLFrameBuffer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8C9EEF956680F688D1C9E58B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropContainer.h"; path = "../../../juce/modules/juce_gui_basics/mouse/juce_DragAndDropContainer.h"; sourceTree = "SOURCE_ROOT"; }; + 8CA21E32C250B212F23EA8AF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_opengl.mm"; path = "../../../juce/modules/juce_opengl/juce_opengl.mm"; sourceTree = "SOURCE_ROOT"; }; + 8CBA2AD4897FAC4F6191FDB3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsPostScriptRenderer.h"; path = "../../../juce/modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h"; sourceTree = "SOURCE_ROOT"; }; + 8CF10E46C293D8E35324F60F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TouchkeyKeyDivisionMappingFactory.h; path = ../../Source/Mappings/KeyDivision/TouchkeyKeyDivisionMappingFactory.h; sourceTree = "SOURCE_ROOT"; }; + 8D3354A1E9C02DED513A4355 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_UIViewComponentPeer.mm"; path = "../../../juce/modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm"; sourceTree = "SOURCE_ROOT"; }; + 8E169B97526DD9CCDE1BBA98 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BubbleMessageComponent.cpp"; path = "../../../juce/modules/juce_gui_extra/misc/juce_BubbleMessageComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8E7AC08D09000F53F4C123CC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLGraphicsContext.cpp"; path = "../../../juce/modules/juce_opengl/opengl/juce_OpenGLGraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8ED90DCD63DA37E5D56402E3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SplashScreen.h"; path = "../../../juce/modules/juce_gui_extra/misc/juce_SplashScreen.h"; sourceTree = "SOURCE_ROOT"; }; + 8ED952C01B726C1DBFACE2BD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSourcePlayer.h"; path = "../../../juce/modules/juce_audio_devices/sources/juce_AudioSourcePlayer.h"; sourceTree = "SOURCE_ROOT"; }; + 8FCE773A5D594437EF46757A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LagrangeInterpolator.cpp"; path = "../../../juce/modules/juce_audio_basics/effects/juce_LagrangeInterpolator.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8FEBDE824FD6FDFC09417C88 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Network.cpp"; path = "../../../juce/modules/juce_core/native/juce_win32_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9084178EF51E96AA8ACBB28D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditorKeyMapper.h"; path = "../../../juce/modules/juce_gui_basics/keyboard/juce_TextEditorKeyMapper.h"; sourceTree = "SOURCE_ROOT"; }; + 90CFD9356A26573B6D0BBF3F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WindowsRegistry.h"; path = "../../../juce/modules/juce_core/misc/juce_WindowsRegistry.h"; sourceTree = "SOURCE_ROOT"; }; + 91157413471588AA9BBA75D7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_graphics.mm"; path = "../../../juce/modules/juce_graphics/juce_graphics.mm"; sourceTree = "SOURCE_ROOT"; }; + 91AADDB641BD3F80E9011C65 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = TouchkeyReleaseAngleMappingFactory.cpp; path = ../../Source/Mappings/ReleaseAngle/TouchkeyReleaseAngleMappingFactory.cpp; sourceTree = "SOURCE_ROOT"; }; + 9210475F5E1B29B9C850ACDA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImagePreviewComponent.cpp"; path = "../../../juce/modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 92328D97A09C3864407862BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Fonts.mm"; path = "../../../juce/modules/juce_graphics/native/juce_mac_Fonts.mm"; sourceTree = "SOURCE_ROOT"; }; + 929C9770C346C51B352937B8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyListener.cpp"; path = "../../../juce/modules/juce_gui_basics/keyboard/juce_KeyListener.cpp"; sourceTree = "SOURCE_ROOT"; }; + 92C3C4A8F0677E70A2AAD5B9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Label.h"; path = "../../../juce/modules/juce_gui_basics/widgets/juce_Label.h"; sourceTree = "SOURCE_ROOT"; }; + 92D1EE5E3C477F4341709537 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsContext.h"; path = "../../../juce/modules/juce_graphics/contexts/juce_LowLevelGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + 92DEFC9A2AE2181DB9A0A8C2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Result.h"; path = "../../../juce/modules/juce_core/misc/juce_Result.h"; sourceTree = "SOURCE_ROOT"; }; + 9314190BB0D368F2A7C5E7C3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Path.h"; path = "../../../juce/modules/juce_graphics/geometry/juce_Path.h"; sourceTree = "SOURCE_ROOT"; }; + 93186997B68111C578D28993 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Thread.h"; path = "../../../juce/modules/juce_core/threads/juce_Thread.h"; sourceTree = "SOURCE_ROOT"; }; + 93FFEE74D94C3D0D397CE80D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Colour.cpp"; path = "../../../juce/modules/juce_graphics/colour/juce_Colour.cpp"; sourceTree = "SOURCE_ROOT"; }; + 94652A427B7F10B3405366B5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatManager.cpp"; path = "../../../juce/modules/juce_audio_formats/format/juce_AudioFormatManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + 94873408944DC8C21437551E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadWithProgressWindow.h"; path = "../../../juce/modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 962444B8A31102AAEA550124 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GlyphArrangement.h"; path = "../../../juce/modules/juce_graphics/fonts/juce_GlyphArrangement.h"; sourceTree = "SOURCE_ROOT"; }; + 96C1E28B6083DF9CA08B8DA5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChoicePropertyComponent.h"; path = "../../../juce/modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 97101F61193525E59EE16454 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CaretComponent.cpp"; path = "../../../juce/modules/juce_gui_basics/keyboard/juce_CaretComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 972158C4F988264A6E5BC592 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel_V3.cpp"; path = "../../../juce/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.cpp"; sourceTree = "SOURCE_ROOT"; }; + 976AEB3279AAA64A0EF186FE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryInputStream.h"; path = "../../../juce/modules/juce_core/streams/juce_MemoryInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 978BBCD3C704C06D407A95C0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathIterator.cpp"; path = "../../../juce/modules/juce_graphics/geometry/juce_PathIterator.cpp"; sourceTree = "SOURCE_ROOT"; }; + 980132D50C058EB7B1B625BA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ArrowButton.cpp"; path = "../../../juce/modules/juce_gui_basics/buttons/juce_ArrowButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + 980B7401EF270C8C3BF5921D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FloatVectorOperations.h"; path = "../../../juce/modules/juce_audio_basics/buffers/juce_FloatVectorOperations.h"; sourceTree = "SOURCE_ROOT"; }; + 984641E3DE573FF55DADB2AE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Typeface.cpp"; path = "../../../juce/modules/juce_graphics/fonts/juce_Typeface.cpp"; sourceTree = "SOURCE_ROOT"; }; + 984AEFF53886155F33D2F336 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MouseCursor.mm"; path = "../../../juce/modules/juce_gui_basics/native/juce_mac_MouseCursor.mm"; sourceTree = "SOURCE_ROOT"; }; + 987FA7FC98B320FAE747F2ED = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ValueTree.h"; path = "../../../juce/modules/juce_data_structures/values/juce_ValueTree.h"; sourceTree = "SOURCE_ROOT"; }; + 99011DB2E425583086338097 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiInput.h"; path = "../../../juce/modules/juce_audio_devices/midi_io/juce_MidiInput.h"; sourceTree = "SOURCE_ROOT"; }; + 9923EBA9D4A01541CAE90CF2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedReadLock.h"; path = "../../../juce/modules/juce_core/threads/juce_ScopedReadLock.h"; sourceTree = "SOURCE_ROOT"; }; + 992F1A00CD771D7AA8E1E15D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSubsectionReader.cpp"; path = "../../../juce/modules/juce_audio_formats/format/juce_AudioSubsectionReader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 99AA5732A932BEF06D09AB22 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiDataConcatenator.h"; path = "../../../juce/modules/juce_audio_devices/native/juce_MidiDataConcatenator.h"; sourceTree = "SOURCE_ROOT"; }; + 99C03C1C226C3BC10D3422BB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Sampler.h"; path = "../../../juce/modules/juce_audio_formats/sampler/juce_Sampler.h"; sourceTree = "SOURCE_ROOT"; }; + 99C3E2DED78CCBDBE436AE99 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BorderSize.h"; path = "../../../juce/modules/juce_graphics/geometry/juce_BorderSize.h"; sourceTree = "SOURCE_ROOT"; }; + 9A42DC8DA886A985FC5A0862 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LinkedListPointer.h"; path = "../../../juce/modules/juce_core/containers/juce_LinkedListPointer.h"; sourceTree = "SOURCE_ROOT"; }; + 9A4DFD3457C3E8A95F71F6E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputStream.h"; path = "../../../juce/modules/juce_core/streams/juce_InputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 9A4FBA2DD18C825B15EE6D19 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSubsectionReader.h"; path = "../../../juce/modules/juce_audio_formats/format/juce_AudioSubsectionReader.h"; sourceTree = "SOURCE_ROOT"; }; + 9A639B808D54F5251C701002 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlyphArrangement.cpp"; path = "../../../juce/modules/juce_graphics/fonts/juce_GlyphArrangement.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9A8C321C45F9E659F8676BA3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AudioCDBurner.mm"; path = "../../../juce/modules/juce_audio_devices/native/juce_mac_AudioCDBurner.mm"; sourceTree = "SOURCE_ROOT"; }; + 9AB36BA5D331A32F6EBF2E4C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DropShadowEffect.h"; path = "../../../juce/modules/juce_graphics/effects/juce_DropShadowEffect.h"; sourceTree = "SOURCE_ROOT"; }; + 9AD89C058D91C6D880FF028E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiTimer.h"; path = "../../../juce/modules/juce_events/timers/juce_MultiTimer.h"; sourceTree = "SOURCE_ROOT"; }; + 9B8C279F7E8FF6BCE7EFFF64 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_FileChooser.mm"; path = "../../../juce/modules/juce_gui_basics/native/juce_mac_FileChooser.mm"; sourceTree = "SOURCE_ROOT"; }; + 9B9B99EFAE12DE02397A87B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Osc.h; path = ../../Source/TouchKeys/Osc.h; sourceTree = "SOURCE_ROOT"; }; + 9B9C26B87D15142FEBBDAD4C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnectionServer.cpp"; path = "../../../juce/modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9BE9BB5131F3D749A7717085 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedValueSetter.h"; path = "../../../juce/modules/juce_core/containers/juce_ScopedValueSetter.h"; sourceTree = "SOURCE_ROOT"; }; + 9C0B692CB270EFA9DB7FA4D7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = PianoKeyboard.cpp; path = ../../Source/TouchKeys/PianoKeyboard.cpp; sourceTree = "SOURCE_ROOT"; }; + 9CAC7B4DFD297F29680FE739 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeEditorComponent.h"; path = "../../../juce/modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 9D044091881D52DC7354C266 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CaretComponent.h"; path = "../../../juce/modules/juce_gui_basics/keyboard/juce_CaretComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 9D0F29356400B8E025E5F524 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrayAllocationBase.h"; path = "../../../juce/modules/juce_core/containers/juce_ArrayAllocationBase.h"; sourceTree = "SOURCE_ROOT"; }; + 9D2CA1387AFF642B2E0C06A3 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../juce/modules/juce_audio_devices/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + 9D627B675B5F55FD5A203346 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = TimestampSynchronizer.cpp; path = ../../Source/Utility/TimestampSynchronizer.cpp; sourceTree = "SOURCE_ROOT"; }; + 9D633F4B9BBCF3F4D9331E00 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MappingFactory.h; path = ../../Source/Mappings/MappingFactory.h; sourceTree = "SOURCE_ROOT"; }; + 9D744C0830CCA407EB41368E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextEditor.cpp"; path = "../../../juce/modules/juce_gui_basics/widgets/juce_TextEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9D97B40DE97CFCF58CEA9DBD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileTreeComponent.h"; path = "../../../juce/modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 9DEC36437E061C38E07BAC75 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; }; + 9E1100E08D019514168470B6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF8.h"; path = "../../../juce/modules/juce_core/text/juce_CharPointer_UTF8.h"; sourceTree = "SOURCE_ROOT"; }; + 9E51136900384B3DBAF5D60E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WavAudioFormat.h"; path = "../../../juce/modules/juce_audio_formats/codecs/juce_WavAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 9E80DB194A5D094EE64958AB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentAnimator.h"; path = "../../../juce/modules/juce_gui_basics/layout/juce_ComponentAnimator.h"; sourceTree = "SOURCE_ROOT"; }; + 9E815E59EEB3FBAED99918C2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathStrokeType.cpp"; path = "../../../juce/modules/juce_graphics/geometry/juce_PathStrokeType.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9EA1E13123758B126A76513B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_FileChooser.cpp"; path = "../../../juce/modules/juce_gui_basics/native/juce_linux_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9EFEE9C78BF40448C92E4EA3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IPAddress.cpp"; path = "../../../juce/modules/juce_core/network/juce_IPAddress.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9F455251CF84921306543B93 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsList.cpp"; path = "../../../juce/modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9F64E66E6497FC3516119144 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPress.cpp"; path = "../../../juce/modules/juce_gui_basics/keyboard/juce_KeyPress.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9F843264E37B0F16987CDA48 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Types.h; path = ../../Source/Utility/Types.h; sourceTree = "SOURCE_ROOT"; }; + 9FA50DF5D707E8075BE42429 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TabbedComponent.cpp"; path = "../../../juce/modules/juce_gui_basics/layout/juce_TabbedComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + A01CEE27EC9F82523164E137 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandTarget.h"; path = "../../../juce/modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.h"; sourceTree = "SOURCE_ROOT"; }; + A01E2825335AD2156D93D462 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableLayoutManager.cpp"; path = "../../../juce/modules/juce_gui_basics/layout/juce_StretchableLayoutManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + A024211A62CC0D9A646A7676 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedPipe.h"; path = "../../../juce/modules/juce_core/network/juce_NamedPipe.h"; sourceTree = "SOURCE_ROOT"; }; + A041486CD4E6540A8D189C15 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HyperlinkButton.h"; path = "../../../juce/modules/juce_gui_basics/buttons/juce_HyperlinkButton.h"; sourceTree = "SOURCE_ROOT"; }; + A08C368697313473C377CE60 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativePoint.cpp"; path = "../../../juce/modules/juce_gui_basics/positioning/juce_RelativePoint.cpp"; sourceTree = "SOURCE_ROOT"; }; + A1723FE218F435C322FB9AE0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Rectangle.h"; path = "../../../juce/modules/juce_graphics/geometry/juce_Rectangle.h"; sourceTree = "SOURCE_ROOT"; }; + A1C6CCE346DC8551574C4108 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioTransportSource.h"; path = "../../../juce/modules/juce_audio_devices/sources/juce_AudioTransportSource.h"; sourceTree = "SOURCE_ROOT"; }; + A2120F8127E3DC96FD65D613 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseInactivityDetector.h"; path = "../../../juce/modules/juce_gui_basics/mouse/juce_MouseInactivityDetector.h"; sourceTree = "SOURCE_ROOT"; }; + A237BDE5342960289E3E6302 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AnimatedPositionBehaviours.h"; path = "../../../juce/modules/juce_gui_basics/layout/juce_AnimatedPositionBehaviours.h"; sourceTree = "SOURCE_ROOT"; }; + A266DE5D4412DD7BA69F8CF8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScrollBar.h"; path = "../../../juce/modules/juce_gui_basics/layout/juce_ScrollBar.h"; sourceTree = "SOURCE_ROOT"; }; + A28DB7EF92412F8484B88A07 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../juce/modules/juce_gui_extra/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + A29D19C2D6EEEE8A3C5D63B7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FilenameComponent.h"; path = "../../../juce/modules/juce_gui_basics/filebrowser/juce_FilenameComponent.h"; sourceTree = "SOURCE_ROOT"; }; + A2B676B239E39A8977B5EB5E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UndoableAction.h"; path = "../../../juce/modules/juce_data_structures/undomanager/juce_UndoableAction.h"; sourceTree = "SOURCE_ROOT"; }; + A4317D5AEB8EDF9E2F0BEFF5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentDragger.cpp"; path = "../../../juce/modules/juce_gui_basics/mouse/juce_ComponentDragger.cpp"; sourceTree = "SOURCE_ROOT"; }; + A50534690CFC8F765EEBCACC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationBase.h"; path = "../../../juce/modules/juce_events/messages/juce_ApplicationBase.h"; sourceTree = "SOURCE_ROOT"; }; + A58766D5C2AD6E9FC08EBD74 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageFileFormat.h"; path = "../../../juce/modules/juce_graphics/images/juce_ImageFileFormat.h"; sourceTree = "SOURCE_ROOT"; }; + A68FFCC7544F6D566C62402E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseInactivityDetector.cpp"; path = "../../../juce/modules/juce_gui_basics/mouse/juce_MouseInactivityDetector.cpp"; sourceTree = "SOURCE_ROOT"; }; + A6B7D7B713F01F521411F2D3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Mapping.cpp; path = ../../Source/Mappings/Mapping.cpp; sourceTree = "SOURCE_ROOT"; }; + A6D093637F71601C70B1DA16 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Result.cpp"; path = "../../../juce/modules/juce_core/misc/juce_Result.cpp"; sourceTree = "SOURCE_ROOT"; }; + A760FABA720E873DCAD04DAF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MixerAudioSource.h"; path = "../../../juce/modules/juce_audio_basics/sources/juce_MixerAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + A79D9F98051857EFFD8C2B88 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Viewport.h"; path = "../../../juce/modules/juce_gui_basics/layout/juce_Viewport.h"; sourceTree = "SOURCE_ROOT"; }; + A7CB749C845499A420598F30 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UnitTest.cpp"; path = "../../../juce/modules/juce_core/unit_tests/juce_UnitTest.cpp"; sourceTree = "SOURCE_ROOT"; }; + A7E3F42645F33A7460F4D770 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryInputStream.cpp"; path = "../../../juce/modules/juce_core/streams/juce_MemoryInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + A84AFB90B3F99E4469CF5FDF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemFactory.h"; path = "../../../juce/modules/juce_gui_basics/widgets/juce_ToolbarItemFactory.h"; sourceTree = "SOURCE_ROOT"; }; + A84C4AE3D9E536D74C379F0F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterprocessConnectionServer.h"; path = "../../../juce/modules/juce_events/interprocess/juce_InterprocessConnectionServer.h"; sourceTree = "SOURCE_ROOT"; }; + A8AF4B0BFECD9F39E1FE4E09 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AppleRemote.h"; path = "../../../juce/modules/juce_gui_extra/misc/juce_AppleRemote.h"; sourceTree = "SOURCE_ROOT"; }; + A8BD97DF1D8C19D42CF0715C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PositionableAudioSource.h"; path = "../../../juce/modules/juce_audio_basics/sources/juce_PositionableAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + A9184C4BCBA196795CCBCD98 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileChooserDialogBox.h"; path = "../../../juce/modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.h"; sourceTree = "SOURCE_ROOT"; }; + A9483F780B954919D59F1178 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MixerAudioSource.cpp"; path = "../../../juce/modules/juce_audio_basics/sources/juce_MixerAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + A9832F86A2E7CA1675C64C47 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditor.h"; path = "../../../juce/modules/juce_gui_basics/widgets/juce_TextEditor.h"; sourceTree = "SOURCE_ROOT"; }; + A9F0CD5B5FBAE5D4589A8C10 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryIterator.h"; path = "../../../juce/modules/juce_core/files/juce_DirectoryIterator.h"; sourceTree = "SOURCE_ROOT"; }; + AAB51A5E4451980FD9D77FF7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_OpenSL.cpp"; path = "../../../juce/modules/juce_audio_devices/native/juce_android_OpenSL.cpp"; sourceTree = "SOURCE_ROOT"; }; + AAF9D7469BCE537A1FC75ABC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Value.cpp"; path = "../../../juce/modules/juce_data_structures/values/juce_Value.cpp"; sourceTree = "SOURCE_ROOT"; }; + ABF842ECF835C33322E2F21A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PNGLoader.cpp"; path = "../../../juce/modules/juce_graphics/image_formats/juce_PNGLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; + AC5E7E9B31701A5A7B4E3ABB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferingAudioFormatReader.cpp"; path = "../../../juce/modules/juce_audio_formats/format/juce_BufferingAudioFormatReader.cpp"; sourceTree = "SOURCE_ROOT"; }; + AC80872B6544527C71AB2B0B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableHeaderComponent.h"; path = "../../../juce/modules/juce_gui_basics/widgets/juce_TableHeaderComponent.h"; sourceTree = "SOURCE_ROOT"; }; + AC9C0675772B6211213D774F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LagrangeInterpolator.h"; path = "../../../juce/modules/juce_audio_basics/effects/juce_LagrangeInterpolator.h"; sourceTree = "SOURCE_ROOT"; }; + ACA460FC9207D68260CD11CA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel.h"; path = "../../../juce/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h"; sourceTree = "SOURCE_ROOT"; }; + ACAD7720D728A3A8C9DB3949 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemPalette.h"; path = "../../../juce/modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.h"; sourceTree = "SOURCE_ROOT"; }; + ACB27E148164D4F5D3C36FCB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemStats.cpp"; path = "../../../juce/modules/juce_core/native/juce_linux_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + ACC97E565EDDD42DA4C1CB2E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectWriteTypeLayout.cpp"; path = "../../../juce/modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; + ACDF26585BEEE33D70E19A3C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_mac_SystemTrayIcon.cpp"; path = "../../../juce/modules/juce_gui_extra/native/juce_mac_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; }; + AD32973FF9774A2CF194C3CB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_URL.cpp"; path = "../../../juce/modules/juce_core/network/juce_URL.cpp"; sourceTree = "SOURCE_ROOT"; }; + AD95293E5C296F4C23A4F94B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChildProcess.h"; path = "../../../juce/modules/juce_core/threads/juce_ChildProcess.h"; sourceTree = "SOURCE_ROOT"; }; + ADC1E27313862E1559D41C3A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_core.h"; path = "../../../juce/modules/juce_core/juce_core.h"; sourceTree = "SOURCE_ROOT"; }; + ADCF2FE48BE727BF37B3C817 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLGraphicsContext.h"; path = "../../../juce/modules/juce_opengl/opengl/juce_OpenGLGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + AE32A61D504EC34FE186FDD1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CustomTypeface.h"; path = "../../../juce/modules/juce_graphics/fonts/juce_CustomTypeface.h"; sourceTree = "SOURCE_ROOT"; }; + AE876C6FF1860B4CC97EDF07 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooserDialogBox.cpp"; path = "../../../juce/modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.cpp"; sourceTree = "SOURCE_ROOT"; }; + AE954565B99BE415F7966F4A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Random.cpp"; path = "../../../juce/modules/juce_core/maths/juce_Random.cpp"; sourceTree = "SOURCE_ROOT"; }; + AE98A52AB3BC4D803B54380C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiKeyboardState.h"; path = "../../../juce/modules/juce_audio_basics/midi/juce_MidiKeyboardState.h"; sourceTree = "SOURCE_ROOT"; }; + AF10BCD18ABC5EC330CE3B1B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_ASIO.cpp"; path = "../../../juce/modules/juce_audio_devices/native/juce_win32_ASIO.cpp"; sourceTree = "SOURCE_ROOT"; }; + AF1275CD971968AF3CB13BAD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileTreeComponent.cpp"; path = "../../../juce/modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + AF7CC57D767DFC1F4B121270 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = IIRFilter.h; path = ../../Source/Utility/IIRFilter.h; sourceTree = "SOURCE_ROOT"; }; + AF87CD32C1189D997A5520B9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Memory.h"; path = "../../../juce/modules/juce_core/memory/juce_Memory.h"; sourceTree = "SOURCE_ROOT"; }; + AF8EFA9540E8757E68922E40 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MappingScheduler.cpp; path = ../../Source/Mappings/MappingScheduler.cpp; sourceTree = "SOURCE_ROOT"; }; + AFA3C397FE16ECC3DE0A5155 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutManager.h"; path = "../../../juce/modules/juce_gui_basics/layout/juce_StretchableLayoutManager.h"; sourceTree = "SOURCE_ROOT"; }; + B0A4E57EEDD13E204E723A92 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TouchkeyOnsetAngleMappingFactory.h; path = ../../Source/Mappings/OnsetAngle/TouchkeyOnsetAngleMappingFactory.h; sourceTree = "SOURCE_ROOT"; }; + B0EAE043C24041BFA266B6EE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SystemStats.cpp"; path = "../../../juce/modules/juce_core/system/juce_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + B169A76946B512C0D34D1807 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NativeMessageBox.h"; path = "../../../juce/modules/juce_gui_basics/windows/juce_NativeMessageBox.h"; sourceTree = "SOURCE_ROOT"; }; + B1D86EC91F8BDE1D1BF29728 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_win32_HiddenMessageWindow.h"; path = "../../../juce/modules/juce_events/native/juce_win32_HiddenMessageWindow.h"; sourceTree = "SOURCE_ROOT"; }; + B1E1FC7301A83D9FC8C320F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableButton.h"; path = "../../../juce/modules/juce_gui_basics/buttons/juce_DrawableButton.h"; sourceTree = "SOURCE_ROOT"; }; + B24051ADEFBD03E1C7CB8DC3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = GraphicsDisplayWindow.h; path = ../../Source/GUI/GraphicsDisplayWindow.h; sourceTree = "SOURCE_ROOT"; }; + B2575F7C163D92DA04ABDC7B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Midi.cpp"; path = "../../../juce/modules/juce_audio_devices/native/juce_win32_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; + B25BC7CD4D7D11A764A0FF19 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LAMEEncoderAudioFormat.cpp"; path = "../../../juce/modules/juce_audio_formats/codecs/juce_LAMEEncoderAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + B2C2E0F7737F05D71DC9CB1B = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../juce/modules/juce_opengl/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + B2D53D597D6709806BB7239A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextLayout.cpp"; path = "../../../juce/modules/juce_graphics/fonts/juce_TextLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; + B303EB3E070BBF9A30F07301 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioCDReader.h"; path = "../../../juce/modules/juce_audio_devices/audio_cd/juce_AudioCDReader.h"; sourceTree = "SOURCE_ROOT"; }; + B3414ED8780ED544999D2B1C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsHelpers.h"; path = "../../../juce/modules/juce_graphics/native/juce_mac_CoreGraphicsHelpers.h"; sourceTree = "SOURCE_ROOT"; }; + B38844D2CDF1EC2E6110BB56 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageComponent.h"; path = "../../../juce/modules/juce_gui_basics/widgets/juce_ImageComponent.h"; sourceTree = "SOURCE_ROOT"; }; + B39D1F9C2A6556C7E73F7B0A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryIterator.cpp"; path = "../../../juce/modules/juce_core/files/juce_DirectoryIterator.cpp"; sourceTree = "SOURCE_ROOT"; }; + B3F47C8187CE05809A994637 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OutputStream.h"; path = "../../../juce/modules/juce_core/streams/juce_OutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + B464F76711F6B9CBB66DA3EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_QuickTimeAudioFormat.cpp"; path = "../../../juce/modules/juce_audio_formats/codecs/juce_QuickTimeAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + B5053EFFA070EFE91763D1CF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPDecompressorInputStream.h"; path = "../../../juce/modules/juce_core/zip/juce_GZIPDecompressorInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + B50647653535F8801D7FF83D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinatePositioner.h"; path = "../../../juce/modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.h"; sourceTree = "SOURCE_ROOT"; }; + B676B0C4543E418E31B2607F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Message.h"; path = "../../../juce/modules/juce_events/messages/juce_Message.h"; sourceTree = "SOURCE_ROOT"; }; + B67D221133A97DC1C2C83C6F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLImage.h"; path = "../../../juce/modules/juce_opengl/opengl/juce_OpenGLImage.h"; sourceTree = "SOURCE_ROOT"; }; + B6DCD7E8C9C5C9EA58C5EF9C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MainWindow.h; path = ../../Source/GUI/MainWindow.h; sourceTree = "SOURCE_ROOT"; }; + B6E00FB0259FB8560B8EB8B2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageManager.cpp"; path = "../../../juce/modules/juce_events/messages/juce_MessageManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + B747A4B93EAA22A264B3D24C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlacAudioFormat.cpp"; path = "../../../juce/modules/juce_audio_formats/codecs/juce_FlacAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + B7497C02BCD8C01280DA32B2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = KeyPositionTracker.cpp; path = ../../Source/TouchKeys/KeyPositionTracker.cpp; sourceTree = "SOURCE_ROOT"; }; + B76B16D0041E8AF65ECBA8D2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilter.cpp"; path = "../../../juce/modules/juce_audio_basics/effects/juce_IIRFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; + B785A355901939FBFC107581 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Vector3D.h"; path = "../../../juce/modules/juce_opengl/opengl/juce_Vector3D.h"; sourceTree = "SOURCE_ROOT"; }; + B78F0674BC78DF9DAE4FEB7D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseEvent.h"; path = "../../../juce/modules/juce_gui_basics/mouse/juce_MouseEvent.h"; sourceTree = "SOURCE_ROOT"; }; + B8CB4838AFDE0B20C61A7248 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel.cpp"; path = "../../../juce/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; }; + B8DF81CC9D4E0BE71C3AF558 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_WebBrowserComponent.mm"; path = "../../../juce/modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm"; sourceTree = "SOURCE_ROOT"; }; + B8F2014DEA90E3849192C12D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlElement.h"; path = "../../../juce/modules/juce_core/xml/juce_XmlElement.h"; sourceTree = "SOURCE_ROOT"; }; + B928D73E2A712404DA6A9D39 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PopupMenu.h"; path = "../../../juce/modules/juce_gui_basics/menus/juce_PopupMenu.h"; sourceTree = "SOURCE_ROOT"; }; + B954FAFC45D231B388305CBB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OggVorbisAudioFormat.cpp"; path = "../../../juce/modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + B967DAA2B052D328B12C7DE8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Synthesiser.cpp"; path = "../../../juce/modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp"; sourceTree = "SOURCE_ROOT"; }; + B9683DFC5C73C8EA097C0C87 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinate.h"; path = "../../../juce/modules/juce_gui_basics/positioning/juce_RelativeCoordinate.h"; sourceTree = "SOURCE_ROOT"; }; + B97766EAEBB55185F51ED7B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SparseSet.h"; path = "../../../juce/modules/juce_core/containers/juce_SparseSet.h"; sourceTree = "SOURCE_ROOT"; }; + B9A42558DE8A295EAF05E9A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedPointer.h"; path = "../../../juce/modules/juce_core/memory/juce_ScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; + B9E1B02E2D61CD5F0C3BA92E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Identifier.h"; path = "../../../juce/modules/juce_core/text/juce_Identifier.h"; sourceTree = "SOURCE_ROOT"; }; + BA13CD1B8B5B44B8E675F743 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TemporaryFile.cpp"; path = "../../../juce/modules/juce_core/files/juce_TemporaryFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + BA2C6578AE3F6F2B82656B4F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MappingListComponent.cpp; path = ../../Source/GUI/MappingListComponent.cpp; sourceTree = "SOURCE_ROOT"; }; + BA5449FDC0526DDC94874CC7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TouchkeyControlMappingFactory.h; path = ../../Source/Mappings/Control/TouchkeyControlMappingFactory.h; sourceTree = "SOURCE_ROOT"; }; + BA641413905F4396597FDF78 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_devices.mm"; path = "../../../juce/modules/juce_audio_devices/juce_audio_devices.mm"; sourceTree = "SOURCE_ROOT"; }; + BA8405E8F85F9A3F9EB253FD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UnitTest.h"; path = "../../../juce/modules/juce_core/unit_tests/juce_UnitTest.h"; sourceTree = "SOURCE_ROOT"; }; + BA84C1198E0DEF50764C7D0F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BooleanPropertyComponent.h"; path = "../../../juce/modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; + BAC6DC0A9324D08F4675165D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Network.cpp"; path = "../../../juce/modules/juce_core/native/juce_linux_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + BB571C0DB322805E8CC5FAFC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PreferencesPanel.h"; path = "../../../juce/modules/juce_gui_extra/misc/juce_PreferencesPanel.h"; sourceTree = "SOURCE_ROOT"; }; + BB8F5735542B54CA9DE6F353 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActiveXControlComponent.h"; path = "../../../juce/modules/juce_gui_extra/embedding/juce_ActiveXControlComponent.h"; sourceTree = "SOURCE_ROOT"; }; + BBF99FBA82BF98E0CDA1F0C0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GIFLoader.cpp"; path = "../../../juce/modules/juce_graphics/image_formats/juce_GIFLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; + BC0A05397FE514F1AE6B3436 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppConfig.h; path = ../../JuceLibraryCode/AppConfig.h; sourceTree = "SOURCE_ROOT"; }; + BC52700DC6BCBBA42635510D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Variant.cpp"; path = "../../../juce/modules/juce_core/containers/juce_Variant.cpp"; sourceTree = "SOURCE_ROOT"; }; + BC64F550F0D3B5C2DD546574 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_data_structures.h"; path = "../../../juce/modules/juce_data_structures/juce_data_structures.h"; sourceTree = "SOURCE_ROOT"; }; + BD20E908DEABE97BC3CC4F07 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WaitableEvent.h"; path = "../../../juce/modules/juce_core/threads/juce_WaitableEvent.h"; sourceTree = "SOURCE_ROOT"; }; + BD8254A682953545FA36F552 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TouchkeyOnsetAngleMapping.h; path = ../../Source/Mappings/OnsetAngle/TouchkeyOnsetAngleMapping.h; sourceTree = "SOURCE_ROOT"; }; + BDA6E687818B0F2DC22337CB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyMappingEditorComponent.cpp"; path = "../../../juce/modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + BDB6848D33CE535EBCA3B9AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MappingFactorySplitter.h; path = ../../Source/Mappings/MappingFactorySplitter.h; sourceTree = "SOURCE_ROOT"; }; + BDBFE5792BFFFEC6DD9C51AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Expression.h"; path = "../../../juce/modules/juce_core/maths/juce_Expression.h"; sourceTree = "SOURCE_ROOT"; }; + BDD4F9A4B8D15A1515F87F53 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_WildcardFileFilter.cpp"; path = "../../../juce/modules/juce_gui_basics/filebrowser/juce_WildcardFileFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; + BDDEA8330D6309B2B97A55A6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseCursor.h"; path = "../../../juce/modules/juce_gui_basics/mouse/juce_MouseCursor.h"; sourceTree = "SOURCE_ROOT"; }; + BE2ACC20FF51D7702D22D3B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_freetype_Fonts.cpp"; path = "../../../juce/modules/juce_graphics/native/juce_freetype_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; + BE91DB4CF2406F37AF7E7D67 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ControlWindowMainComponent.h; path = ../../Source/GUI/ControlWindowMainComponent.h; sourceTree = "SOURCE_ROOT"; }; + BF01A2533D2222C856D3DB3A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MRPMapping.h; path = ../../Source/Mappings/MRPMapping.h; sourceTree = "SOURCE_ROOT"; }; + BF7B348D8CDF033289AA95AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StandardHeader.h"; path = "../../../juce/modules/juce_core/system/juce_StandardHeader.h"; sourceTree = "SOURCE_ROOT"; }; + BFBC57AA124FBB8C1C51CB59 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PianoTypes.h; path = ../../Source/TouchKeys/PianoTypes.h; sourceTree = "SOURCE_ROOT"; }; + BFD6F76FF80DE8CB6D83D18D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileOutputStream.h"; path = "../../../juce/modules/juce_core/files/juce_FileOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + C18D5C01F2C345BC7775FABD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Fonts.cpp"; path = "../../../juce/modules/juce_graphics/native/juce_win32_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; + C18FB4B3120557AA4EAFF405 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CodeDocument.cpp"; path = "../../../juce/modules/juce_gui_extra/code_editor/juce_CodeDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; + C213BD9455B5E42E62AF260A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseInputSource.cpp"; path = "../../../juce/modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + C25315D4D50046938BDE18D8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageConvolutionKernel.h"; path = "../../../juce/modules/juce_graphics/images/juce_ImageConvolutionKernel.h"; sourceTree = "SOURCE_ROOT"; }; + C266C85403BF3646B729144D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = OpenGLDisplayBase.h; path = ../../Source/Display/OpenGLDisplayBase.h; sourceTree = "SOURCE_ROOT"; }; + C2673A6A3D247F3CDCF66FF0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedWriteLock.h"; path = "../../../juce/modules/juce_core/threads/juce_ScopedWriteLock.h"; sourceTree = "SOURCE_ROOT"; }; + C26E6685AAEC528FC835CA5C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBuilder.h"; path = "../../../juce/modules/juce_gui_basics/layout/juce_ComponentBuilder.h"; sourceTree = "SOURCE_ROOT"; }; + C2762F0E696E257A507595A5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MRPMapping.cpp; path = ../../Source/Mappings/MRPMapping.cpp; sourceTree = "SOURCE_ROOT"; }; + C2D442FDEECC11C9BD433379 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = KeyboardDisplay.cpp; path = ../../Source/Display/KeyboardDisplay.cpp; sourceTree = "SOURCE_ROOT"; }; + C31F902A006BD5C9BD9259B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioIODeviceType.h"; path = "../../../juce/modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.h"; sourceTree = "SOURCE_ROOT"; }; + C3AAD3FBAACDA8F0B7BB8FF9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BubbleMessageComponent.h"; path = "../../../juce/modules/juce_gui_extra/misc/juce_BubbleMessageComponent.h"; sourceTree = "SOURCE_ROOT"; }; + C469456ED7E4039CF8BCB26F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiBuffer.h"; path = "../../../juce/modules/juce_audio_basics/midi/juce_MidiBuffer.h"; sourceTree = "SOURCE_ROOT"; }; + C4ADD63DE594AD3A82825DD4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Initialisation.h"; path = "../../../juce/modules/juce_events/messages/juce_Initialisation.h"; sourceTree = "SOURCE_ROOT"; }; + C4D3105688518F04E8D6D591 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel_V1.h"; path = "../../../juce/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V1.h"; sourceTree = "SOURCE_ROOT"; }; + C5032AA8AFA0CF6414D26DDE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Threads.mm"; path = "../../../juce/modules/juce_core/native/juce_mac_Threads.mm"; sourceTree = "SOURCE_ROOT"; }; + C548DA4DD5135F3EDFF7589D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_events.h"; path = "../../../juce/modules/juce_events/juce_events.h"; sourceTree = "SOURCE_ROOT"; }; + C72E037FB7147B081510B13E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionListener.h"; path = "../../../juce/modules/juce_events/broadcasters/juce_ActionListener.h"; sourceTree = "SOURCE_ROOT"; }; + C75FB456CF13DFDEEF28C277 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Toolbar.h"; path = "../../../juce/modules/juce_gui_basics/widgets/juce_Toolbar.h"; sourceTree = "SOURCE_ROOT"; }; + C804C201CC2FADE94FA73FAD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Expression.cpp"; path = "../../../juce/modules/juce_core/maths/juce_Expression.cpp"; sourceTree = "SOURCE_ROOT"; }; + C8204B6A7B83338403077010 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DocumentWindow.cpp"; path = "../../../juce/modules/juce_gui_basics/windows/juce_DocumentWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + C8288E63BC4A9120BE71066E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableButton.cpp"; path = "../../../juce/modules/juce_gui_basics/buttons/juce_DrawableButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + C830A46F2626904CBD8E74CF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPool.h"; path = "../../../juce/modules/juce_core/text/juce_StringPool.h"; sourceTree = "SOURCE_ROOT"; }; + C87D1CD195A69D0FC2BD3F33 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DragAndDrop.cpp"; path = "../../../juce/modules/juce_gui_basics/native/juce_win32_DragAndDrop.cpp"; sourceTree = "SOURCE_ROOT"; }; + C89CDA180CC916AB5EEEE534 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableShape.h"; path = "../../../juce/modules/juce_gui_basics/drawables/juce_DrawableShape.h"; sourceTree = "SOURCE_ROOT"; }; + C8C2FA6F235AB6AA44027FAE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_android.h"; path = "../../../juce/modules/juce_opengl/native/juce_OpenGL_android.h"; sourceTree = "SOURCE_ROOT"; }; + C8CEE210EF8AA5594AFB7C6F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileInputSource.cpp"; path = "../../../juce/modules/juce_core/streams/juce_FileInputSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + C9A5595CCCAF91E88CA4C4B4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeRectangle.cpp"; path = "../../../juce/modules/juce_gui_basics/positioning/juce_RelativeRectangle.cpp"; sourceTree = "SOURCE_ROOT"; }; + CA08ADDF1800B59374067EBE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FilenameComponent.cpp"; path = "../../../juce/modules/juce_gui_basics/filebrowser/juce_FilenameComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + CB26855B4D41689AC3C18F85 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationProperties.cpp"; path = "../../../juce/modules/juce_data_structures/app_properties/juce_ApplicationProperties.cpp"; sourceTree = "SOURCE_ROOT"; }; + CBB0FB63AD659D3F838318AB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableComposite.h"; path = "../../../juce/modules/juce_gui_basics/drawables/juce_DrawableComposite.h"; sourceTree = "SOURCE_ROOT"; }; + CC0D3E1F3FAAF5B18C3FFDDF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BooleanPropertyComponent.cpp"; path = "../../../juce/modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + CC659F7C5C7BBB1483D22927 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_WebBrowserComponent.cpp"; path = "../../../juce/modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + CCDD506916477B1ECDA100D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_GraphicsContext.cpp"; path = "../../../juce/modules/juce_graphics/native/juce_android_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; + CD1916C626761395E7729958 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChannelRemappingAudioSource.h"; path = "../../../juce/modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + CD5A70F1BEBD963AA994F53E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinatePositioner.cpp"; path = "../../../juce/modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.cpp"; sourceTree = "SOURCE_ROOT"; }; + CDCE769E18A546EC7FE65FE0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadWithProgressWindow.cpp"; path = "../../../juce/modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + CE4297701F6471B19A8DB984 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandManager.h"; path = "../../../juce/modules/juce_gui_basics/commands/juce_ApplicationCommandManager.h"; sourceTree = "SOURCE_ROOT"; }; + CE4BCD27BDF96500D2F89936 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Uuid.h"; path = "../../../juce/modules/juce_core/misc/juce_Uuid.h"; sourceTree = "SOURCE_ROOT"; }; + CE4F2F551165086D73459E43 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_HighResolutionTimer.cpp"; path = "../../../juce/modules/juce_core/threads/juce_HighResolutionTimer.cpp"; sourceTree = "SOURCE_ROOT"; }; + CE5071065642A70419650EB3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiTimer.cpp"; path = "../../../juce/modules/juce_events/timers/juce_MultiTimer.cpp"; sourceTree = "SOURCE_ROOT"; }; + CE6B0F39A803962ACD879D85 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JPEGLoader.cpp"; path = "../../../juce/modules/juce_graphics/image_formats/juce_JPEGLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; + CED1159B6F39600DE0520C82 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OggVorbisAudioFormat.h"; path = "../../../juce/modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + CEE095838CD8EDB961A05ACA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiKeyboardState.cpp"; path = "../../../juce/modules/juce_audio_basics/midi/juce_MidiKeyboardState.cpp"; sourceTree = "SOURCE_ROOT"; }; + CF1E1CAA10DC6E090133245E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_devices.h"; path = "../../../juce/modules/juce_audio_devices/juce_audio_devices.h"; sourceTree = "SOURCE_ROOT"; }; + CF273B4AE1819D5344866606 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TargetPlatform.h"; path = "../../../juce/modules/juce_core/system/juce_TargetPlatform.h"; sourceTree = "SOURCE_ROOT"; }; + D000F79ED732A055BC94D285 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AffineTransform.h"; path = "../../../juce/modules/juce_graphics/geometry/juce_AffineTransform.h"; sourceTree = "SOURCE_ROOT"; }; + D00A8C703C2C0055DD2B790C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CachedComponentImage.h"; path = "../../../juce/modules/juce_gui_basics/components/juce_CachedComponentImage.h"; sourceTree = "SOURCE_ROOT"; }; + D0868A6AA9193202A16F7B5D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MainMenu.mm"; path = "../../../juce/modules/juce_gui_basics/native/juce_mac_MainMenu.mm"; sourceTree = "SOURCE_ROOT"; }; + D16ADF8AF26851DFFF4AE731 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_EdgeTable.cpp"; path = "../../../juce/modules/juce_graphics/geometry/juce_EdgeTable.cpp"; sourceTree = "SOURCE_ROOT"; }; + D2C3D422A9FFB418D71B1FCA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TimeSliceThread.cpp"; path = "../../../juce/modules/juce_core/threads/juce_TimeSliceThread.cpp"; sourceTree = "SOURCE_ROOT"; }; + D2CE1FE912067925F5ACA619 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ModifierKeys.cpp"; path = "../../../juce/modules/juce_gui_basics/keyboard/juce_ModifierKeys.cpp"; sourceTree = "SOURCE_ROOT"; }; + D30002F0500DBE972234F381 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativePointPath.cpp"; path = "../../../juce/modules/juce_gui_basics/positioning/juce_RelativePointPath.cpp"; sourceTree = "SOURCE_ROOT"; }; + D3AB19332A0AE6C6A82612EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SelectedItemSet.h"; path = "../../../juce/modules/juce_gui_basics/mouse/juce_SelectedItemSet.h"; sourceTree = "SOURCE_ROOT"; }; + D3C368F0138FE8F3F0B7540F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IPAddress.h"; path = "../../../juce/modules/juce_core/network/juce_IPAddress.h"; sourceTree = "SOURCE_ROOT"; }; + D3C722814093C96312625553 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringPairArray.cpp"; path = "../../../juce/modules/juce_core/text/juce_StringPairArray.cpp"; sourceTree = "SOURCE_ROOT"; }; + D3FE20DFB95B39D949C6B842 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsPostScriptRenderer.cpp"; path = "../../../juce/modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp"; sourceTree = "SOURCE_ROOT"; }; + D42A52316423A9F531FFC765 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Network.cpp"; path = "../../../juce/modules/juce_core/native/juce_android_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + D4D1E893C5144CF41D381E0E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AppleRemote.mm"; path = "../../../juce/modules/juce_gui_extra/native/juce_mac_AppleRemote.mm"; sourceTree = "SOURCE_ROOT"; }; + D5B0943362643EC0EE867701 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyboardFocusTraverser.h"; path = "../../../juce/modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.h"; sourceTree = "SOURCE_ROOT"; }; + D6272EF2E6816B659ABFBDA6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_WebBrowserComponent.cpp"; path = "../../../juce/modules/juce_gui_extra/native/juce_linux_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + D6A25A64B90CA2125D9D31B8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_SystemTrayIcon.cpp"; path = "../../../juce/modules/juce_gui_extra/native/juce_win32_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; }; + D6C4019A40A11C1B95FF07BB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableShape.cpp"; path = "../../../juce/modules/juce_gui_basics/drawables/juce_DrawableShape.cpp"; sourceTree = "SOURCE_ROOT"; }; + D6D6D17FF1925E76CE1F24E4 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../juce/modules/juce_graphics/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + D74EA156B75DFD28AB6BD8D0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Thread.cpp"; path = "../../../juce/modules/juce_core/threads/juce_Thread.cpp"; sourceTree = "SOURCE_ROOT"; }; + D7752214A0701D59E34DC038 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WindowsMediaAudioFormat.h"; path = "../../../juce/modules/juce_audio_formats/codecs/juce_WindowsMediaAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + D850695B102730FCFF698E4D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeRectangle.h"; path = "../../../juce/modules/juce_gui_basics/positioning/juce_RelativeRectangle.h"; sourceTree = "SOURCE_ROOT"; }; + D85AA9748C07062C4898B172 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ZipFile.h"; path = "../../../juce/modules/juce_core/zip/juce_ZipFile.h"; sourceTree = "SOURCE_ROOT"; }; + D867F0F9AE014AC4873F4093 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlDocument.h"; path = "../../../juce/modules/juce_core/xml/juce_XmlDocument.h"; sourceTree = "SOURCE_ROOT"; }; + D967F911BFDE7E5B482F5A5F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertyPanel.cpp"; path = "../../../juce/modules/juce_gui_basics/properties/juce_PropertyPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; + D999C1E99812B5D0C9F7519E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativePoint.h"; path = "../../../juce/modules/juce_gui_basics/positioning/juce_RelativePoint.h"; sourceTree = "SOURCE_ROOT"; }; + D9FD13866909F3134B4AB740 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Mapping.h; path = ../../Source/Mappings/Mapping.h; sourceTree = "SOURCE_ROOT"; }; + DA596B63735FF691A714D004 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_graphics.h"; path = "../../../juce/modules/juce_graphics/juce_graphics.h"; sourceTree = "SOURCE_ROOT"; }; + DA76EEB0BD9183E2006CE9EB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel_V2.cpp"; path = "../../../juce/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp"; sourceTree = "SOURCE_ROOT"; }; + DB09B4EA350E52FB74BAAD9D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Component.cpp"; path = "../../../juce/modules/juce_gui_basics/components/juce_Component.cpp"; sourceTree = "SOURCE_ROOT"; }; + DBD3326F4F7F5F41D3B7EA99 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Files.mm"; path = "../../../juce/modules/juce_core/native/juce_mac_Files.mm"; sourceTree = "SOURCE_ROOT"; }; + DBDB2CBDB7DD3D7B9713D4C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Scheduler.cpp; path = ../../Source/Utility/Scheduler.cpp; sourceTree = "SOURCE_ROOT"; }; + DDF271285760C5642E3D3346 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_Windowing.mm"; path = "../../../juce/modules/juce_gui_basics/native/juce_ios_Windowing.mm"; sourceTree = "SOURCE_ROOT"; }; + DF870F58DC21D8A032AE4D03 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; }; + E263014FE404722FDDC437C8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CoreAudioFormat.h"; path = "../../../juce/modules/juce_audio_formats/codecs/juce_CoreAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + E9E267650C0230141C461A4B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ControlWindowMainComponent.cpp; path = ../../Source/GUI/ControlWindowMainComponent.cpp; sourceTree = "SOURCE_ROOT"; }; + F07FDD832AD269D84A40DAF1 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; + 90E8A67FBC9B5B91FEB780F5 = { isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TouchKeys.app; sourceTree = "BUILT_PRODUCTS_DIR"; }; + D2F76A9A564C9C39C9110C7E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBuilder.cpp"; path = "../../../juce/modules/juce_gui_basics/layout/juce_ComponentBuilder.cpp"; sourceTree = "SOURCE_ROOT"; }; + D3D34D4A8674E01CCE92CE65 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatWriter.h"; path = "../../../juce/modules/juce_audio_formats/format/juce_AudioFormatWriter.h"; sourceTree = "SOURCE_ROOT"; }; + D3F247C3C568453665FD300D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = LineSegment.h; path = ../../Source/Utility/LineSegment.h; sourceTree = "SOURCE_ROOT"; }; + D70B19E3DE0323FFA2EFCBBF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentMovementWatcher.h"; path = "../../../juce/modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.h"; sourceTree = "SOURCE_ROOT"; }; + D75E1147AF76C62DC23E7B18 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyPress.h"; path = "../../../juce/modules/juce_gui_basics/keyboard/juce_KeyPress.h"; sourceTree = "SOURCE_ROOT"; }; + DBC98946C2E19791899587BD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToggleButton.h"; path = "../../../juce/modules/juce_gui_basics/buttons/juce_ToggleButton.h"; sourceTree = "SOURCE_ROOT"; }; + DBE3D6F70DF4558463C24395 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableText.cpp"; path = "../../../juce/modules/juce_gui_basics/drawables/juce_DrawableText.cpp"; sourceTree = "SOURCE_ROOT"; }; + DC7333AE4FD5C16D3B49EE77 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_ActiveXComponent.cpp"; path = "../../../juce/modules/juce_gui_extra/native/juce_win32_ActiveXComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + DD18A8B0C1A5F8BDA30BAA50 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = OscMidiConverter.h; path = ../../Source/TouchKeys/OscMidiConverter.h; sourceTree = "SOURCE_ROOT"; }; + DDC862F5672CFD8794EA65BC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MissingGLDefinitions.h"; path = "../../../juce/modules/juce_opengl/native/juce_MissingGLDefinitions.h"; sourceTree = "SOURCE_ROOT"; }; + DE68B78DB869AC78BCBD1214 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableText.h"; path = "../../../juce/modules/juce_gui_basics/drawables/juce_DrawableText.h"; sourceTree = "SOURCE_ROOT"; }; + DE6A8EF9DD39C0260ADD27B0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = TouchkeyVibratoMapping.cpp; path = ../../Source/Mappings/Vibrato/TouchkeyVibratoMapping.cpp; sourceTree = "SOURCE_ROOT"; }; + DE7280B3F30E33133756C534 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Messaging.cpp"; path = "../../../juce/modules/juce_events/native/juce_linux_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; + DF0B3A4D5C217DA0283223BF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourSelector.h"; path = "../../../juce/modules/juce_gui_extra/misc/juce_ColourSelector.h"; sourceTree = "SOURCE_ROOT"; }; + DF22553364728350DAFA6267 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarComponent.h"; path = "../../../juce/modules/juce_gui_basics/menus/juce_MenuBarComponent.h"; sourceTree = "SOURCE_ROOT"; }; + DF2B5B4B8D7948C9EF4882A7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MidiInputController.h; path = ../../Source/TouchKeys/MidiInputController.h; sourceTree = "SOURCE_ROOT"; }; + DF35E5C3BC9627D808F927E6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseEvent.cpp"; path = "../../../juce/modules/juce_gui_basics/mouse/juce_MouseEvent.cpp"; sourceTree = "SOURCE_ROOT"; }; + E0FB878B8DB0FE5B526BB950 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ShapeButton.h"; path = "../../../juce/modules/juce_gui_basics/buttons/juce_ShapeButton.h"; sourceTree = "SOURCE_ROOT"; }; + E185507E8E49A513D5E6894A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HighResolutionTimer.h"; path = "../../../juce/modules/juce_core/threads/juce_HighResolutionTimer.h"; sourceTree = "SOURCE_ROOT"; }; + E1B8E23E7491C09D6708018C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponentPeer.mm"; path = "../../../juce/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm"; sourceTree = "SOURCE_ROOT"; }; + E1D304ED9044C0CE62C7B3AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WildcardFileFilter.h"; path = "../../../juce/modules/juce_gui_basics/filebrowser/juce_WildcardFileFilter.h"; sourceTree = "SOURCE_ROOT"; }; + E2322B995208819DF175E332 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsContext.h"; path = "../../../juce/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + E2EE80FAFA0DADF6D8AD8EA0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_win32.h"; path = "../../../juce/modules/juce_opengl/native/juce_OpenGL_win32.h"; sourceTree = "SOURCE_ROOT"; }; + E2F713FF46DF610A87C64265 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ButtonPropertyComponent.cpp"; path = "../../../juce/modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + E32397CB64E42DA5119CC3E8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FillType.h"; path = "../../../juce/modules/juce_graphics/colour/juce_FillType.h"; sourceTree = "SOURCE_ROOT"; }; + E327C96B7AB06A125C9764FC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AbstractFifo.cpp"; path = "../../../juce/modules/juce_core/containers/juce_AbstractFifo.cpp"; sourceTree = "SOURCE_ROOT"; }; + E389B103581AD847C754E978 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Line.h"; path = "../../../juce/modules/juce_graphics/geometry/juce_Line.h"; sourceTree = "SOURCE_ROOT"; }; + E38A23A31D7FB8E86851666B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MidiInputController.cpp; path = ../../Source/TouchKeys/MidiInputController.cpp; sourceTree = "SOURCE_ROOT"; }; + E392DA2568D4143CE19A9A2F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Quaternion.h"; path = "../../../juce/modules/juce_opengl/opengl/juce_Quaternion.h"; sourceTree = "SOURCE_ROOT"; }; + E393747AE555F946712380D5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPathListComponent.cpp"; path = "../../../juce/modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + E3DA2BE88F2738CCDEDDF3AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Timer.h"; path = "../../../juce/modules/juce_events/timers/juce_Timer.h"; sourceTree = "SOURCE_ROOT"; }; + E46A2AA59E72BCA0D0891C27 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipClient.h"; path = "../../../juce/modules/juce_gui_basics/mouse/juce_TooltipClient.h"; sourceTree = "SOURCE_ROOT"; }; + E4F3ACBA5181C0AF7021EE38 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSourcePlayer.cpp"; path = "../../../juce/modules/juce_audio_devices/sources/juce_AudioSourcePlayer.cpp"; sourceTree = "SOURCE_ROOT"; }; + E56B94B61B89BBBD6510D713 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextDiff.h"; path = "../../../juce/modules/juce_core/text/juce_TextDiff.h"; sourceTree = "SOURCE_ROOT"; }; + E583018026996A67748B9630 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GZIPCompressorOutputStream.cpp"; path = "../../../juce/modules/juce_core/zip/juce_GZIPCompressorOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + E5F79D13171E0F28729529DD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = BinaryData.cpp; path = ../../JuceLibraryCode/BinaryData.cpp; sourceTree = "SOURCE_ROOT"; }; + E62E694F0D19A252A6B9EAA1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HeapBlock.h"; path = "../../../juce/modules/juce_core/memory/juce_HeapBlock.h"; sourceTree = "SOURCE_ROOT"; }; + E68F5154CAF362F281F55A1A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessage.cpp"; path = "../../../juce/modules/juce_audio_basics/midi/juce_MidiMessage.cpp"; sourceTree = "SOURCE_ROOT"; }; + E6908DE88A1A409B5E35CC37 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableBorderComponent.cpp"; path = "../../../juce/modules/juce_gui_basics/layout/juce_ResizableBorderComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + E6B9CFC25E8B762EB17568ED = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_SystemStats.cpp"; path = "../../../juce/modules/juce_core/native/juce_win32_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + E7043CF11AB43042A6725FDC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SliderPropertyComponent.cpp"; path = "../../../juce/modules/juce_gui_basics/properties/juce_SliderPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + E73EB83A03FED6C1036C85A6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourGradient.h"; path = "../../../juce/modules/juce_graphics/colour/juce_ColourGradient.h"; sourceTree = "SOURCE_ROOT"; }; + E7AF7E2ECFDAFF3CB186986D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyMappingEditorComponent.h"; path = "../../../juce/modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.h"; sourceTree = "SOURCE_ROOT"; }; + E7B6750E6B2616D84773B7D0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MidiKeyboardSegment.h; path = ../../Source/TouchKeys/MidiKeyboardSegment.h; sourceTree = "SOURCE_ROOT"; }; + E7F83771B734D5CCAC7AD391 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Threads.cpp"; path = "../../../juce/modules/juce_core/native/juce_linux_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; + E830ACDAC41A38A04A16E2CD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLRenderer.h"; path = "../../../juce/modules/juce_opengl/opengl/juce_OpenGLRenderer.h"; sourceTree = "SOURCE_ROOT"; }; + E88D828B769B0DB0DC1D624B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ContainerDeletePolicy.h"; path = "../../../juce/modules/juce_core/memory/juce_ContainerDeletePolicy.h"; sourceTree = "SOURCE_ROOT"; }; + E8D2B3CBDF5DED9EF0E0C63B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToneGeneratorAudioSource.cpp"; path = "../../../juce/modules/juce_audio_basics/sources/juce_ToneGeneratorAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + E8EDACD332FC3BDFC3F0E6E1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Recorder.h; path = ../../Source/Utility/Recorder.h; sourceTree = "SOURCE_ROOT"; }; + E91EEAE6F09A108DBF5E9BC5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectSound.cpp"; path = "../../../juce/modules/juce_audio_devices/native/juce_win32_DirectSound.cpp"; sourceTree = "SOURCE_ROOT"; }; + E9350A4235E42DBC9987725A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBrowserListener.h"; path = "../../../juce/modules/juce_gui_basics/filebrowser/juce_FileBrowserListener.h"; sourceTree = "SOURCE_ROOT"; }; + E93D98571147B0AD0B0D42C1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringArray.h"; path = "../../../juce/modules/juce_core/text/juce_StringArray.h"; sourceTree = "SOURCE_ROOT"; }; + E9E29024302023AEC889C4E1 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../juce/modules/juce_core/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; + EA085C2056A44FA5A7EE2AFE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Slider.h"; path = "../../../juce/modules/juce_gui_basics/widgets/juce_Slider.h"; sourceTree = "SOURCE_ROOT"; }; + EA23F0162B24A0A0FD58B0B2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Reverb.h"; path = "../../../juce/modules/juce_audio_basics/effects/juce_Reverb.h"; sourceTree = "SOURCE_ROOT"; }; + EA47BDE992F39919F3EF53EC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PianoPedal.h; path = ../../Source/TouchKeys/PianoPedal.h; sourceTree = "SOURCE_ROOT"; }; + EA983D5CAA5DB46A4EA83E19 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NotificationType.h"; path = "../../../juce/modules/juce_events/messages/juce_NotificationType.h"; sourceTree = "SOURCE_ROOT"; }; + EAC2B53916B041FEC59E050C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLImage.cpp"; path = "../../../juce/modules/juce_opengl/opengl/juce_OpenGLImage.cpp"; sourceTree = "SOURCE_ROOT"; }; + EAEB8DD999D027A9F9C02FC0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Slider.cpp"; path = "../../../juce/modules/juce_gui_basics/widgets/juce_Slider.cpp"; sourceTree = "SOURCE_ROOT"; }; + EB414D42BBBF2486ECE698D8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_WASAPI.cpp"; path = "../../../juce/modules/juce_audio_devices/native/juce_win32_WASAPI.cpp"; sourceTree = "SOURCE_ROOT"; }; + EB977BE1676B103BE15C730C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TouchkeyReleaseAngleMapping.h; path = ../../Source/Mappings/ReleaseAngle/TouchkeyReleaseAngleMapping.h; sourceTree = "SOURCE_ROOT"; }; + EB9EE29BC6E0F654EBDA140F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatManager.h"; path = "../../../juce/modules/juce_audio_formats/format/juce_AudioFormatManager.h"; sourceTree = "SOURCE_ROOT"; }; + EBA91A460FFAAFBC3EBEC36E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TabbedButtonBar.cpp"; path = "../../../juce/modules/juce_gui_basics/layout/juce_TabbedButtonBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + EBBA13C5C542DF0F8EFB826D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Windowing.cpp"; path = "../../../juce/modules/juce_gui_basics/native/juce_win32_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; + EC3966AA0A0C2A80EBB36B82 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GraphicsContext.h"; path = "../../../juce/modules/juce_graphics/contexts/juce_GraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + ECAB1F5B50EACFEBDFC11A40 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_FileChooser.cpp"; path = "../../../juce/modules/juce_gui_basics/native/juce_win32_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + ED331E878A92AC3986F5885B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileLogger.cpp"; path = "../../../juce/modules/juce_core/logging/juce_FileLogger.cpp"; sourceTree = "SOURCE_ROOT"; }; + EE373F66DCFC442DBAADCF74 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ios_Audio.cpp"; path = "../../../juce/modules/juce_audio_devices/native/juce_ios_Audio.cpp"; sourceTree = "SOURCE_ROOT"; }; + EECB8BFB50475C0564D37EAD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertyPanel.h"; path = "../../../juce/modules/juce_gui_basics/properties/juce_PropertyPanel.h"; sourceTree = "SOURCE_ROOT"; }; + EF092B37816526FF234B11F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentDragger.h"; path = "../../../juce/modules/juce_gui_basics/mouse/juce_ComponentDragger.h"; sourceTree = "SOURCE_ROOT"; }; + EF60BF8888F0B0EA48E9FF09 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UIViewComponent.h"; path = "../../../juce/modules/juce_gui_extra/embedding/juce_UIViewComponent.h"; sourceTree = "SOURCE_ROOT"; }; + EF7D4F4824E5775A2D3801E5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GlowEffect.h"; path = "../../../juce/modules/juce_graphics/effects/juce_GlowEffect.h"; sourceTree = "SOURCE_ROOT"; }; + EF8E10BB5A52F89097F763D9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationBase.cpp"; path = "../../../juce/modules/juce_events/messages/juce_ApplicationBase.cpp"; sourceTree = "SOURCE_ROOT"; }; + EF96A2B04F061E2DDCDD45D7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Clipboard.cpp"; path = "../../../juce/modules/juce_gui_basics/native/juce_linux_Clipboard.cpp"; sourceTree = "SOURCE_ROOT"; }; + EFA7C36D71A52C06681FCDBA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawablePath.h"; path = "../../../juce/modules/juce_gui_basics/drawables/juce_DrawablePath.h"; sourceTree = "SOURCE_ROOT"; }; + EFD6A6B89F68D70C31D5D167 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReadWriteLock.cpp"; path = "../../../juce/modules/juce_core/threads/juce_ReadWriteLock.cpp"; sourceTree = "SOURCE_ROOT"; }; + F01030FB262F40E8E52922DE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_URL.h"; path = "../../../juce/modules/juce_core/network/juce_URL.h"; sourceTree = "SOURCE_ROOT"; }; + F03FCD9223E01482CF16FE9A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertySet.cpp"; path = "../../../juce/modules/juce_core/containers/juce_PropertySet.cpp"; sourceTree = "SOURCE_ROOT"; }; + F076F25ECB0B7D2073F6478E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MarkerList.h"; path = "../../../juce/modules/juce_gui_basics/positioning/juce_MarkerList.h"; sourceTree = "SOURCE_ROOT"; }; + F0B30E3238044CF573DFF44D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = TouchkeyOnsetAngleMappingFactory.cpp; path = ../../Source/Mappings/OnsetAngle/TouchkeyOnsetAngleMappingFactory.cpp; sourceTree = "SOURCE_ROOT"; }; + F0C1BF45B5321D9A128DC034 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Logger.h"; path = "../../../juce/modules/juce_core/logging/juce_Logger.h"; sourceTree = "SOURCE_ROOT"; }; + F0F03FAE0B2065470B1815B7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PerformanceCounter.cpp"; path = "../../../juce/modules/juce_core/time/juce_PerformanceCounter.cpp"; sourceTree = "SOURCE_ROOT"; }; + F0F457D2A8E7EC3DE1CADC28 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Osc.cpp; path = ../../Source/TouchKeys/Osc.cpp; sourceTree = "SOURCE_ROOT"; }; + F17AD2FF61E5ECA564467092 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectWriteTypeface.cpp"; path = "../../../juce/modules/juce_graphics/native/juce_win32_DirectWriteTypeface.cpp"; sourceTree = "SOURCE_ROOT"; }; + F1A1127D8FADC377892165D6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsDisplayComponent.h"; path = "../../../juce/modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.h"; sourceTree = "SOURCE_ROOT"; }; + F1DF08252E945645AE2B4E98 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinate.cpp"; path = "../../../juce/modules/juce_gui_basics/positioning/juce_RelativeCoordinate.cpp"; sourceTree = "SOURCE_ROOT"; }; + F1F5AB75B6F813F0BAE8ACB6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CPlusPlusCodeTokeniser.cpp"; path = "../../../juce/modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.cpp"; sourceTree = "SOURCE_ROOT"; }; + F22AC4DF46EFEB83C6243426 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableBorderComponent.h"; path = "../../../juce/modules/juce_gui_basics/layout/juce_ResizableBorderComponent.h"; sourceTree = "SOURCE_ROOT"; }; + F24B0FB4FEE7764F3EC91EE5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BubbleComponent.h"; path = "../../../juce/modules/juce_gui_basics/misc/juce_BubbleComponent.h"; sourceTree = "SOURCE_ROOT"; }; + F2AFB80DCF056F88546FD65A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_File.cpp"; path = "../../../juce/modules/juce_core/files/juce_File.cpp"; sourceTree = "SOURCE_ROOT"; }; + F3125A1E89944D2040CA8DDE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertiesFile.h"; path = "../../../juce/modules/juce_data_structures/app_properties/juce_PropertiesFile.h"; sourceTree = "SOURCE_ROOT"; }; + F3B5E38E7731B299DBDBE164 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MappingEditorComponent.h; path = ../../Source/GUI/MappingEditorComponent.h; sourceTree = "SOURCE_ROOT"; }; + F408D8EEB8B3503EC6442162 = { isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Info.plist; sourceTree = "SOURCE_ROOT"; }; + F430F75983EA8B5A31B686E8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IIRFilter.h"; path = "../../../juce/modules/juce_audio_basics/effects/juce_IIRFilter.h"; sourceTree = "SOURCE_ROOT"; }; + F47D3518C1FDA9C65BDFE088 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DialogWindow.h"; path = "../../../juce/modules/juce_gui_basics/windows/juce_DialogWindow.h"; sourceTree = "SOURCE_ROOT"; }; + F4A7F22576E33E2A5E841B7D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CharacterFunctions.cpp"; path = "../../../juce/modules/juce_core/text/juce_CharacterFunctions.cpp"; sourceTree = "SOURCE_ROOT"; }; + F4DDE0DD51C64223CC8C9B62 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MappingListComponent.h; path = ../../Source/GUI/MappingListComponent.h; sourceTree = "SOURCE_ROOT"; }; + F55D37A9CFDBAA406A95E743 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = TouchkeyBaseMapping.cpp; path = ../../Source/Mappings/TouchkeyBaseMapping.cpp; sourceTree = "SOURCE_ROOT"; }; + F55EF8461AE8552E4FD9A0BF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableObjectResizer.h"; path = "../../../juce/modules/juce_gui_basics/layout/juce_StretchableObjectResizer.h"; sourceTree = "SOURCE_ROOT"; }; + F63EB3D2F75EC36B2FBFCDBA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = TouchkeyOnsetAngleMapping.cpp; path = ../../Source/Mappings/OnsetAngle/TouchkeyOnsetAngleMapping.cpp; sourceTree = "SOURCE_ROOT"; }; + F66F5ACB0EF8ABFD47CD2630 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Socket.cpp"; path = "../../../juce/modules/juce_core/network/juce_Socket.cpp"; sourceTree = "SOURCE_ROOT"; }; + F70C14B43A5C65BB3E1C27A8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TouchkeyVibratoMappingFactory.h; path = ../../Source/Mappings/Vibrato/TouchkeyVibratoMappingFactory.h; sourceTree = "SOURCE_ROOT"; }; + F7CFBA6425CEA669DAEF5F44 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawablePath.cpp"; path = "../../../juce/modules/juce_gui_basics/drawables/juce_DrawablePath.cpp"; sourceTree = "SOURCE_ROOT"; }; + F7F083D64EF53598854CF637 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatReader.h"; path = "../../../juce/modules/juce_audio_formats/format/juce_AudioFormatReader.h"; sourceTree = "SOURCE_ROOT"; }; + F7F0A21852B09E8081C1DD93 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RecentlyOpenedFilesList.h"; path = "../../../juce/modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.h"; sourceTree = "SOURCE_ROOT"; }; + F81F313202CDF4BE59B56B25 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ModifierKeys.h"; path = "../../../juce/modules/juce_gui_basics/keyboard/juce_ModifierKeys.h"; sourceTree = "SOURCE_ROOT"; }; + F85B20313230BD88D984FC3A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Singleton.h"; path = "../../../juce/modules/juce_core/memory/juce_Singleton.h"; sourceTree = "SOURCE_ROOT"; }; + F89BC7CFD2C4BC07D31DFA04 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = TouchkeyPitchBendMapping.cpp; path = ../../Source/Mappings/PitchBend/TouchkeyPitchBendMapping.cpp; sourceTree = "SOURCE_ROOT"; }; + F8F8849DF5261E350DF33690 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChoicePropertyComponent.cpp"; path = "../../../juce/modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + F950FB55905754598EA9B3B5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableEdgeComponent.cpp"; path = "../../../juce/modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + F9CBC71C9E3A22EC667F0B93 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPath.cpp"; path = "../../../juce/modules/juce_core/files/juce_FileSearchPath.cpp"; sourceTree = "SOURCE_ROOT"; }; + FA09A507AA15C65C617AEAE2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeTime.cpp"; path = "../../../juce/modules/juce_core/time/juce_RelativeTime.cpp"; sourceTree = "SOURCE_ROOT"; }; + FA23D0A59A1BE884D7308CC8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiOutput.cpp"; path = "../../../juce/modules/juce_audio_devices/midi_io/juce_MidiOutput.cpp"; sourceTree = "SOURCE_ROOT"; }; + FA32A230622BE3CA42ED90FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandInfo.cpp"; path = "../../../juce/modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.cpp"; sourceTree = "SOURCE_ROOT"; }; + FA442E5370C59BC201129D2D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLExtensions.h"; path = "../../../juce/modules/juce_opengl/native/juce_OpenGLExtensions.h"; sourceTree = "SOURCE_ROOT"; }; + FA7129964EDAC6BCFB6012BB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CriticalSection.h"; path = "../../../juce/modules/juce_core/threads/juce_CriticalSection.h"; sourceTree = "SOURCE_ROOT"; }; + FB95EEFCC0A2A933309EAEAE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Javascript.h"; path = "../../../juce/modules/juce_core/javascript/juce_Javascript.h"; sourceTree = "SOURCE_ROOT"; }; + FBA117D9E3AD465CFA9DDA51 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageCache.cpp"; path = "../../../juce/modules/juce_graphics/images/juce_ImageCache.cpp"; sourceTree = "SOURCE_ROOT"; }; + FBD0A4CCB4013E8B8AA653E2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_basics.mm"; path = "../../../juce/modules/juce_audio_basics/juce_audio_basics.mm"; sourceTree = "SOURCE_ROOT"; }; + FC5EAA6165A109AD70EDDCA8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioIODevice.h"; path = "../../../juce/modules/juce_audio_devices/audio_io/juce_AudioIODevice.h"; sourceTree = "SOURCE_ROOT"; }; + FC931CB64045178BDB71E95D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Colour.h"; path = "../../../juce/modules/juce_graphics/colour/juce_Colour.h"; sourceTree = "SOURCE_ROOT"; }; + FCCF27C93502E80A0EBDDAC7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_mac_CoreAudio.cpp"; path = "../../../juce/modules/juce_audio_devices/native/juce_mac_CoreAudio.cpp"; sourceTree = "SOURCE_ROOT"; }; + FD093D026A05354DA8D1B111 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableLayoutResizerBar.cpp"; path = "../../../juce/modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + FD7BF71F32457EFD941519E0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MidiOutputController.cpp; path = ../../Source/TouchKeys/MidiOutputController.cpp; sourceTree = "SOURCE_ROOT"; }; + FDA89D8C60D78D85531C8BC0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileChooser.h"; path = "../../../juce/modules/juce_gui_basics/filebrowser/juce_FileChooser.h"; sourceTree = "SOURCE_ROOT"; }; + FDCAF8B0857EC94103B91E9E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLContext.h"; path = "../../../juce/modules/juce_opengl/opengl/juce_OpenGLContext.h"; sourceTree = "SOURCE_ROOT"; }; + FE27CB5DB6ECB67339BFE39D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarButton.cpp"; path = "../../../juce/modules/juce_gui_basics/buttons/juce_ToolbarButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + FE59EEF1AB35791BB7600489 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterProcessLock.h"; path = "../../../juce/modules/juce_core/threads/juce_InterProcessLock.h"; sourceTree = "SOURCE_ROOT"; }; + FE6FCFD3E4E2689302C29B50 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PianoKeyboard.h; path = ../../Source/TouchKeys/PianoKeyboard.h; sourceTree = "SOURCE_ROOT"; }; + FEB3A41EEF9A3958E3FD1BDB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = TouchkeyControlMappingShortEditor.cpp; path = ../../Source/Mappings/Control/TouchkeyControlMappingShortEditor.cpp; sourceTree = "SOURCE_ROOT"; }; + FECFF08C2CECDF120F9F1454 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ConcertinaPanel.cpp"; path = "../../../juce/modules/juce_gui_basics/layout/juce_ConcertinaPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; + FF28767B560C00EABF1D1C73 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_osx.h"; path = "../../../juce/modules/juce_opengl/native/juce_OpenGL_osx.h"; sourceTree = "SOURCE_ROOT"; }; + FFB3A6545B8B46F2043EEE1C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileFilter.cpp"; path = "../../../juce/modules/juce_gui_basics/filebrowser/juce_FileFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; + FFBCB888FCE740B6BFE2835B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLTexture.cpp"; path = "../../../juce/modules/juce_opengl/opengl/juce_OpenGLTexture.cpp"; sourceTree = "SOURCE_ROOT"; }; + 278F1D36FE45600F19FDFA91 = { isa = PBXGroup; children = ( + 7B9FCDB57204606F4A7FDAD4, + B6DCD7E8C9C5C9EA58C5EF9C, + 0C9554C2C80A409B9486F101, + 3FBF5C96BBAA8C88CB37943C, + E9E267650C0230141C461A4B, + BE91DB4CF2406F37AF7E7D67, + B24051ADEFBD03E1C7CB8DC3, + BA2C6578AE3F6F2B82656B4F, + F4DDE0DD51C64223CC8C9B62, + 01A3C0D5D0FDDA38CE02C685, + 0A486C6A586B60525C9BAB59, + F3B5E38E7731B299DBDBE164 ); name = GUI; sourceTree = ""; }; + 9B41786D34A867FF8F1341EF = { isa = PBXGroup; children = ( + 119E49FA10A84C0AED360605, + 692CFED8D5A615CCE73120FB, + DE6A8EF9DD39C0260ADD27B0, + 4025F5D575B9A5A511EF8F30, + 001418B9F0352A2205CDAA96, + F70C14B43A5C65BB3E1C27A8 ); name = Vibrato; sourceTree = ""; }; + 72E20DA6718B4572688E63D7 = { isa = PBXGroup; children = ( + 5DE5675862714BFEFF231027, + EB977BE1676B103BE15C730C, + 91AADDB641BD3F80E9011C65, + 3BA1D64E8B635B5EFBD8C416 ); name = ReleaseAngle; sourceTree = ""; }; + AB366B7760234A8957CC46C3 = { isa = PBXGroup; children = ( + 25875D01B837C34F01EF8C2F, + 1DCDF6FC01C7DBDDA7D7AFEA, + F89BC7CFD2C4BC07D31DFA04, + 0B15F842C077C9765284446A, + 77D10D2C57D62DF18D3CE862, + 7B299BDFEBA4DABD680B7116 ); name = PitchBend; sourceTree = ""; }; + CE924A2E99C34B5C0C1749CA = { isa = PBXGroup; children = ( + F63EB3D2F75EC36B2FBFCDBA, + BD8254A682953545FA36F552, + F0B30E3238044CF573DFF44D, + B0A4E57EEDD13E204E723A92 ); name = OnsetAngle; sourceTree = ""; }; + 428A1A8AE78D576DDA139D6F = { isa = PBXGroup; children = ( + 0A767ED26F1C6854875AC0DB, + 0A982DF57CE775D8F05AD78B, + 879BA74FC54118852648722F, + 07F3126C9F1842B069672882 ); name = MultiFingerTrigger; sourceTree = ""; }; + EC83555D1B3E0BF39064D703 = { isa = PBXGroup; children = ( + 77BA61409E24E072AF1E5493, + 724ABFBF59674B3C9B5C2437, + 56EF3900C63C00BED0E574D0, + 8CF10E46C293D8E35324F60F ); name = KeyDivision; sourceTree = ""; }; + D390B7A00A5496FC36CA9328 = { isa = PBXGroup; children = ( + FEB3A41EEF9A3958E3FD1BDB, + 0A5EA54B877D84C939B6F6D7, + 0D2D03F562749971564F7773, + 293AA70C67056ED558221FCD, + 8ADF834CD28E353B15D200C7, + BA5449FDC0526DDC94874CC7 ); name = Control; sourceTree = ""; }; + 2F055548C29B16BA107E346B = { isa = PBXGroup; children = ( + 9B41786D34A867FF8F1341EF, + 72E20DA6718B4572688E63D7, + AB366B7760234A8957CC46C3, + CE924A2E99C34B5C0C1749CA, + 428A1A8AE78D576DDA139D6F, + EC83555D1B3E0BF39064D703, + D390B7A00A5496FC36CA9328, + AF8EFA9540E8757E68922E40, + 606F2538F89C451EC8BB479D, + F55D37A9CFDBAA406A95E743, + 2AB205503EDC14D07B0CDFA7, + 5C085DEDBB1A8F755F800922, + A6B7D7B713F01F521411F2D3, + D9FD13866909F3134B4AB740, + 9D633F4B9BBCF3F4D9331E00, + 7A002562A60140BEE1434ECF, + BDB6848D33CE535EBCA3B9AD, + 61A7ED9BEB8538FEE656E782, + 7EDCB02E405529C4B4A60DA9, + C2762F0E696E257A507595A5, + BF01A2533D2222C856D3DB3A ); name = Mappings; sourceTree = ""; }; + D6E28C861AC5D4069E6655A7 = { isa = PBXGroup; children = ( + C2D442FDEECC11C9BD433379, + 3D220516F82AD82C888C6765, + 3FDF3206CD46EA7C0063B295, + 439AF7EB00EE96C9B8E9B480, + C266C85403BF3646B729144D, + 42312AF39D46367A8CCAB92F, + 849B3D266CC18D432434AA9B, + 4AF53AC364CD4D92FA9C66B1 ); name = Display; sourceTree = ""; }; + 15BBDF1D59F35F4EC6C82651 = { isa = PBXGroup; children = ( + 7512B86BFA154BD74FC8AC07, + 8776329610ED3DF98A95ECD2, + AF7CC57D767DFC1F4B121270, + D3F247C3C568453665FD300D, + 7103BB75D00938B3DEF6F943, + E8EDACD332FC3BDFC3F0E6E1, + DBDB2CBDB7DD3D7B9713D4C5, + 4B5B59C3EB40E81B0EB3FF2A, + 32302BE7297F75C489B19CED, + 4AD0E0592C453AF63D48A792, + 9D627B675B5F55FD5A203346, + 1EDD89AA0A5497A9AC685E41, + 4BFF669E2B855A7A576E8CE2, + 0955F3A0CD0B38AA81A04149, + 9F843264E37B0F16987CDA48 ); name = Utility; sourceTree = ""; }; + E7C04CC2AA6E16B51566C9B6 = { isa = PBXGroup; children = ( + 68A9E6D3AA5B1E80308A5400, + E7B6750E6B2616D84773B7D0, + 05A3090F3BD2DAA8D6DF24B6, + 4C27098692905309308ADA65, + B7497C02BCD8C01280DA32B2, + 725AA29F72430257825A0E8B, + 80BDEDE0C822A9AE504A2C38, + 5A7A1022A19D6DD162029AA6, + 6D7B40AF156B7244E6D37851, + E38A23A31D7FB8E86851666B, + DF2B5B4B8D7948C9EF4882A7, + FD7BF71F32457EFD941519E0, + 42DE2C4C5791303F70375058, + F0F457D2A8E7EC3DE1CADC28, + 9B9B99EFAE12DE02397A87B4, + 178A386F6FE9CCEAD2ACEA3A, + DD18A8B0C1A5F8BDA30BAA50, + 183D81D9E023859A3E499243, + 5CD67ECB4B41375D889C1A2F, + 9C0B692CB270EFA9DB7FA4D7, + FE6FCFD3E4E2689302C29B50, + 83AE3F5E0B7AE5D956415BCC, + 55E99E81FC362EA304FEFC7D, + 67B1EA88315E60BDDEF78A9B, + EA47BDE992F39919F3EF53EC, + BFBC57AA124FBB8C1C51CB59, + 76824FE677CBBE997E6B95AC, + 0E25A6A37156A0D0F5063494 ); name = TouchKeys; sourceTree = ""; }; + 1583CC1C5B912AD3F1695E12 = { isa = PBXGroup; children = ( + 278F1D36FE45600F19FDFA91, + 2F055548C29B16BA107E346B, + D6E28C861AC5D4069E6655A7, + 15BBDF1D59F35F4EC6C82651, + E7C04CC2AA6E16B51566C9B6, + 26646EAE80CBDF47DADEE278, + 091527B6BC312B2295FA565A, + 638AC9A213FFAFC1647D3C78 ); name = Source; sourceTree = ""; }; + BB858467B2CAC483468A8AA8 = { isa = PBXGroup; children = ( + 1596880D3FEA7FDC94B7D71A, + 4262B169F606570751DE5855, + 884FF9165E861BE4F04646FC, + 1583CC1C5B912AD3F1695E12 ); name = TouchKeys; sourceTree = ""; }; + 402FB34DB3166C76A94D4F83 = { isa = PBXGroup; children = ( + 486B2D4FE311DCB82E37DF60, + 7CF528A9CF4D2D0C77AECA41, + 11E71A3ED179AF068E6D8A9D, + 22C2B16BCB6F4CA405233C04, + 2C8F38028F686154B4760DC4, + 980B7401EF270C8C3BF5921D ); name = buffers; sourceTree = ""; }; + C7E3A3464460973F3CA31423 = { isa = PBXGroup; children = ( + 688D8F39D56A47170508B993, + C469456ED7E4039CF8BCB26F, + 02AFF71371B8781BB9914E14, + 4E7E0F0BE092AB6743B03D43, + CEE095838CD8EDB961A05ACA, + AE98A52AB3BC4D803B54380C, + E68F5154CAF362F281F55A1A, + 70DF91DDFADBF8A69040904F, + 29057C0D0A47537D39F20C9C, + 764F6B4DF0E407661F9594C1 ); name = midi; sourceTree = ""; }; + 1957CB7441950FD771657845 = { isa = PBXGroup; children = ( + 6395794A858E7036D062579C, + B76B16D0041E8AF65ECBA8D2, + F430F75983EA8B5A31B686E8, + 8FCE773A5D594437EF46757A, + AC9C0675772B6211213D774F, + EA23F0162B24A0A0FD58B0B2 ); name = effects; sourceTree = ""; }; + 3646B9929E133CA941A2E1EA = { isa = PBXGroup; children = ( + 0241560E0F43D8F64C26A397, + 25E54DE680924E94F31F7727, + 47C9F191ACA30DA8866F8162, + 0436257DE1C3D66483C147A4, + CD1916C626761395E7729958, + 1C69D05010E094E31BACC6AA, + 2DB8DD2C8970470DD6C94355, + A9483F780B954919D59F1178, + A760FABA720E873DCAD04DAF, + A8BD97DF1D8C19D42CF0715C, + 09DB2381F553CE3AE1190F3C, + 8688C08B789657B322528750, + 4BA89F5127922FC8A0D88602, + 79EBCB683DF7BD707B29F835, + E8D2B3CBDF5DED9EF0E0C63B, + 821F73F15E2DCF3438652D3B ); name = sources; sourceTree = ""; }; + FCAAB1680ABFC736AAC1AD98 = { isa = PBXGroup; children = ( + B967DAA2B052D328B12C7DE8, + 57E7CFA95F5E9A5C31E0706A ); name = synthesisers; sourceTree = ""; }; + D461C49014F6BD834CCB7E79 = { isa = PBXGroup; children = ( + 402FB34DB3166C76A94D4F83, + C7E3A3464460973F3CA31423, + 1957CB7441950FD771657845, + 3646B9929E133CA941A2E1EA, + FCAAB1680ABFC736AAC1AD98, + 7A2A67299D56679990772E1A, + 102054A65E6A2C9E170F6C29 ); name = "juce_audio_basics"; sourceTree = ""; }; + C4577B7B6BFE3EA6C9604677 = { isa = PBXGroup; children = ( + 6DF85AFF4681188E85089BF5, + 6F9A5F79F66D8B56E1B62B9B, + 27034337E8AAB0ED01CA45E9, + FC5EAA6165A109AD70EDDCA8, + 369F9740183012CD9E400C49, + C31F902A006BD5C9BD9259B3, + 206A731B98F5606ED6B6F951 ); name = "audio_io"; sourceTree = ""; }; + 68E9A92265B816B5CF13942B = { isa = PBXGroup; children = ( + 99011DB2E425583086338097, + 354D2DA37EA34EFC3121E523, + 0FF0FEC5D686372FEF413FF4, + FA23D0A59A1BE884D7308CC8, + 396B15B57E8411B6131561B1 ); name = "midi_io"; sourceTree = ""; }; + 048CF2E63BDE15CE2F974A86 = { isa = PBXGroup; children = ( + E4F3ACBA5181C0AF7021EE38, + 8ED952C01B726C1DBFACE2BD, + 7CB06A483D91B0345A110791, + A1C6CCE346DC8551574C4108 ); name = sources; sourceTree = ""; }; + D8C9E7CEB1FDBFA62BA03154 = { isa = PBXGroup; children = ( + 5B1EA934207F64017DAEB18F, + 3DB49071D4E78F56A380391D, + B303EB3E070BBF9A30F07301 ); name = "audio_cd"; sourceTree = ""; }; + 061D61C2D1E6F813599269CB = { isa = PBXGroup; children = ( + 70D03CB09823072EB0FECD50, + 80474D6CC77F91AADA740AC3, + AAB51A5E4451980FD9D77FF7, + EE373F66DCFC442DBAADCF74, + 5F9AD4578F56B8BEC2E311C3, + 4218E86125D6E9C9ACB58741, + 62A053A579D81CD2C6171B4E, + 53C317A2BC085C625C1ABB49, + 9A8C321C45F9E659F8676BA3, + 6F7A2A1DF08F35D772F72DA9, + FCCF27C93502E80A0EBDDAC7, + 64C0F5A52B61A2F5A8689840, + 99AA5732A932BEF06D09AB22, + AF10BCD18ABC5EC330CE3B1B, + 36F8B4676EACEAFCED73F5A0, + 53297CAD72BBB338874C593F, + E91EEAE6F09A108DBF5E9BC5, + B2575F7C163D92DA04ABDC7B, + EB414D42BBBF2486ECE698D8 ); name = native; sourceTree = ""; }; + B0535668713BC274381E1916 = { isa = PBXGroup; children = ( + C4577B7B6BFE3EA6C9604677, + 68E9A92265B816B5CF13942B, + 048CF2E63BDE15CE2F974A86, + D8C9E7CEB1FDBFA62BA03154, + 061D61C2D1E6F813599269CB, + 9D2CA1387AFF642B2E0C06A3, + CF1E1CAA10DC6E090133245E ); name = "juce_audio_devices"; sourceTree = ""; }; + 69DAA09EE6CFFE4106A71F9C = { isa = PBXGroup; children = ( + 10674C5BE3CBDC1812E82AFF, + 172BE377D36CE8F6915DECC0, + 94652A427B7F10B3405366B5, + EB9EE29BC6E0F654EBDA140F, + 09E18B170D35E65AABCC3C90, + F7F083D64EF53598854CF637, + 70E7379DBBD8C42D6DF053AE, + 88464C31A0A0F8F876BD5CA2, + 176B62DE2BBD7453ADE87482, + D3D34D4A8674E01CCE92CE65, + 992F1A00CD771D7AA8E1E15D, + 9A4FBA2DD18C825B15EE6D19, + AC5E7E9B31701A5A7B4E3ABB, + 6C1F7220FB3D51C3E401670D, + 6BBD376C70ED0BF7DB547474 ); name = format; sourceTree = ""; }; + DDBEA4594FA71E3BFE54F19B = { isa = PBXGroup; children = ( + 13F3F140177E3986BCBC12EB, + 1DCB093C0AA6B07F8846CE5F, + 3206DFDE463E6BD093541953, + E263014FE404722FDDC437C8, + B747A4B93EAA22A264B3D24C, + 68F90A1AC81BD36F4AFCA49D, + B25BC7CD4D7D11A764A0FF19, + 80878F914A6A514CE5FEDD3C, + 4EF55CBE453A2F06A5880E6C, + 33486E83204368CF282A73F8, + B954FAFC45D231B388305CBB, + CED1159B6F39600DE0520C82, + B464F76711F6B9CBB66DA3EF, + 65851006CAF520CAAC0F81B7, + 88D0E8DA9A02D3ADB13FB753, + 9E51136900384B3DBAF5D60E, + 16BA68E8565D501ED6085968, + D7752214A0701D59E34DC038 ); name = codecs; sourceTree = ""; }; + B0652D3130CBE5A5C14F13B7 = { isa = PBXGroup; children = ( + 1B21A0523192F8E570190A8D, + 99C03C1C226C3BC10D3422BB ); name = sampler; sourceTree = ""; }; + 0DE4341F24550CC6009036DC = { isa = PBXGroup; children = ( + 69DAA09EE6CFFE4106A71F9C, + DDBEA4594FA71E3BFE54F19B, + B0652D3130CBE5A5C14F13B7, + 673187B7CDEE9090F0503F45, + 65D27B3F8F17B07DCC171F1C ); name = "juce_audio_formats"; sourceTree = ""; }; + 23FE544BDF21655E69832411 = { isa = PBXGroup; children = ( + F4A7F22576E33E2A5E841B7D, + 37D9F61856238A58FBAF151C, + 890B8EF2DC47885686DAAF94, + 50FBD249C6C5C1B4DBA459E6, + 2DF4F5F337BF6C45F00C2921, + 9E1100E08D019514168470B6, + 02F82B7A43C1B002A55C8645, + B9E1B02E2D61CD5F0C3BA92E, + 022C3AEC95B6F5C85673E1B9, + 79EC7F603DD271F787FE2EC9, + 24BBD2EEE5685F7BF08524DC, + 3721BA53A6BAB64AFCE77C35, + 4693A834FF8117902FFF4D3F, + 3882417E73E282C25A526368, + E93D98571147B0AD0B0D42C1, + D3C722814093C96312625553, + 547C4147F20B76FD1596DF3B, + 3F044B1232BF1AD76CF25C05, + C830A46F2626904CBD8E74CF, + 4B9F0E9662F5974FEB6D3EA6, + 35660D5C79544657DACE648E, + E56B94B61B89BBBD6510D713 ); name = text; sourceTree = ""; }; + 351644949FDC57BA4E44D3D4 = { isa = PBXGroup; children = ( + 22A640D49DAB8EC000C48C37, + 3E03094D5D1AC333A39F4B7A, + C804C201CC2FADE94FA73FAD, + BDBFE5792BFFFEC6DD9C51AD, + 5A557C5800B7FD7879B89A9A, + AE954565B99BE415F7966F4A, + 52503B83C3EB95429DBCF2B8, + 5AA900E1C54219C4371B3907 ); name = maths; sourceTree = ""; }; + 1744D2795680DE549C3DE675 = { isa = PBXGroup; children = ( + 435F555EAB5F88A7DE95C8FB, + 19241B0EBAE0BB8B2B78C861, + E88D828B769B0DB0DC1D624B, + E62E694F0D19A252A6B9EAA1, + 158BA823A17ACCB4E6826026, + AF87CD32C1189D997A5520B9, + 84329C0EAC5C8BCD99E03174, + 5BDFD343F8067BB49E2C2125, + 12EF0EF35B5F1C68F6576FBF, + 5CFC24DCE2459CF5A80FD766, + B9A42558DE8A295EAF05E9A4, + F85B20313230BD88D984FC3A, + 63E32F29B1D3528BDDE0B72A ); name = memory; sourceTree = ""; }; + 2F64BBE827F299C15CC19C87 = { isa = PBXGroup; children = ( + E327C96B7AB06A125C9764FC, + 1DD5318B2EC76DCE6B3F715C, + 1C3B338D3F36E6ADB417204D, + 9D0F29356400B8E025E5F524, + 86A8F063C7880CC175FCB59A, + 5E21284BD5A78CCF9533A7CB, + 2ED84C912889F7D0DA71BC31, + 608D7036802547CACA0C8EB9, + 9A42DC8DA886A985FC5A0862, + 026C6BCB121C0BB163DE9F06, + 021AF0A3F7822EA031EE86A1, + 68B7DB3155ECA7DF6A79D5EC, + F03FCD9223E01482CF16FE9A, + 27829CDA49F7FB509A7B5A1C, + 3738D2B9C5D2ACBA23938BD6, + 9BE9BB5131F3D749A7717085, + 4E88EE61D4328B092B1F0BB2, + B97766EAEBB55185F51ED7B4, + BC52700DC6BCBBA42635510D, + 8BD94C1723C9174065B1CA57 ); name = containers; sourceTree = ""; }; + 3AEC149409FA3F1F9A5D0605 = { isa = PBXGroup; children = ( + 4722FD5DDEA12074E23626F6, + AD95293E5C296F4C23A4F94B, + FA7129964EDAC6BCFB6012BB, + 0738BD96A6B0D207B2656964, + CE4F2F551165086D73459E43, + E185507E8E49A513D5E6894A, + FE59EEF1AB35791BB7600489, + 3D9C5122C7D61F188F36817E, + EFD6A6B89F68D70C31D5D167, + 30787E67674DB9065149BCF9, + 3F12742B404F1BCE9FD1182F, + 9923EBA9D4A01541CAE90CF2, + C2673A6A3D247F3CDCF66FF0, + 440B6F250CB865AA74386018, + D74EA156B75DFD28AB6BD8D0, + 93186997B68111C578D28993, + 5B851A07868E688F0C765CA1, + 1B47C271A0750D61976A387B, + 75CA737B306C29F574308F8E, + D2C3D422A9FFB418D71B1FCA, + 106C5E90696E6F1CC04EF896, + BD20E908DEABE97BC3CC4F07 ); name = threads; sourceTree = ""; }; + 3C05FC3B5BA734DF3EA8398F = { isa = PBXGroup; children = ( + F0F03FAE0B2065470B1815B7, + 2F5F168DE166CF81749EDE32, + FA09A507AA15C65C617AEAE2, + 47AFF0730B6F48B44D9AF21F, + 133CEEB518DC3E0387DDDAAA, + 4F0FBB923DC40FD7859CA9B6 ); name = time; sourceTree = ""; }; + 6E38183E98F91312140B2F58 = { isa = PBXGroup; children = ( + B39D1F9C2A6556C7E73F7B0A, + A9F0CD5B5FBAE5D4589A8C10, + F2AFB80DCF056F88546FD65A, + 765EE2C3B48F47F94E607FBF, + 2C07FA9C85BA4477E7E732BA, + 4BF12D55902ABB1FC8FC63AF, + 17C5876FBE7CBA0393D71B51, + BFD6F76FF80DE8CB6D83D18D, + F9CBC71C9E3A22EC667F0B93, + 2C65A282C235450315BFA7B7, + 72D026BC20AD5DA4743D6A68, + BA13CD1B8B5B44B8E675F743, + 48D74A7F2C32E5ED9838F5FE ); name = files; sourceTree = ""; }; + EB96B9A9B78F5E70729A5B25 = { isa = PBXGroup; children = ( + 9EFEE9C78BF40448C92E4EA3, + D3C368F0138FE8F3F0B7540F, + 2710E4CE033A62C80F13B7F2, + 2E8E49CCC7727B5DBE866711, + 7D8C65927B21E027450B23F9, + A024211A62CC0D9A646A7676, + F66F5ACB0EF8ABFD47CD2630, + 2EFF4ABBAACFB3611A738940, + AD32973FF9774A2CF194C3CB, + F01030FB262F40E8E52922DE ); name = network; sourceTree = ""; }; + 85FCA1F68636EBDFD80CCD3B = { isa = PBXGroup; children = ( + 2A64318B395562B54E8B978D, + 3B0FB247B6CA70098D56B522, + C8CEE210EF8AA5594AFB7C6F, + 62A0804DA5C8D8F076538D7D, + 0A9A3C2E3F533AB2FD618DD9, + 808B32EDF79E1139064ABB52, + 9A4DFD3457C3E8A95F71F6E7, + A7E3F42645F33A7460F4D770, + 976AEB3279AAA64A0EF186FE, + 11DF49143B2E40D5E8AB074D, + 390F98D3E43D2BC741B08D5B, + 070312CF9497593454CB10C1, + B3F47C8187CE05809A994637, + 601CBE152587954A406ED25F, + 1BAF3D8502C6D43B2CA5CF8A ); name = streams; sourceTree = ""; }; + 2284CA6682785C1A82A11DC9 = { isa = PBXGroup; children = ( + ED331E878A92AC3986F5885B, + 6C119011A8A9B7A6F092F10D, + 4EA0B74126E80DFAA6075D51, + F0C1BF45B5321D9A128DC034 ); name = logging; sourceTree = ""; }; + E709133C2C49CBD3A3F8295C = { isa = PBXGroup; children = ( + 32C7614FDFD477BFC45C7A05, + BF7B348D8CDF033289AA95AD, + B0EAE043C24041BFA266B6EE, + 7DE576785D066AA5B72476F5, + CF273B4AE1819D5344866606 ); name = system; sourceTree = ""; }; + 3A94655CA811747F076D5DE6 = { isa = PBXGroup; children = ( + 1F101BE64CA15979764736A3, + D867F0F9AE014AC4873F4093, + 2B3A1D8D1A77B39FFBA39EC8, + B8F2014DEA90E3849192C12D ); name = xml; sourceTree = ""; }; + 3BF800D92630CD6B7CEF6ADC = { isa = PBXGroup; children = ( + 6A59FD6927F7863EA627B22B, + FB95EEFCC0A2A933309EAEAE, + 1D41477949C13C4A9C7F0536, + 84EBC2A31E96330B004B8ACD ); name = javascript; sourceTree = ""; }; + 625475C9A5BF37B3641D16E8 = { isa = PBXGroup; children = ( + E583018026996A67748B9630, + 684832C67BAC9A135AD0F420, + 39A2849DABF6CBB1F554501D, + B5053EFFA070EFE91763D1CF, + 564725F265FA251EA1E85EFE, + D85AA9748C07062C4898B172 ); name = zip; sourceTree = ""; }; + FB2DC1F86FD22B3FC6741FE2 = { isa = PBXGroup; children = ( + A7CB749C845499A420598F30, + BA8405E8F85F9A3F9EB253FD ); name = "unit_tests"; sourceTree = ""; }; + D1B0B826075013DD1A0227EC = { isa = PBXGroup; children = ( + A6D093637F71601C70B1DA16, + 92DEFC9A2AE2181DB9A0A8C2, + 0F78459420EA5BD1915A0A8A, + CE4BCD27BDF96500D2F89936, + 90CFD9356A26573B6D0BBF3F ); name = misc; sourceTree = ""; }; + BB218DAC73F21FF21FAE6C63 = { isa = PBXGroup; children = ( + 35C231F40757E0C7B7BE74A4, + 72972DBFFD3B26C1A933CD0F, + 58E550A1B386C2A56A4E5205, + D42A52316423A9F531FFC765, + 5092DF5BA82449512AAA7D7B, + 1D633C390EEF3C24FE44FF27, + 560BA4677563ADBFEAA4A9A8, + 4881596CF3AA3B6809FD95FB, + 035E2239C42EE699D96A082C, + BAC6DC0A9324D08F4675165D, + ACB27E148164D4F5D3C36FCB, + E7F83771B734D5CCAC7AD391, + DBD3326F4F7F5F41D3B7EA99, + 586FCB50DD095947B527E462, + 776A2D8E1CDE4CBEFFA042B0, + 7640817A6F712E83E8127229, + C5032AA8AFA0CF6414D26DDE, + 2DA07ABEBAE78CBA17AD496C, + 06111D0738FEE481A9A0212B, + 707B322BFF21635B171475AE, + 77E88D86D01AF16261B9E3AC, + 6604B7074C60D16C2958058B, + 8FEBDE824FD6FDFC09417C88, + 277CDB2F2319FD585A04F00D, + E6B9CFC25E8B762EB17568ED, + 7B945396F869A8F9750F3F45 ); name = native; sourceTree = ""; }; + F20C13E9ABA55C434579CDEE = { isa = PBXGroup; children = ( + 23FE544BDF21655E69832411, + 351644949FDC57BA4E44D3D4, + 1744D2795680DE549C3DE675, + 2F64BBE827F299C15CC19C87, + 3AEC149409FA3F1F9A5D0605, + 3C05FC3B5BA734DF3EA8398F, + 6E38183E98F91312140B2F58, + EB96B9A9B78F5E70729A5B25, + 85FCA1F68636EBDFD80CCD3B, + 2284CA6682785C1A82A11DC9, + E709133C2C49CBD3A3F8295C, + 3A94655CA811747F076D5DE6, + 3BF800D92630CD6B7CEF6ADC, + 625475C9A5BF37B3641D16E8, + FB2DC1F86FD22B3FC6741FE2, + D1B0B826075013DD1A0227EC, + BB218DAC73F21FF21FAE6C63, + E9E29024302023AEC889C4E1, + ADC1E27313862E1559D41C3A ); name = "juce_core"; sourceTree = ""; }; + AF50D24168F417177DB7370F = { isa = PBXGroup; children = ( + AAF9D7469BCE537A1FC75ABC, + 40B64B6C8BD06AD2930DA9F0, + 63271E5A2866BBC8014C76F6, + 987FA7FC98B320FAE747F2ED ); name = values; sourceTree = ""; }; + 70490EADE714A7B309AC6274 = { isa = PBXGroup; children = ( + A2B676B239E39A8977B5EB5E, + 5B03F93B4E808E5B42C5F984, + 30B72EA5CC760FDC1D68A1D5 ); name = undomanager; sourceTree = ""; }; + FA848916740767602A5B6385 = { isa = PBXGroup; children = ( + CB26855B4D41689AC3C18F85, + 86C14BDBEB5F070A2166E8E6, + 226A0BD39983B2132DDBD732, + F3125A1E89944D2040CA8DDE ); name = "app_properties"; sourceTree = ""; }; + BECD79B159F94076CCF77238 = { isa = PBXGroup; children = ( + AF50D24168F417177DB7370F, + 70490EADE714A7B309AC6274, + FA848916740767602A5B6385, + 42C6DE63A9107E8D5B543F73, + BC64F550F0D3B5C2DD546574 ); name = "juce_data_structures"; sourceTree = ""; }; + 3AA44EDFDA4BC1C6DCE59475 = { isa = PBXGroup; children = ( + EF8E10BB5A52F89097F763D9, + A50534690CFC8F765EEBCACC, + 1F76B83EE0CFAA4761604B94, + 610013306039A681BE00CDF4, + 5A740A5459309CC1144016FD, + C4ADD63DE594AD3A82825DD4, + B676B0C4543E418E31B2607F, + 74A7CB1DEB75A34CDD0CD4C4, + 5D1750119D2E86324ED67585, + B6E00FB0259FB8560B8EB8B2, + 0FD7CCA5B5517C3CF7C2CCA9, + EA983D5CAA5DB46A4EA83E19 ); name = messages; sourceTree = ""; }; + 542941430579B611BD5E2588 = { isa = PBXGroup; children = ( + CE5071065642A70419650EB3, + 9AD89C058D91C6D880FF028E, + 482B36C5234DB4CED73506B4, + E3DA2BE88F2738CCDEDDF3AD ); name = timers; sourceTree = ""; }; + 59F782E0DB9A51FD365302D2 = { isa = PBXGroup; children = ( + 4953D82D7A84A83E3E7572A3, + 2F46807285895EC6D5DDA8E3, + C72E037FB7147B081510B13E, + 3F55433E0CFB772D4CEC69EA, + 09995800CE4E0E3EF8C11EF8, + 63FB3D8BC053ED771331E303, + 451D1DA2175F20466C358449, + 595D9603C966DD7A96601770, + 79ED04A9195FA283CCBF6492 ); name = broadcasters; sourceTree = ""; }; + 14EF5B2E7780CD35F595E7EF = { isa = PBXGroup; children = ( + 3C49A71B859640FC4A39B8F5, + 5E4F05C1C0E47ABAD690E924, + 9B9C26B87D15142FEBBDAD4C, + A84C4AE3D9E536D74C379F0F ); name = interprocess; sourceTree = ""; }; + B811157C7EAF4978CF8ED535 = { isa = PBXGroup; children = ( + 6A58296B30F95486340DFD85, + 6EF7B06580A10399CCD7BD5F, + DE7280B3F30E33133756C534, + 4D6A4F688249F5B876849207, + 89130E3BE0652A8CAB11A2BE, + 179FD2EA9B129C845CB4DCA7, + B1D86EC91F8BDE1D1BF29728, + 0F654BA2689F1C8D04DE1864 ); name = native; sourceTree = ""; }; + 1E588EC96A4D32BF0C19F169 = { isa = PBXGroup; children = ( + 3AA44EDFDA4BC1C6DCE59475, + 542941430579B611BD5E2588, + 59F782E0DB9A51FD365302D2, + 14EF5B2E7780CD35F595E7EF, + B811157C7EAF4978CF8ED535, + 7ED45DC66FA713C394B2EA1F, + C548DA4DD5135F3EDFF7589D ); name = "juce_events"; sourceTree = ""; }; + 7154A3B59065B4F5BFBEAD90 = { isa = PBXGroup; children = ( + 93FFEE74D94C3D0D397CE80D, + FC931CB64045178BDB71E95D, + 5AA0C6F1D0EEB64916D79A1F, + E73EB83A03FED6C1036C85A6, + 74367CCDFA812324602A8232, + 012940D53AFFB34E7515BA0D, + 5BDDEB249D4D04F0DAAA97B6, + E32397CB64E42DA5119CC3E8, + 641DCDEE4366C19C302BCDC7 ); name = colour; sourceTree = ""; }; + 1142603A91CA5F35115D029F = { isa = PBXGroup; children = ( + 71D4D37B1DBDF821E57F68F3, + EC3966AA0A0C2A80EBB36B82, + 92D1EE5E3C477F4341709537, + D3FE20DFB95B39D949C6B842, + 8CBA2AD4897FAC4F6191FDB3, + 6B53EFC11817616594E2D9BB, + 638FEE22F7BC4DEE41443DC3 ); name = contexts; sourceTree = ""; }; + C03D946F0D17FDD49DB86985 = { isa = PBXGroup; children = ( + 57370DDA62616114166E89B2, + 0A106C01DDEECF61E2D7F51E, + FBA117D9E3AD465CFA9DDA51, + 8A02BB6161F2E74E22ABE635, + 8BA8A815340C0C952C6DAA46, + C25315D4D50046938BDE18D8, + 639B0783D7C0F63CACBC8616, + A58766D5C2AD6E9FC08EBD74 ); name = images; sourceTree = ""; }; + A1D76F0186CFBD4F87D59464 = { isa = PBXGroup; children = ( + BBF99FBA82BF98E0CDA1F0C0, + CE6B0F39A803962ACD879D85, + ABF842ECF835C33322E2F21A ); name = "image_formats"; sourceTree = ""; }; + F3CD2A2CA1AB7FD343BD5E07 = { isa = PBXGroup; children = ( + 859ABCC7E6D33E942919BC4B, + D000F79ED732A055BC94D285, + 99C3E2DED78CCBDBE436AE99, + D16ADF8AF26851DFFF4AE731, + 1291BBAFB29453DAF847D561, + E389B103581AD847C754E978, + 17FC0AB961883C8A5AB58D30, + 9314190BB0D368F2A7C5E7C3, + 978BBCD3C704C06D407A95C0, + 3D8CB5CFD9B2031C3E016A0B, + 9E815E59EEB3FBAED99918C2, + 13C0DA6E480188AAA99E4283, + 87083E81CEAC3B0F8BE7AAAD, + A1723FE218F435C322FB9AE0, + 724CC1B7FF7ECEC8F25400AF ); name = geometry; sourceTree = ""; }; + DC6E3C5C4ACC4EDAC51A567E = { isa = PBXGroup; children = ( + 006F973FB5A7E243D7293AA6, + 8BC0A410AADDAFD652051BDC, + 84AB0ED9ED35EC083E56C73B ); name = placement; sourceTree = ""; }; + 269C7F1C35A082EA46BBFC4C = { isa = PBXGroup; children = ( + 21761A1F87F6E65A6DDF9AF3, + 84E1E20BD5B317A9C8AEB844, + 0FF3EA4E9EBFF0FE96DF62E2, + AE32A61D504EC34FE186FDD1, + 55614439CEA2AA4C3C83960C, + 51824FD31518891951469CBA, + 9A639B808D54F5251C701002, + 962444B8A31102AAEA550124, + B2D53D597D6709806BB7239A, + 558764F1D4A196E74A8B4D47, + 984641E3DE573FF55DADB2AE, + 70007C0A1E082ED1349FD91B ); name = fonts; sourceTree = ""; }; + F951AC35DF6A20E9D19E1097 = { isa = PBXGroup; children = ( + 2CEB8C23A0AE5989D02CA488, + 9AB36BA5D331A32F6EBF2E4C, + 1FA09EB888ECFBF0424174B2, + EF7D4F4824E5775A2D3801E5, + 1CD21A58F0E15076E1027B2E ); name = effects; sourceTree = ""; }; + 72CC318C6877D1D65674FE3B = { isa = PBXGroup; children = ( + 596161CC0A4A8DD05A368B32, + CCDD506916477B1ECDA100D1, + BE2ACC20FF51D7702D22D3B4, + 588647ADF4EEADF6DD8C573F, + E2322B995208819DF175E332, + 6CD813F180C163518C623E8C, + B3414ED8780ED544999D2B1C, + 92328D97A09C3864407862BC, + 54C9DB3C192D2E3C4BB796F6, + 6A14D41C2C4B1022DFCFDEC9, + F17AD2FF61E5ECA564467092, + ACC97E565EDDD42DA4C1CB2E, + C18D5C01F2C345BC7775FABD ); name = native; sourceTree = ""; }; + 50E4113B846C3F50715436BE = { isa = PBXGroup; children = ( + 7154A3B59065B4F5BFBEAD90, + 1142603A91CA5F35115D029F, + C03D946F0D17FDD49DB86985, + A1D76F0186CFBD4F87D59464, + F3CD2A2CA1AB7FD343BD5E07, + DC6E3C5C4ACC4EDAC51A567E, + 269C7F1C35A082EA46BBFC4C, + F951AC35DF6A20E9D19E1097, + 72CC318C6877D1D65674FE3B, + D6D6D17FF1925E76CE1F24E4, + DA596B63735FF691A714D004 ); name = "juce_graphics"; sourceTree = ""; }; + 1114A6CEDF1F72662105AFC7 = { isa = PBXGroup; children = ( + D00A8C703C2C0055DD2B790C, + DB09B4EA350E52FB74BAAD9D, + 196DBB540F88035040706D73, + 189E1AEC6F95E5DF992C910D, + 797AB794731D226BD260BA38, + 1FADCBF1B7451DE704A9E5DE, + 290AE3B1231EFE4B43011C38, + 3CC9C766A7CA3465A75C1264, + 19ECE65352DCC21F539ADFDE ); name = components; sourceTree = ""; }; + D23B6D10C1D76B5F36065122 = { isa = PBXGroup; children = ( + A4317D5AEB8EDF9E2F0BEFF5, + EF092B37816526FF234B11F9, + 2846850D6D318CBE5662505E, + 8C9EEF956680F688D1C9E58B, + 2B545CB34532967184BB979C, + 7A05F75D7C08D0921F4DBA0E, + 89EB02CBE5C658A77500E836, + 601196F609721F1C314F9F50, + BDDEA8330D6309B2B97A55A6, + DF35E5C3BC9627D808F927E6, + B78F0674BC78DF9DAE4FEB7D, + A68FFCC7544F6D566C62402E, + A2120F8127E3DC96FD65D613, + C213BD9455B5E42E62AF260A, + 7AD3466889EF224CEB709119, + 143C31FDEB6ACD8A02F6F861, + 62F2282824CD10B6F82A703F, + D3AB19332A0AE6C6A82612EF, + 8990C39751CB1A719998A52D, + E46A2AA59E72BCA0D0891C27 ); name = mouse; sourceTree = ""; }; + 63EF1E5C383925B43D88E623 = { isa = PBXGroup; children = ( + 97101F61193525E59EE16454, + 9D044091881D52DC7354C266, + 6CF3B1703B8D1E75091098B0, + D5B0943362643EC0EE867701, + 929C9770C346C51B352937B8, + 1256FA69F41BA1090B5C1A16, + 9F64E66E6497FC3516119144, + D75E1147AF76C62DC23E7B18, + D2CE1FE912067925F5ACA619, + F81F313202CDF4BE59B56B25, + 76ACD5EA5060FE1084BE7407, + 9084178EF51E96AA8ACBB28D, + 07D76602E68244DA48A496C3 ); name = keyboard; sourceTree = ""; }; + 16BDAFE366F09A32579D877C = { isa = PBXGroup; children = ( + 7EB4672F9008FB273FB0E5A0, + 6B502138661E9AB628F374F6, + 778872C42C72FA6949A2536E, + B38844D2CDF1EC2E6110BB56, + 3D2DF36E0CC698317233B864, + 92C3C4A8F0677E70A2AAD5B9, + 099F9D0711B4409A70F97168, + 1F4C487096EFF581BE969D75, + 4A75AF43CD5BD452E2B322A0, + 42C95CE7D85568838409D2CF, + EAEB8DD999D027A9F9C02FC0, + EA085C2056A44FA5A7EE2AFE, + 34F26056D1BF4026D3CA3DFB, + AC80872B6544527C71AB2B0B, + 09AFFC227A610CE469F29590, + 5D9DBA8EC90E8161918F12E0, + 9D744C0830CCA407EB41368E, + A9832F86A2E7CA1675C64C47, + 34F6C441AE3E69C11C988F58, + C75FB456CF13DFDEEF28C277, + 542B60D386C30F602E8F37C7, + 28A31552383A162DC607EAA0, + A84AFB90B3F99E4469CF5FDF, + 50B10AEABDF8CFDB4C1F5198, + ACAD7720D728A3A8C9DB3949, + 5F46502A5D1A44BD738467D4, + 1C1E6DBAE366BBF6B93C6231 ); name = widgets; sourceTree = ""; }; + 1BA54372572881E7B0D0C803 = { isa = PBXGroup; children = ( + 6A2C76C28ADEBBEB65637ED4, + 6099FF0A5378073D75F68649, + 857081343554E08270399A7A, + 4A2C4C9905C7DBE7BD7A0A7D, + 420CD52BA81E8FA04E73B0A1, + 4E546FBB3A7626EFD573D41D, + 2C144159C82D78DDD70C4105, + F47D3518C1FDA9C65BDFE088, + C8204B6A7B83338403077010, + 6B6237A52DA8FB843E47CE0A, + B169A76946B512C0D34D1807, + 6CA0CAA72433DDE5E6E2BA99, + 3851FE5AD54A9688682B21E9, + CDCE769E18A546EC7FE65FE0, + 94873408944DC8C21437551E, + 2B4B4811F717681D3CEA3C06, + 2F6C87AE0D32BF2600B951B2, + 1A67F2C4654C988FD919A612, + 265BDA429218A7AE3E5608CD ); name = windows; sourceTree = ""; }; + 40E7FDCF5675A7C9DBE4A370 = { isa = PBXGroup; children = ( + 4B6DD49A71F451207F114891, + DF22553364728350DAFA6267, + 2E2351F96F9FEDFB06036B45, + 67FBBBE888B8FF071E9A6E9B, + 04B1699E31A404BB6C7E4D93, + B928D73E2A712404DA6A9D39 ); name = menus; sourceTree = ""; }; + 78E0AEA42C73EDD79029FAAD = { isa = PBXGroup; children = ( + 5D5300842AF71C49D1E5EDF5, + A237BDE5342960289E3E6302, + 68EC729C279BCAD684AEBF9C, + 9E80DB194A5D094EE64958AB, + 0390578A9F961786A2E91266, + 077F55BB50ECFDEA65F71DF6, + D2F76A9A564C9C39C9110C7E, + C26E6685AAEC528FC835CA5C, + 286E94AA7893E151671EFACC, + D70B19E3DE0323FFA2EFCBBF, + FECFF08C2CECDF120F9F1454, + 3D29826EB4A5B899C3624500, + 5535E1D2AB0D896D5EA1528C, + 399F9880BC2270EF7FD9BFA1, + 7362738354A361AC4913C252, + 7036D606B54801EF8B582B14, + E6908DE88A1A409B5E35CC37, + F22AC4DF46EFEB83C6243426, + 03FD289F5F76E8E1644CE8AB, + 6B4AAA40F2D016E163663316, + F950FB55905754598EA9B3B5, + 121CF611E14695D8AC8D4AB3, + 79FB5A147DA4950BDB10B97B, + A266DE5D4412DD7BA69F8CF8, + A01E2825335AD2156D93D462, + AFA3C397FE16ECC3DE0A5155, + FD093D026A05354DA8D1B111, + 4F63CAE984068E8493AB1C59, + 091FB91B90B6E8C215BB309B, + F55EF8461AE8552E4FD9A0BF, + EBA91A460FFAAFBC3EBEC36E, + 801654FBD686CBFC671446FB, + 9FA50DF5D707E8075BE42429, + 63BF081465ACDD86B21207F5, + 500B161A0A390BE6A7AC6E67, + A79D9F98051857EFFD8C2B88 ); name = layout; sourceTree = ""; }; + 1064D4C7FF463C437CE721B1 = { isa = PBXGroup; children = ( + 980132D50C058EB7B1B625BA, + 4D3486477C93D169F9841EBD, + 4AA95F2942C46275D0CC1206, + 4FAEFEF7315CD4697A3A4A5F, + C8288E63BC4A9120BE71066E, + B1E1FC7301A83D9FC8C320F9, + 2C14D0A7927411AE5E37293F, + A041486CD4E6540A8D189C15, + 350CAF816F5658A6F048333B, + 7D4128713E8FB000F14BF646, + 1167AC1646F727991030443D, + E0FB878B8DB0FE5B526BB950, + 0D5355C05137A13E0F9C3577, + 8720C0E6620ACF2E555C1CB5, + 182845A3D1FBA30CEF9E0DA2, + DBC98946C2E19791899587BD, + FE27CB5DB6ECB67339BFE39D, + 018F96DE10ED9ABDBBE82873 ); name = buttons; sourceTree = ""; }; + 4166E01E2CADE6032D40685B = { isa = PBXGroup; children = ( + 8AB62337AC1BB45D8DD8B43D, + F076F25ECB0B7D2073F6478E, + F1DF08252E945645AE2B4E98, + B9683DFC5C73C8EA097C0C87, + CD5A70F1BEBD963AA994F53E, + B50647653535F8801D7FF83D, + 5B83D18A4AF71418DA5F54F4, + 4CAF6AD5590B3C8C9D2DCA10, + A08C368697313473C377CE60, + D999C1E99812B5D0C9F7519E, + D30002F0500DBE972234F381, + 1FB429A8B8F85E403CA12650, + C9A5595CCCAF91E88CA4C4B4, + D850695B102730FCFF698E4D ); name = positioning; sourceTree = ""; }; + 8E98E4F1FA2DB3BEB880470D = { isa = PBXGroup; children = ( + 1C2CDFD33D4679F91D0FBE57, + 52FC4A84B75D864E89E3AB5B, + 80EBFCB95D6DF2DA4B645F20, + CBB0FB63AD659D3F838318AB, + 158AE747154A3811549CECBB, + 4C8A9DE41142589CE8A66D22, + F7CFBA6425CEA669DAEF5F44, + EFA7C36D71A52C06681FCDBA, + 5AAE89A72D91459EB9548A5D, + 7756797D74D0D9D929AA9A80, + D6C4019A40A11C1B95FF07BB, + C89CDA180CC916AB5EEEE534, + DBE3D6F70DF4558463C24395, + DE68B78DB869AC78BCBD1214, + 6EE034FF03FFA7308A5766AC ); name = drawables; sourceTree = ""; }; + A1E2976CE853750FF33BD8F2 = { isa = PBXGroup; children = ( + CC0D3E1F3FAAF5B18C3FFDDF, + BA84C1198E0DEF50764C7D0F, + E2F713FF46DF610A87C64265, + 84FFC974D174B7938505FCE2, + F8F8849DF5261E350DF33690, + 96C1E28B6083DF9CA08B8DA5, + 6B4D53A3F41AB62FA997F22E, + 44820B2991A9F69F106501EB, + D967F911BFDE7E5B482F5A5F, + EECB8BFB50475C0564D37EAD, + E7043CF11AB43042A6725FDC, + 6500D22CD08FD736625BA949, + 726E5869DFBD1AE70FB39109, + 2FEDA73E284BA8DD022BD7E0 ); name = properties; sourceTree = ""; }; + 8A570D9D51DBC95AED850EE6 = { isa = PBXGroup; children = ( + B8CB4838AFDE0B20C61A7248, + ACA460FC9207D68260CD11CA, + 3014C4D84D91D187C834D4D9, + C4D3105688518F04E8D6D591, + DA76EEB0BD9183E2006CE9EB, + 213F98F1913ED639AE895474, + 972158C4F988264A6E5BC592, + 41D8CD12402ACE94C06C12CF ); name = lookandfeel; sourceTree = ""; }; + 17482FACCDAB45936C284B3B = { isa = PBXGroup; children = ( + 30BABDF73CAF7CC000817364, + F1A1127D8FADC377892165D6, + 9F455251CF84921306543B93, + 0E1393D568B97F822EC620E2, + 83BB636195AA2F443ADEE961, + 7828BC7ED00966FBBE2A90CB, + E9350A4235E42DBC9987725A, + 5DFC9E79432F0E8B0245B05E, + FDA89D8C60D78D85531C8BC0, + AE876C6FF1860B4CC97EDF07, + A9184C4BCBA196795CCBCD98, + FFB3A6545B8B46F2043EEE1C, + 7EE90399313A416997604AAE, + 7688BA989669160877676209, + 647A3C5CF4D3DE9C169861D1, + CA08ADDF1800B59374067EBE, + A29D19C2D6EEEE8A3C5D63B7, + 0DD2016AB1A5661593E69C5A, + E393747AE555F946712380D5, + 8166153E2B41CAFEF2012166, + AF1275CD971968AF3CB13BAD, + 9D97B40DE97CFCF58CEA9DBD, + 9210475F5E1B29B9C850ACDA, + 5AC453F4B30AB8DA51B8B9B0, + BDD4F9A4B8D15A1515F87F53, + E1D304ED9044C0CE62C7B3AD ); name = filebrowser; sourceTree = ""; }; + CA85555DF7856DBC586ED01E = { isa = PBXGroup; children = ( + 1A4837FC0BE8B165FAFD999A, + FA32A230622BE3CA42ED90FB, + 72DEAE1CFA0E4495953E162B, + 6610029938CB08266FAD5120, + CE4297701F6471B19A8DB984, + 10E1A1A46BECA9BD86A43829, + A01CEE27EC9F82523164E137, + 1144B3B90A0E8142CCBC8097, + 577688014EC968E5BB50E11B ); name = commands; sourceTree = ""; }; + 223074080D125D810EB5A020 = { isa = PBXGroup; children = ( + 1A96C45EFEBAAD6DA351F6E7, + F24B0FB4FEE7764F3EC91EE5, + 7172E38F5AA96EB0063A67AC, + 585AE1E2582CD19A8F9FE2D2 ); name = misc; sourceTree = ""; }; + 6E78DDAE9D7F453F48DBC404 = { isa = PBXGroup; children = ( + 0CCFFE7CFFC883C81D7D9441, + 4A136908B5FF7712EBAD9981 ); name = application; sourceTree = ""; }; + 5D2B9D64AC52724E6229C9DF = { isa = PBXGroup; children = ( + 350BF12B579608D2FBAD6AFC, + 0900F84A5A94029BABD4F3D0, + 8D3354A1E9C02DED513A4355, + DDF271285760C5642E3D3346, + EF96A2B04F061E2DDCDD45D7, + 9EA1E13123758B126A76513B, + 5E9303619B553ED5D8014075, + 9B8C279F7E8FF6BCE7EFFF64, + D0868A6AA9193202A16F7B5D, + 984AEFF53886155F33D2F336, + E1B8E23E7491C09D6708018C, + 49745E79E63C5B9BC9A57AB1, + 021EAA7FB2AF6D2F19996A6D, + C87D1CD195A69D0FC2BD3F33, + ECAB1F5B50EACFEBDFC11A40, + EBBA13C5C542DF0F8EFB826D ); name = native; sourceTree = ""; }; + FB598CA779C7221F5B504316 = { isa = PBXGroup; children = ( + 1114A6CEDF1F72662105AFC7, + D23B6D10C1D76B5F36065122, + 63EF1E5C383925B43D88E623, + 16BDAFE366F09A32579D877C, + 1BA54372572881E7B0D0C803, + 40E7FDCF5675A7C9DBE4A370, + 78E0AEA42C73EDD79029FAAD, + 1064D4C7FF463C437CE721B1, + 4166E01E2CADE6032D40685B, + 8E98E4F1FA2DB3BEB880470D, + A1E2976CE853750FF33BD8F2, + 8A570D9D51DBC95AED850EE6, + 17482FACCDAB45936C284B3B, + CA85555DF7856DBC586ED01E, + 223074080D125D810EB5A020, + 6E78DDAE9D7F453F48DBC404, + 5D2B9D64AC52724E6229C9DF, + 336105F72E57EF2412E2D362, + 79892EC92519C81D7E02BDE1 ); name = "juce_gui_basics"; sourceTree = ""; }; + E2C64F09882744C8505B35EA = { isa = PBXGroup; children = ( + C18FB4B3120557AA4EAFF405, + 335BCF6E40FD20E31CFFCCE4, + 6ABB704327024442CCD18ADD, + 9CAC7B4DFD297F29680FE739, + 2CFC336DBA57275297F8966D, + F1F5AB75B6F813F0BAE8ACB6, + 4FF0EE53340B306B09230CAB, + 80FAE594348676A04BACD99F ); name = "code_editor"; sourceTree = ""; }; + 5DD3537008E371C199E90778 = { isa = PBXGroup; children = ( + 394A564D17F7FC26D45DD047, + 8628FF7B8F05A904C8C59EC4 ); name = documents; sourceTree = ""; }; + 86087062EF4A53F0DBC78299 = { isa = PBXGroup; children = ( + BB8F5735542B54CA9DE6F353, + 06462D0D2425BAF020472691, + EF60BF8888F0B0EA48E9FF09 ); name = embedding; sourceTree = ""; }; + 16C95E981AC2D3FD64DE013E = { isa = PBXGroup; children = ( + A8AF4B0BFECD9F39E1FE4E09, + 8E169B97526DD9CCDE1BBA98, + C3AAD3FBAACDA8F0B7BB8FF9, + 0838AE8A8B614755B5F31595, + DF0B3A4D5C217DA0283223BF, + BDA6E687818B0F2DC22337CB, + E7AF7E2ECFDAFF3CB186986D, + 0C516DEBD52810652C1B4F87, + BB571C0DB322805E8CC5FAFC, + 5E2C8035BF527680811D1CF5, + F7F0A21852B09E8081C1DD93, + 76758FB3B866000523F0B144, + 8ED90DCD63DA37E5D56402E3, + 216C43FE64E807DFDDE137BB, + 66F5603A6C984CEFD02530D3, + 2D8CAD385E5572C8E790B98E ); name = misc; sourceTree = ""; }; + 79B97A440791D2F786E3AA4D = { isa = PBXGroup; children = ( + CC659F7C5C7BBB1483D22927, + 7EE4DAABDC4CF9F13A3B5541, + 31F03E9FBCC8C55504B03502, + D6272EF2E6816B659ABFBDA6, + D4D1E893C5144CF41D381E0E, + 8517608903BDD585564A2BD9, + 0754AE37A2269C502075E46B, + ACDF26585BEEE33D70E19A3C, + B8DF81CC9D4E0BE71C3AF558, + DC7333AE4FD5C16D3B49EE77, + D6A25A64B90CA2125D9D31B8, + 3513EF2F4FDDA4BB173BA3D7 ); name = native; sourceTree = ""; }; + 4ECC2091D369DED12DF6F35B = { isa = PBXGroup; children = ( + E2C64F09882744C8505B35EA, + 5DD3537008E371C199E90778, + 86087062EF4A53F0DBC78299, + 16C95E981AC2D3FD64DE013E, + 79B97A440791D2F786E3AA4D, + A28DB7EF92412F8484B88A07, + 2CBEEB3DDE7452AFAA496A53 ); name = "juce_gui_extra"; sourceTree = ""; }; + 8ECD177FC31E505CF1234162 = { isa = PBXGroup; children = ( + 752E69ECB400EFBC66DB8081, + 7D4A55601B7F8AB486B0AF21, + 6CF6DF68577964FD68EFB132, + FDCAF8B0857EC94103B91E9E, + 8C46F1B244F115E716B37147, + 6348A0AF83CD2B08A0B0F867, + 8E7AC08D09000F53F4C123CC, + ADCF2FE48BE727BF37B3C817, + 4A0BF982E2E874D2FEC6073A, + 3F8F763B8A07A2EE8D42C0C2, + EAC2B53916B041FEC59E050C, + B67D221133A97DC1C2C83C6F, + 1F61F541D6F0256136E4F37B, + 267AFF098D4880F1941B5201, + E830ACDAC41A38A04A16E2CD, + 39A9EBDF9FF3E480CD2B43EB, + 3FA6827CE8208A2676F7D89D, + FFBCB888FCE740B6BFE2835B, + 11E656746B2425A8E99C2B1F, + E392DA2568D4143CE19A9A2F, + B785A355901939FBFC107581 ); name = opengl; sourceTree = ""; }; + 0379222A65FDF46332F51183 = { isa = PBXGroup; children = ( + DDC862F5672CFD8794EA65BC, + C8C2FA6F235AB6AA44027FAE, + 03944A3451E95129394471C3, + 6D365652129D06390251A09D, + FF28767B560C00EABF1D1C73, + E2EE80FAFA0DADF6D8AD8EA0, + FA442E5370C59BC201129D2D ); name = native; sourceTree = ""; }; + D5D115C9893CF02BF14D5AC0 = { isa = PBXGroup; children = ( + 8ECD177FC31E505CF1234162, + 0379222A65FDF46332F51183, + B2C2E0F7737F05D71DC9CB1B, + 7B799825EC1230F6618EC6FA ); name = "juce_opengl"; sourceTree = ""; }; + B6518018E1268AD0E306E052 = { isa = PBXGroup; children = ( + D461C49014F6BD834CCB7E79, + B0535668713BC274381E1916, + 0DE4341F24550CC6009036DC, + F20C13E9ABA55C434579CDEE, + BECD79B159F94076CCF77238, + 1E588EC96A4D32BF0C19F169, + 50E4113B846C3F50715436BE, + FB598CA779C7221F5B504316, + 4ECC2091D369DED12DF6F35B, + D5D115C9893CF02BF14D5AC0 ); name = "Juce Modules"; sourceTree = ""; }; + C05820C87EF15292AA9DF609 = { isa = PBXGroup; children = ( + BC0A05397FE514F1AE6B3436, + E5F79D13171E0F28729529DD, + 8577418313DD8B1192FDD61D, + FBD0A4CCB4013E8B8AA653E2, + BA641413905F4396597FDF78, + 23E81037EDC6EBA8A4145A66, + 75A33066D1965DA1A60D41B0, + 5D2E40E321F1A2340FB42A05, + 5FBE2E2D25174AF84CAB065C, + 91157413471588AA9BBA75D7, + 007AEF97B8A9D76A0A2D83FC, + 76566BC742E2FB1F6FDC34F5, + 8CA21E32C250B212F23EA8AF, + 743847CB7587F825B89E6FE8 ); name = "Juce Library Code"; sourceTree = ""; }; + 1E79F78D63E48231E8EE6A98 = { isa = PBXGroup; children = ( + F408D8EEB8B3503EC6442162, + 283FF67DF916C041CE17E244, + 55010ADB4310C9FF2CD11D52 ); name = Resources; sourceTree = ""; }; + 13114A8A06EA75A50EE19833 = { isa = PBXGroup; children = ( + 1A9B74287470FD1944123E26, + 7964EC4FD4E5860CF85469A6, + DF870F58DC21D8A032AE4D03, + 5BC3C1BA534425DE943BCA22, + 9DEC36437E061C38E07BAC75, + 20BA5BC9BB93D1041D8F4C73, + 3DFDF8135971D71B8889E84B, + 6606A45FBF92643F83F78021, + 7BBF33364D3B65730CEAD5F1, + F07FDD832AD269D84A40DAF1, + 5EDDEE17AD20B0C75DF6DF12 ); name = Frameworks; sourceTree = ""; }; + 6C350903DFBBB0A3EBFB29CC = { isa = PBXGroup; children = ( + 90E8A67FBC9B5B91FEB780F5 ); name = Products; sourceTree = ""; }; + A688FB8FEAB02AF9705DCC1C = { isa = PBXGroup; children = ( + BB858467B2CAC483468A8AA8, + B6518018E1268AD0E306E052, + C05820C87EF15292AA9DF609, + 1E79F78D63E48231E8EE6A98, + 13114A8A06EA75A50EE19833, + 6C350903DFBBB0A3EBFB29CC ); name = Source; sourceTree = ""; }; + D064BAE7941DCA67638B6779 = { isa = XCBuildConfiguration; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + HEADER_SEARCH_PATHS = "../../JuceLibraryCode ../../../juce/modules $(inherited)"; + GCC_OPTIMIZATION_LEVEL = 0; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Applications"; + CONFIGURATION_BUILD_DIR = "$(PROJECT_DIR)/build/$(CONFIGURATION)"; + MACOSX_DEPLOYMENT_TARGET_ppc = 10.4; + SDKROOT_ppc = macosx10.5; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_LINK_OBJC_RUNTIME = NO; + COMBINE_HIDPI_IMAGES = YES; + OTHER_LDFLAGS = "/usr/local/lib/liblo.a"; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_PREPROCESSOR_DEFINITIONS = ( + "_DEBUG=1", + "DEBUG=1", + "JUCER_XCODE_MAC_F6D2F4CF=1"); }; name = Debug; }; + 33B8957D355F89111F5FF5AE = { isa = XCBuildConfiguration; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + HEADER_SEARCH_PATHS = "../../JuceLibraryCode ../../../juce/modules $(inherited)"; + GCC_OPTIMIZATION_LEVEL = s; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Applications"; + CONFIGURATION_BUILD_DIR = "$(PROJECT_DIR)/build/$(CONFIGURATION)"; + MACOSX_DEPLOYMENT_TARGET_ppc = 10.4; + SDKROOT_ppc = macosx10.5; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_LINK_OBJC_RUNTIME = NO; + COMBINE_HIDPI_IMAGES = YES; + OTHER_LDFLAGS = "/usr/local/lib/liblo.a"; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + DEAD_CODE_STRIPPING = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "_NDEBUG=1", + "NDEBUG=1", + "JUCER_XCODE_MAC_F6D2F4CF=1"); }; name = Release; }; + 208CA00FEE6920E1D9A18E62 = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + GCC_C_LANGUAGE_STANDARD = c99; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GCC_WARN_MISSING_PARENTHESES = YES; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; + WARNING_CFLAGS = -Wreorder; + GCC_MODEL_TUNING = G5; + GCC_INLINES_ARE_PRIVATE_EXTERN = YES; + ZERO_LINK = NO; + DEBUG_INFORMATION_FORMAT = "dwarf"; + PRODUCT_NAME = "TouchKeys"; }; name = Debug; }; + 581B2A3779A20392FD055C39 = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + GCC_C_LANGUAGE_STANDARD = c99; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GCC_WARN_MISSING_PARENTHESES = YES; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; + WARNING_CFLAGS = -Wreorder; + GCC_MODEL_TUNING = G5; + GCC_INLINES_ARE_PRIVATE_EXTERN = YES; + ZERO_LINK = NO; + DEBUG_INFORMATION_FORMAT = "dwarf"; + PRODUCT_NAME = "TouchKeys"; }; name = Release; }; + 5CD567AF6D8BF6EDE3603F6C = { isa = XCConfigurationList; buildConfigurations = ( + 208CA00FEE6920E1D9A18E62, + 581B2A3779A20392FD055C39 ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; + 2AA133E6B7020EDFA692D765 = { isa = XCConfigurationList; buildConfigurations = ( + D064BAE7941DCA67638B6779, + 33B8957D355F89111F5FF5AE ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; + 2D66BEDF1389F7D6E2C1AB3A = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + C5AF559E110329B9AB35DFCB, + 2B9C3DDF5283C5EFF1BC924A ); runOnlyForDeploymentPostprocessing = 0; }; + A03E7D17BA28722252A8596E = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + B8EE628D560C9E474792128A, + 1A85E080026A7A0DF0521F27, + CD4F6761CDABB836FBADCD80, + 2378CAD03E1C80BF0AB4AAF5, + 998FC7F9C3E8817D8C617391, + BA527B7D0D87CA5A51EF0D17, + B3470DC81675B3D490C27CFD, + 5F6E53AD9FA709E7146A1CE6, + BE6B15C227B2372ACE438EC8, + 13F86C7E26FBFDC47423240D, + 0F57CE11332869C573488442, + 0B15BCE918EEF2CCA0AEA482, + C07B7D53DED5507FB71A2686, + 310713516FB26036F129F9B4, + 8FBDE042A025832E21E6F8F4, + BB430A3EF5BE9214B1032DDD, + 3BF49ACD7F6CF44414FB5922, + 222381A07D9F4638272B89EF, + 12510AB6876158F044CAAD7E, + 82DFEC1C0E1F1717ECFF46EF, + 2C4FDCA1E6A76506B05D37DD, + 6EA3790C69AED29FC35AED08, + 3EDCB8DC01EBCD339722C0B2, + 562759D28DA0813B92BD7FEA, + 3BCBF5B38F6056D9FE683B0E, + 0178872E496D3D0EAC27AE7E, + 9A83928E33C71ADCAE448871, + 8B6C8D046A64E8F9A7A8A8A1, + 04F763266CBDE1710ECDFBD1, + CAC2A323D111092F0ACA800D, + 0719C742CAB513BC7D9133DE, + 0A1BCC62A1753D24D01A3DAD, + 4CF799D17D4295DD3F50720D, + 0209777D29C1CF3F89FBF254, + FF44DE892280A28F67C7BFDD, + 274E9F984B46BBDBF714003B, + BA8E15B815FCC3C7830C972E, + 1AEFD23290811D94FB840E74, + 5E0BF5CD6F5667E5A0C37651, + 64F134ABEC30EA26D5473D34, + 53E5A8D73743B36758DA4DA4, + FF8B3EA68E9255C839ABA3F8, + 384EC6340C198680B166A0A6, + BA1577A5D5903CDC1BCFAB06, + B98E92A0AAE513E18217810A, + A526339B267B82C838D28D09, + 5A0669E021464C9CF05C2B95, + 1FDA7AEB064670D6A6B1E5A9, + E1B3A08EBE789ABADC0C025E, + 9261B00A2C5E7187B5C04319, + 2FB5C71C709DD3E25C6CC541, + B74FCF91BC16623F02F69D86, + 8394B72883ACCC5CB2A13768, + 5492D1307B92C3F63B9EDF09, + E810879EB266795004A4C22F, + F68DD438981A3BA730A626CB, + C4A41EFBBFFC08EC2CC75C92, + C7C650DB080B12CD2552EC3B, + F44235BA2064C306B810CE62, + 80917C6EBEAD3F8DF0C99FD3, + 52944F2FAC4CEBFB17FB29E4, + D88B64FB4066D913682D5BA3 ); runOnlyForDeploymentPostprocessing = 0; }; + F7397085463A6685B1FBF65E = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4078BC0343B4DFB6F9816BD5, + 40646EF394D495C462E347F1, + 63154C3F49640855CA89CB9B, + 2985C4121F644A826FC287AE, + 1A30D1B8526CD3E1AB79110C, + 30C3A2842A3EA665887A7CC8, + FA58715E881C0982BF8E2FCD, + 853FB568630B7E920E30E0EE, + C3F1C6DDE2A344D657712C75, + BADB457195977038A2BF09A4, + D05E8CCFCD6C2065EDE16DD6 ); runOnlyForDeploymentPostprocessing = 0; }; + B9F5F2231C12730B54095416 = { isa = PBXNativeTarget; buildConfigurationList = 2AA133E6B7020EDFA692D765; buildPhases = ( + 2D66BEDF1389F7D6E2C1AB3A, + A03E7D17BA28722252A8596E, + F7397085463A6685B1FBF65E ); buildRules = ( ); dependencies = ( ); name = TouchKeys; productName = TouchKeys; productReference = 90E8A67FBC9B5B91FEB780F5; productInstallPath = "$(HOME)/Applications"; productType = "com.apple.product-type.application"; }; + 787330A1C9FABF4487F9ECA8 = { isa = PBXProject; buildConfigurationList = 5CD567AF6D8BF6EDE3603F6C; attributes = { LastUpgradeCheck = 0440; }; compatibilityVersion = "Xcode 3.2"; hasScannedForEncodings = 0; mainGroup = A688FB8FEAB02AF9705DCC1C; projectDirPath = ""; projectRoot = ""; targets = ( B9F5F2231C12730B54095416 ); }; + }; + rootObject = 787330A1C9FABF4487F9ECA8; +} diff -r 000000000000 -r 3580ffe87dc8 Builds/MacOSX/TouchKeys.xcodeproj/project.xcworkspace/contents.xcworkspacedata --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Builds/MacOSX/TouchKeys.xcodeproj/project.xcworkspace/contents.xcworkspacedata Mon Nov 11 18:19:35 2013 +0000 @@ -0,0 +1,7 @@ + + + + + diff -r 000000000000 -r 3580ffe87dc8 Builds/MacOSX/TouchKeys.xcodeproj/project.xcworkspace/xcuserdata/apm.xcuserdatad/UserInterfaceState.xcuserstate Binary file Builds/MacOSX/TouchKeys.xcodeproj/project.xcworkspace/xcuserdata/apm.xcuserdatad/UserInterfaceState.xcuserstate has changed diff -r 000000000000 -r 3580ffe87dc8 Builds/MacOSX/TouchKeys.xcodeproj/project.xcworkspace/xcuserdata/apm.xcuserdatad/WorkspaceSettings.xcsettings --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Builds/MacOSX/TouchKeys.xcodeproj/project.xcworkspace/xcuserdata/apm.xcuserdatad/WorkspaceSettings.xcsettings Mon Nov 11 18:19:35 2013 +0000 @@ -0,0 +1,10 @@ + + + + + HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges + + SnapshotAutomaticallyBeforeSignificantChanges + + + diff -r 000000000000 -r 3580ffe87dc8 Builds/MacOSX/TouchKeys.xcodeproj/xcuserdata/apm.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Builds/MacOSX/TouchKeys.xcodeproj/xcuserdata/apm.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist Mon Nov 11 18:19:35 2013 +0000 @@ -0,0 +1,20 @@ + + + + + + + diff -r 000000000000 -r 3580ffe87dc8 Builds/MacOSX/TouchKeys.xcodeproj/xcuserdata/apm.xcuserdatad/xcschemes/TouchKeys.xcscheme --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Builds/MacOSX/TouchKeys.xcodeproj/xcuserdata/apm.xcuserdatad/xcschemes/TouchKeys.xcscheme Mon Nov 11 18:19:35 2013 +0000 @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 000000000000 -r 3580ffe87dc8 Builds/MacOSX/TouchKeys.xcodeproj/xcuserdata/apm.xcuserdatad/xcschemes/xcschememanagement.plist --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Builds/MacOSX/TouchKeys.xcodeproj/xcuserdata/apm.xcuserdatad/xcschemes/xcschememanagement.plist Mon Nov 11 18:19:35 2013 +0000 @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + TouchKeys.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + B9F5F2231C12730B54095416 + + primary + + + + + diff -r 000000000000 -r 3580ffe87dc8 Resources/tk-icon-128.png Binary file Resources/tk-icon-128.png has changed diff -r 000000000000 -r 3580ffe87dc8 Resources/tk-icon-256.png Binary file Resources/tk-icon-256.png has changed diff -r 000000000000 -r 3580ffe87dc8 Resources/tk-icon-512.png Binary file Resources/tk-icon-512.png has changed diff -r 000000000000 -r 3580ffe87dc8 Source/Display/KeyPositionGraphDisplay.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Source/Display/KeyPositionGraphDisplay.cpp Mon Nov 11 18:19:35 2013 +0000 @@ -0,0 +1,262 @@ +/* + TouchKeys: multi-touch musical keyboard control software + Copyright (c) 2013 Andrew McPherson + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + + ===================================================================== + + KeyPositionGraphDisplay.cpp: implements a graph of key position over time + for a specific key press, which is useful for analysis of continuous key + position. +*/ + +#include "KeyPositionGraphDisplay.h" +#include +#include + +// Class constants +// Display margins +const float KeyPositionGraphDisplay::kDisplaySideMargin = 0.5; +const float KeyPositionGraphDisplay::kDisplayBottomMargin = 0.5; +const float KeyPositionGraphDisplay::kDisplayTopMargin = 0.5; + +// Size of the graph area +const float KeyPositionGraphDisplay::kDisplayGraphWidth = 20.0; +const float KeyPositionGraphDisplay::kDisplayGraphHeight = 10.0; + +KeyPositionGraphDisplay::KeyPositionGraphDisplay() : +displayPixelWidth_(1.0), displayPixelHeight_(1.0), totalDisplayWidth_(1.0), totalDisplayHeight_(1.0), +xMin_(0.0), xMax_(1.0), yMin_(-0.2), yMax_(1.2), needsUpdate_(true) +{ + // Initialize OpenGL settings: 2D only + + //glMatrixMode(GL_PROJECTION); + //glDisable(GL_DEPTH_TEST); + + pressStartTimestamp_ = pressFinishTimestamp_ = releaseStartTimestamp_ = releaseFinishTimestamp_ = missing_value::missing(); + pressStartPosition_ = pressFinishPosition_ = releaseStartPosition_ = releaseFinishPosition_ = missing_value::missing(); + + totalDisplayWidth_ = kDisplaySideMargin*2 + kDisplayGraphWidth; + totalDisplayHeight_ = kDisplayTopMargin + kDisplayBottomMargin + kDisplayGraphHeight; +} + +void KeyPositionGraphDisplay::setDisplaySize(float width, float height) { + ScopedLock sl(displayMutex_); + displayPixelWidth_ = width; + displayPixelHeight_ = height; + refreshViewport(); +} + + +// Render the keyboard display + +void KeyPositionGraphDisplay::render() { + // Start with a light gray background + glClearColor(0.8, 0.8, 0.8, 1.0); + glClear(GL_COLOR_BUFFER_BIT); + glLoadIdentity(); + + float invAspectRatio = totalDisplayWidth_ / totalDisplayHeight_; + float scaleValue = 2.0 / totalDisplayWidth_; + + glScalef(scaleValue, scaleValue * invAspectRatio, scaleValue); + glTranslatef(-1.0 / scaleValue, -totalDisplayHeight_ / 2.0, 0); + glTranslatef(kDisplaySideMargin, kDisplayBottomMargin, 0.0); + + ScopedLock sl(displayMutex_); + + // Draw the region where the graph will be plotted (white with black outline) + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + glColor3f(1.0, 1.0, 1.0); + + glBegin(GL_POLYGON); + glVertex2f(0, 0); + glVertex2f(0, kDisplayGraphHeight); + glVertex2f(kDisplayGraphWidth, kDisplayGraphHeight); + glVertex2f(kDisplayGraphWidth, 0); + glEnd(); + + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + glColor3f(0.0, 0.0, 0.0); + glLineWidth(1.0); + + glBegin(GL_POLYGON); + glVertex2f(0, 0); + glVertex2f(0, kDisplayGraphHeight); + glVertex2f(kDisplayGraphWidth, kDisplayGraphHeight); + glVertex2f(kDisplayGraphWidth, 0); + glEnd(); + + // Draw gray lines for the 0.0 and 1.0 key positions + glColor3f(0.5, 0.5, 0.5); + glBegin(GL_LINES); + glVertex2f(0, graphToDisplayY(0.0)); + glVertex2f(kDisplayGraphWidth, graphToDisplayY(0.0)); + glEnd(); + glBegin(GL_LINES); + glVertex2f(0, graphToDisplayY(1.0)); + glVertex2f(kDisplayGraphWidth, graphToDisplayY(1.0)); + glEnd(); + + // Draw the graph of position over time (if data exists) + if(!keyPositions_.empty() && !keyTimestamps_.empty()) { + glColor3f(0.0, 0.0, 0.0); + glBegin(GL_LINE_STRIP); + for(int index = 0; index < keyPositions_.size() && index < keyTimestamps_.size(); index++) { + glVertex2f(graphToDisplayX(keyTimestamps_[index]), graphToDisplayY(keyPositions_[index])); + } + glEnd(); + } + + // Draw the important features, if they exist + if(!missing_value::isMissing(pressStartTimestamp_)) { + glColor3f(0.0, 0.0, 1.0); + glBegin(GL_LINES); + glVertex2f(graphToDisplayX(pressStartTimestamp_), 0); + glVertex2f(graphToDisplayX(pressStartTimestamp_), kDisplayGraphHeight); + glEnd(); + } + if(!missing_value::isMissing(pressFinishTimestamp_)) { + glColor3f(1.0, 0.0, 0.0); + glBegin(GL_LINES); + glVertex2f(graphToDisplayX(pressFinishTimestamp_), 0); + glVertex2f(graphToDisplayX(pressFinishTimestamp_), kDisplayGraphHeight); + glEnd(); + } + if(!missing_value::isMissing(releaseStartTimestamp_)) { + glColor3f(0.0, 0.0, 1.0); + glBegin(GL_LINES); + glVertex2f(graphToDisplayX(releaseStartTimestamp_), 0); + glVertex2f(graphToDisplayX(releaseStartTimestamp_), kDisplayGraphHeight); + glEnd(); + } + if(!missing_value::isMissing(releaseFinishTimestamp_)) { + glColor3f(1.0, 0.0, 0.0); + glBegin(GL_LINES); + glVertex2f(graphToDisplayX(releaseFinishTimestamp_), 0); + glVertex2f(graphToDisplayX(releaseFinishTimestamp_), kDisplayGraphHeight); + glEnd(); + } + + needsUpdate_ = false; + + glFlush(); +} + +// Mouse interaction methods + +void KeyPositionGraphDisplay::mouseDown(float x, float y) { + //Point mousePoint = {x, y}; + //Point scaledPoint = screenToInternal(mousePoint); + + //needsUpdate_ = true; +} + +void KeyPositionGraphDisplay::mouseDragged(float x, float y) { + //Point mousePoint = {x, y}; + //Point scaledPoint = screenToInternal(mousePoint); + + //needsUpdate_ = true; +} + +void KeyPositionGraphDisplay::mouseUp(float x, float y) { + //Point mousePoint = {x, y}; + //Point scaledPoint = screenToInternal(mousePoint); + + //needsUpdate_ = true; +} + +void KeyPositionGraphDisplay::rightMouseDown(float x, float y) { + //Point mousePoint = {x, y}; + //Point scaledPoint = screenToInternal(mousePoint); + + //needsUpdate_ = true; +} + +void KeyPositionGraphDisplay::rightMouseDragged(float x, float y) { + //Point mousePoint = {x, y}; + //Point scaledPoint = screenToInternal(mousePoint); +} + +void KeyPositionGraphDisplay::rightMouseUp(float x, float y) { + //Point mousePoint = {x, y}; + //Point scaledPoint = screenToInternal(mousePoint); +} + +float KeyPositionGraphDisplay::graphToDisplayX(float x) { + return kDisplayGraphWidth*(x - xMin_)/(xMax_ - xMin_); +} + +float KeyPositionGraphDisplay::graphToDisplayY(float y) { + return kDisplayGraphHeight*(y - yMin_)/(yMax_ - yMin_); +} + +void KeyPositionGraphDisplay::refreshViewport() { + glViewport(0, 0, displayPixelWidth_, displayPixelHeight_); +} + +// Copy data from the circular buffer to our internal buffer for +void KeyPositionGraphDisplay::copyKeyDataFromBuffer(Node& keyBuffer, + const Node::size_type startIndex, + const Node::size_type endIndex) { + // Clear existing information + keyPositions_.clear(); + keyTimestamps_.clear(); + + Node::size_type index = startIndex; + if(index < keyBuffer.beginIndex()) + index = keyBuffer.beginIndex(); + + // Iterate through the buffer, copying positions and timestamps + while(index < endIndex && index < keyBuffer.endIndex()) { + keyPositions_.push_back(keyBuffer[index]); + keyTimestamps_.push_back(keyBuffer.timestampAt(index)); + index++; + } + + // Scale the axes according to what's being displayed. The Y axis should stay + // more or less constant (for now), but X will change depending on timestamps + xMin_ = keyTimestamps_.front(); + xMax_ = keyTimestamps_.back(); + yMin_ = -0.2; + yMax_ = 1.2; + needsUpdate_ = true; +} + +// Conversion from internal coordinate space to external pixel values and back + +// Pixel values go from 0,0 (lower left) to displayPixelWidth_, displayPixelHeight_ (upper right) +// Internal values go from -totalDisplayWidth_/2, -totalDisplayHeight_/2 (lower left) +// to totalDisplayWidth_/2, totalDisplayHeight_/2 (upper right) + +// Pixel value in --> OpenGL value out +KeyPositionGraphDisplay::Point KeyPositionGraphDisplay::screenToInternal(Point& inPoint) { + Point out; + + out.x = -totalDisplayWidth_*0.5 + (inPoint.x/displayPixelWidth_) * totalDisplayWidth_; + out.y = -totalDisplayHeight_*0.5 + (inPoint.y/displayPixelHeight_) * totalDisplayHeight_; + + return out; +} + +// OpenGL value in --> Pixel value out +KeyPositionGraphDisplay::Point KeyPositionGraphDisplay::internalToScreen(Point& inPoint) { + Point out; + + out.x = ((inPoint.x + totalDisplayWidth_*0.5)/totalDisplayWidth_) * displayPixelWidth_; + out.y = ((inPoint.y + totalDisplayHeight_*0.5)/totalDisplayHeight_) * displayPixelHeight_; + + return out; +} \ No newline at end of file diff -r 000000000000 -r 3580ffe87dc8 Source/Display/KeyPositionGraphDisplay.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Source/Display/KeyPositionGraphDisplay.h Mon Nov 11 18:19:35 2013 +0000 @@ -0,0 +1,130 @@ +/* + TouchKeys: multi-touch musical keyboard control software + Copyright (c) 2013 Andrew McPherson + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + + ===================================================================== + + KeyPositionGraphDisplay.h: implements a graph of key position over time + for a specific key press, which is useful for analysis of continuous key + position. +*/ + +#ifndef __touchkeys__KeyPositionGraphDisplay__ +#define __touchkeys__KeyPositionGraphDisplay__ + +#include +#include +#include "../JuceLibraryCode/JuceHeader.h" +#include "../TouchKeys/PianoTypes.h" +#include "../Utility/Node.h" +#include "OpenGLDisplayBase.h" + + + +// This class uses OpenGL to handle drawing of a graph showing key position +// over time, for debugging or analysis purposes. + +class KeyPositionGraphDisplay : public OpenGLDisplayBase { + // Internal data structures and constants +private: + // Display margins + static const float kDisplaySideMargin; + static const float kDisplayBottomMargin; + static const float kDisplayTopMargin; + + // Size of the graph area + static const float kDisplayGraphWidth; + static const float kDisplayGraphHeight; + + typedef struct { + float x; + float y; + } Point; + +public: + KeyPositionGraphDisplay(); + + // Setup methods for display size and keyboard range + void setDisplaySize(float width, float height); + + // Drawing methods + bool needsRender() { return needsUpdate_; } + void render(); + + // Interaction methods + void mouseDown(float x, float y); + void mouseDragged(float x, float y); + void mouseUp(float x, float y); + void rightMouseDown(float x, float y); + void rightMouseDragged(float x, float y); + void rightMouseUp(float x, float y); + + // Data update methods + void copyKeyDataFromBuffer(Node& keyBuffer, const Node::size_type startIndex, + const Node::size_type endIndex); + void setKeyPressStart(key_position position, timestamp_type timestamp) { + pressStartTimestamp_ = timestamp; + pressStartPosition_ = position; + needsUpdate_ = true; + } + void setKeyPressFinish(key_position position, timestamp_type timestamp) { + pressFinishTimestamp_ = timestamp; + pressFinishPosition_ = position; + needsUpdate_ = true; + } + void setKeyReleaseStart(key_position position, timestamp_type timestamp) { + releaseStartTimestamp_ = timestamp; + releaseStartPosition_ = position; + needsUpdate_ = true; + } + void setKeyReleaseFinish(key_position position, timestamp_type timestamp) { + releaseFinishTimestamp_ = timestamp; + releaseFinishPosition_ = position; + needsUpdate_ = true; + } + +private: + // Convert mathematical XY coordinate space to drawing positions + float graphToDisplayX(float x); + float graphToDisplayY(float y); + + void refreshViewport(); + + // Conversion from internal coordinate space to external pixel values and back + Point screenToInternal(Point& inPoint); + Point internalToScreen(Point& inPoint); + + +private: + float displayPixelWidth_, displayPixelHeight_; // Pixel resolution of the surrounding window + float totalDisplayWidth_, totalDisplayHeight_; // Size of the internal view (centered around origin) + float xMin_, xMax_, yMin_, yMax_; // Coordinates for the graph axes + + bool needsUpdate_; // Whether the keyboard should be redrawn + CriticalSection displayMutex_; // Synchronize access between data and display threads + + std::vector keyPositions_; // Positions (0-1 normalized) of the key + std::vector keyTimestamps_; // Timestamps corresponding to the above positions + + // Details on features of key motion: start, end, release, etc. + key_position pressStartPosition_, pressFinishPosition_; + timestamp_type pressStartTimestamp_, pressFinishTimestamp_; + key_position releaseStartPosition_, releaseFinishPosition_; + timestamp_type releaseStartTimestamp_, releaseFinishTimestamp_; +}; + + +#endif /* defined(__touchkeys__KeyPositionGraphDisplay__) */ diff -r 000000000000 -r 3580ffe87dc8 Source/Display/KeyboardDisplay.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Source/Display/KeyboardDisplay.cpp Mon Nov 11 18:19:35 2013 +0000 @@ -0,0 +1,696 @@ +/* + TouchKeys: multi-touch musical keyboard control software + Copyright (c) 2013 Andrew McPherson + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + + ===================================================================== + + KeyboardDisplay.cpp: displays the keyboard state, including active MIDI + notes and current touch position and size. +*/ + +#include "KeyboardDisplay.h" +#include +#include + +// Class constants + +const float KeyboardDisplay::kWhiteKeyFrontWidth = 1.0; +const float KeyboardDisplay::kBlackKeyWidth = 0.5; +const float KeyboardDisplay::kWhiteKeyFrontLength = 2.3; +const float KeyboardDisplay::kWhiteKeyBackLength = 4.1; +const float KeyboardDisplay::kBlackKeyLength = 4.0; +const float KeyboardDisplay::kInterKeySpacing = 0.1; +const float KeyboardDisplay::kAnalogSliderVerticalSpacing = 0.2; +const float KeyboardDisplay::kAnalogSliderLength = 3.0; +const float KeyboardDisplay::kAnalogSliderWidth = 0.4; +const float KeyboardDisplay::kAnalogSliderMinimumValue = -0.2; +const float KeyboardDisplay::kAnalogSliderMaximumValue = 1.2; +const float KeyboardDisplay::kAnalogSliderZeroLocation = kAnalogSliderLength * (0.0 - kAnalogSliderMinimumValue) / (kAnalogSliderMaximumValue - kAnalogSliderMinimumValue); +const float KeyboardDisplay::kAnalogSliderOneLocation = kAnalogSliderLength * (1.0 - kAnalogSliderMinimumValue) / (kAnalogSliderMaximumValue - kAnalogSliderMinimumValue); + +// Individual geometry for C, D, E, F, G, A, B, c' + +const float KeyboardDisplay::kWhiteKeyBackOffsets[9] = {0, 0.22, 0.42, 0, 0.14, 0.3, 0.44, 0.22, 0}; +const float KeyboardDisplay::kWhiteKeyBackWidths[9] = {0.6, 0.58, 0.58, 0.56, 0.56, 0.56, 0.56, 0.58, 1.0}; + +// Display margins + +const float KeyboardDisplay::kDisplaySideMargin = 0.4; +const float KeyboardDisplay::kDisplayBottomMargin = 0.8; +const float KeyboardDisplay::kDisplayTopMargin = 0.8; + +// Key shape constants + +const int KeyboardDisplay::kShapeForNote[12] = {0, -1, 1, -1, 2, 3, -1, 4, -1, 5, -1, 6}; +const int KeyboardDisplay::kWhiteToChromatic[7] = {0, 2, 4, 5, 7, 9, 11}; +const float KeyboardDisplay::kWhiteKeyFrontBackCutoff = (6.5 / 19.0); + +// Touch constants +const float KeyboardDisplay::kDisplayMinTouchSize = 0.1; +const float KeyboardDisplay::kDisplayTouchSizeScaler = 0.5; + +KeyboardDisplay::KeyboardDisplay() : lowestMidiNote_(0), highestMidiNote_(0), +totalDisplayWidth_(1.0), totalDisplayHeight_(1.0), displayPixelWidth_(1.0), displayPixelHeight_(1.0), +needsUpdate_(true), currentHighlightedKey_(-1), touchSensingEnabled_(false), analogSensorsPresent_(false) { + // Initialize OpenGL settings: 2D only + + //glMatrixMode(GL_PROJECTION); + //glDisable(GL_DEPTH_TEST); + + clearAllTouches(); + for(int i = 0; i < 128; i++) + midiActiveForKey_[i] = false; +} + +void KeyboardDisplay::setKeyboardRange(int lowest, int highest) { + if(lowest < 0 || highest < 0) + return; + + ScopedLock sl(displayMutex_); + + lowestMidiNote_ = lowest; + if(keyShape(lowest) < 0) // Lowest key must always be a white key for display to + lowest++; // render properly + + highestMidiNote_ = highest; + + // Recalculate relevant display parameters + // Display size is based on the number of white keys + + int numKeys = 0; + for(int i = lowestMidiNote_; i <= highestMidiNote_; i++) { + if(keyShape(i) >= 0) + numKeys++; + if(i >= 0 && i < 128) { + analogValueForKey_[i] = 0.0; + analogValueIsCalibratedForKey_[i] = false; + } + } + + if(numKeys == 0) { + return; + } + + // Width: N keys, N-1 interkey spaces, 2 side margins + totalDisplayWidth_ = (float)numKeys * (kWhiteKeyFrontWidth + kInterKeySpacing) + - kInterKeySpacing + 2.0 * kDisplaySideMargin; + + // Height: white key height plus top and bottom margins + if(analogSensorsPresent_) + totalDisplayHeight_ = kDisplayTopMargin + kDisplayBottomMargin + kWhiteKeyFrontLength + kWhiteKeyBackLength + + kAnalogSliderVerticalSpacing + kAnalogSliderLength; + else + totalDisplayHeight_ = kDisplayTopMargin + kDisplayBottomMargin + kWhiteKeyFrontLength + kWhiteKeyBackLength; +} + +void KeyboardDisplay::setDisplaySize(float width, float height) { + ScopedLock sl(displayMutex_); + + displayPixelWidth_ = width; + displayPixelHeight_ = height; + refreshViewport(); +} + + +// Render the keyboard display + +void KeyboardDisplay::render() { + if(lowestMidiNote_ == highestMidiNote_) + return; + + // Start with a light gray background + glClearColor(0.8, 0.8, 0.8, 1.0); + glClear(GL_COLOR_BUFFER_BIT); + glLoadIdentity(); + + float invAspectRatio = totalDisplayWidth_ / totalDisplayHeight_; //displayPixelWidth_ / displayPixelHeight_; + float scaleValue = 2.0 / totalDisplayWidth_; + + glScalef(scaleValue, scaleValue * invAspectRatio, scaleValue); + glTranslatef(-1.0 / scaleValue, -totalDisplayHeight_ / 2.0, 0); + glTranslatef(kDisplaySideMargin, kDisplayBottomMargin, 0.0); + + //ScopedLock sl(displayMutex_); + + glPushMatrix(); + + // Draw the keys themselves first, with analog values if present, then draw the touches + for(int key = lowestMidiNote_; key <= highestMidiNote_; key++) { + if(keyShape(key) >= 0) { + // White keys: draw and move the frame over for the next key + drawWhiteKey(0, 0, keyShape(key), key == lowestMidiNote_, key == highestMidiNote_, + /*(key == currentHighlightedKey_) ||*/ midiActiveForKey_[key]); + // Analog slider should be centered with respect to the back of the white key + if(analogSensorsPresent_ && keyShape(key) >= 0) { + float sliderOffset = kWhiteKeyBackOffsets[keyShape(key)] + (kWhiteKeyBackWidths[keyShape(key)] - kAnalogSliderWidth) * 0.5; + drawAnalogSlider(sliderOffset, kWhiteKeyFrontLength + kWhiteKeyBackLength + kAnalogSliderVerticalSpacing, + analogValueIsCalibratedForKey_[key], true, analogValueForKey_[key]); + } + glTranslatef(kWhiteKeyFrontWidth + kInterKeySpacing, 0, 0); + } + else { + // Black keys: draw and leave the frame in place + int previousWhiteKeyShape = keyShape(key - 1); + float offsetH = -1.0 + kWhiteKeyBackOffsets[previousWhiteKeyShape] + kWhiteKeyBackWidths[previousWhiteKeyShape]; + float offsetV = kWhiteKeyFrontLength + kWhiteKeyBackLength - kBlackKeyLength; + + glTranslatef(offsetH, offsetV, 0.0); + drawBlackKey(0, 0, /*(key == currentHighlightedKey_) ||*/ midiActiveForKey_[key]); + if(analogSensorsPresent_) { + drawAnalogSlider((kBlackKeyWidth - kAnalogSliderWidth) * 0.5, kBlackKeyLength + kAnalogSliderVerticalSpacing, + analogValueIsCalibratedForKey_[key], false, analogValueForKey_[key]); + } + glTranslatef(-offsetH, -offsetV, 0.0); + } + } + + // Restore to the original location we used when drawing the keys + glPopMatrix(); + + // Transfer the touch display data from storage buffer to a local copy we can use for display. + // This avoids OpenGL calls happening while the mutex is locked, which stalls the data producer thread + displayMutex_.enter(); + memcpy(currentTouchesMirror_, currentTouches_, 128*sizeof(TouchInfo)); + displayMutex_.exit(); + + // Draw touches + for(int key = lowestMidiNote_; key <= highestMidiNote_; key++) { + if(keyShape(key) >= 0) { + // Check whether there are any current touches for this key + //if(currentTouches_.count(key) > 0) { + if(currentTouchesMirror_[key].active) { + TouchInfo& t = currentTouchesMirror_[key]; + + if(t.locV1 >= 0) + drawWhiteTouch(0, 0, keyShape(key), t.locH, t.locV1, t.size1); + if(t.locV2 >= 0) + drawWhiteTouch(0, 0, keyShape(key), t.locH, t.locV2, t.size2); + if(t.locV3 >= 0) + drawWhiteTouch(0, 0, keyShape(key), t.locH, t.locV3, t.size3); + } + + glTranslatef(kWhiteKeyFrontWidth + kInterKeySpacing, 0, 0); + } + else { + // Black keys: draw and leave the frame in place + int previousWhiteKeyShape = keyShape(key - 1); + float offsetH = -1.0 + kWhiteKeyBackOffsets[previousWhiteKeyShape] + kWhiteKeyBackWidths[previousWhiteKeyShape]; + float offsetV = kWhiteKeyFrontLength + kWhiteKeyBackLength - kBlackKeyLength; + + glTranslatef(offsetH, offsetV, 0.0); + + // Check whether there are any current touches for this key + //if(currentTouches_.count(key) > 0) { + if(currentTouchesMirror_[key].active) { + TouchInfo& t = currentTouchesMirror_[key]; + + if(t.locV1 >= 0) + drawBlackTouch(0, 0, t.locH, t.locV1, t.size1); + if(t.locV2 >= 0) + drawBlackTouch(0, 0, t.locH, t.locV2, t.size2); + if(t.locV3 >= 0) + drawBlackTouch(0, 0, t.locH, t.locV3, t.size3); + } + + glTranslatef(-offsetH, -offsetV, 0.0); + } + } + + needsUpdate_ = false; + + glFlush(); +} + +// Mouse interaction methods + +void KeyboardDisplay::mouseDown(float x, float y) { + Point mousePoint = {x, y}; + Point scaledPoint = screenToInternal(mousePoint); + + currentHighlightedKey_ = keyForLocation(scaledPoint); + needsUpdate_ = true; +} + +void KeyboardDisplay::mouseDragged(float x, float y) { + Point mousePoint = {x, y}; + Point scaledPoint = screenToInternal(mousePoint); + + currentHighlightedKey_ = keyForLocation(scaledPoint); + needsUpdate_ = true; +} + +void KeyboardDisplay::mouseUp(float x, float y) { + //Point mousePoint = {x, y}; + //Point scaledPoint = screenToInternal(mousePoint); + + // When the mouse is released, see if it was over a key. If so, take any action + // associated with clicking that key. + + if(currentHighlightedKey_ != -1) + keyClicked(currentHighlightedKey_); + + //currentHighlightedKey_ = -1; + needsUpdate_ = true; +} + +void KeyboardDisplay::rightMouseDown(float x, float y) { + Point mousePoint = {x, y}; + Point scaledPoint = screenToInternal(mousePoint); + + int key = keyForLocation(scaledPoint); + if(key != -1) + keyRightClicked(key); + + needsUpdate_ = true; +} + +void KeyboardDisplay::rightMouseDragged(float x, float y) { + //Point mousePoint = {x, y}; + //Point scaledPoint = screenToInternal(mousePoint); +} + +void KeyboardDisplay::rightMouseUp(float x, float y) { + //Point mousePoint = {x, y}; + //Point scaledPoint = screenToInternal(mousePoint); +} + +void KeyboardDisplay::keyClicked(int key) { + +} + +void KeyboardDisplay::keyRightClicked(int key) { + +} + +// Insert new touch information for the given key and request a display update. + +void KeyboardDisplay::setTouchForKey(int key, const KeyTouchFrame& touch) { + if(key < lowestMidiNote_ || key > highestMidiNote_) + return; + + ScopedLock sl(displayMutex_); + + //TouchInfo t = {touch.locH, touch.locs[0], touch.locs[1], touch.locs[2], touch.sizes[0], touch.sizes[1], touch.sizes[2]}; + //currentTouches_[key] = t; + currentTouches_[key] = {true, touch.locH, touch.locs[0], touch.locs[1], touch.locs[2], touch.sizes[0], touch.sizes[1], touch.sizes[2]}; + + needsUpdate_ = true; +} + +// Clear touch information for this key + +void KeyboardDisplay::clearTouchForKey(int key) { + ScopedLock sl(displayMutex_); + + //currentTouches_.erase(key); + currentTouches_[key].active = 0; + + needsUpdate_ = true; +} + +// Clear all current touch information + +void KeyboardDisplay::clearAllTouches() { + ScopedLock sl(displayMutex_); + + //currentTouches_.clear(); + for(int i = 0; i < 128; i++) + currentTouches_[i].active = false; + + needsUpdate_ = true; +} + +// Indicate whether the given key is calibrated or not + +void KeyboardDisplay::setAnalogCalibrationStatusForKey(int key, bool isCalibrated) { + if(key < 0 || key > 127) + return; + analogValueIsCalibratedForKey_[key] = isCalibrated; + needsUpdate_ = true; +} + +// Set the current value of the analog sensor for the given key. +// Whether calibrated or not, the data should be in the range 0.0-1.0 +// with a bit of room for deviation outside that range (i.e. for extra key +// pressure > 1.0, or for resting key states slightly miscalibrated < 0.0). + +void KeyboardDisplay::setAnalogValueForKey(int key, float value) { + if(key < 0 || key > 127) + return; + analogValueForKey_[key] = value; + needsUpdate_ = true; +} + +// Clear all the analog data for all keys +void KeyboardDisplay::clearAnalogData() { + for(int key = 0; key < 128; key++) { + analogValueForKey_[key] = 0.0; + } + needsUpdate_ = true; +} + +void KeyboardDisplay::setMidiActive(int key, bool active) { + if(key < 0 || key > 127) + return; + midiActiveForKey_[key] = active; + needsUpdate_ = true; +} + +void KeyboardDisplay::clearMidiData() { + for(int key = 0; key < 128; key++) + midiActiveForKey_[key] = false; + needsUpdate_ = true; +} + +// Indicate whether a given key has touch sensing capability + +void KeyboardDisplay::setTouchSensorPresentForKey(int key, bool present) { + if(key < 0 || key > 127 || !touchSensingEnabled_) + return; + touchSensingPresentOnKey_[key] = present; +} + +// Indicate whether touch sensing is active at all on the keyboard. +// Clear all key-specific information on whether a touch-sensing key is connected + +void KeyboardDisplay::setTouchSensingEnabled(bool enabled) { + touchSensingEnabled_ = enabled; + + for(int i = 0; i < 128; i++) + touchSensingPresentOnKey_[i] = false; +} + +// Draw the outline of a white key. Shape ranges from 0-7, giving the type of white key to draw +// Coordinates give the lower-left corner of the key + +void KeyboardDisplay::drawWhiteKey(float x, float y, int shape, bool first, bool last, bool highlighted) { + // First and last keys will have special geometry since there is no black key below + // Figure out the precise geometry in this case... + + float backOffset, backWidth; + + if(first) { + backOffset = 0.0; + backWidth = kWhiteKeyBackOffsets[shape] + kWhiteKeyBackWidths[shape]; + } + else if(last) { + backOffset = kWhiteKeyBackOffsets[shape]; + backWidth = 1.0 - kWhiteKeyBackOffsets[shape]; + } + else { + backOffset = kWhiteKeyBackOffsets[shape]; + backWidth = kWhiteKeyBackWidths[shape]; + } + + // First draw white fill as two squares + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + if(highlighted) + glColor3f(1.0, 0.8, 0.8); + else + glColor3f(1.0, 1.0, 1.0); + glBegin(GL_QUADS); + + glVertex2f(x, y); + glVertex2f(x, y + kWhiteKeyFrontLength); + glVertex2f(x + kWhiteKeyFrontWidth, y + kWhiteKeyFrontLength); + glVertex2f(x + kWhiteKeyFrontWidth, y); + + glVertex2f(x + backOffset, y + kWhiteKeyFrontLength); + glVertex2f(x + backOffset, y + kWhiteKeyFrontLength + kWhiteKeyBackLength); + glVertex2f(x + backOffset + backWidth, y + kWhiteKeyFrontLength + kWhiteKeyBackLength); + glVertex2f(x + backOffset + backWidth, y + kWhiteKeyFrontLength); + + glEnd(); + + // Now draw the outline as black line segments + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + glColor3f(0.0, 0.0, 0.0); + glBegin(GL_POLYGON); + + glVertex2f(x, y); + glVertex2f(x, y + kWhiteKeyFrontLength); + glVertex2f(x + backOffset, y + kWhiteKeyFrontLength); + glVertex2f(x + backOffset, y + kWhiteKeyFrontLength + kWhiteKeyBackLength); + glVertex2f(x + backOffset + backWidth, y + kWhiteKeyFrontLength + kWhiteKeyBackLength); + glVertex2f(x + backOffset + backWidth, y + kWhiteKeyFrontLength); + glVertex2f(x + kWhiteKeyFrontWidth, y + kWhiteKeyFrontLength); + glVertex2f(x + kWhiteKeyFrontWidth, y); + + glEnd(); +} + +// Draw the outline of a black key, given its lower-left corner + +void KeyboardDisplay::drawBlackKey(float x, float y, bool highlighted) { + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + if(highlighted) + glColor3f(0.7, 0.0, 0.0); + else + glColor3f(0.0, 0.0, 0.0); // Display color black + glBegin(GL_POLYGON); + + glVertex2f(x, y); + glVertex2f(x, y + kBlackKeyLength); + glVertex2f(x + kBlackKeyWidth, y + kBlackKeyLength); + glVertex2f(x + kBlackKeyWidth, y); + + glEnd(); +} + +// Draw a circle indicating a touch on the white key surface + +void KeyboardDisplay::drawWhiteTouch(float x, float y, int shape, float touchLocH, float touchLocV, float touchSize) { + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + glColor3f(1.0, 0.0, 1.0); + + glBegin(GL_POLYGON); + if(/*touchLocV < kWhiteKeyFrontBackCutoff && */touchLocH >= 0.0) { // FIXME: find a more permanent solution + // Here, the touch is in a location that has both horizontal and vertical information. + for(int i = 0; i < 360; i += 5) { + glVertex2f(x + cosf((float)i*3.14159/180.0)*(kDisplayMinTouchSize + touchSize*kDisplayTouchSizeScaler) + + touchLocH*kWhiteKeyFrontWidth, + y + sinf((float)i*3.14159/180.0)*(kDisplayMinTouchSize + touchSize*kDisplayTouchSizeScaler) + + kWhiteKeyFrontLength*(touchLocV/kWhiteKeyFrontBackCutoff)); + } + } + else { + // The touch is in the back part of the key, or for some reason lacks horizontal information + for(int i = 0; i < 360; i += 5) { + glVertex2f(x + cosf((float)i*3.14159/180.0)*(kDisplayMinTouchSize + touchSize*kDisplayTouchSizeScaler) + + kWhiteKeyBackOffsets[shape] + kWhiteKeyBackWidths[shape]/2, + y + sinf((float)i*3.14159/180.0)*(kDisplayMinTouchSize + touchSize*kDisplayTouchSizeScaler) + + kWhiteKeyFrontLength + (kWhiteKeyBackLength* + ((touchLocV-kWhiteKeyFrontBackCutoff)/(1.0-kWhiteKeyFrontBackCutoff)))); + } + } + glEnd(); +} + +// Draw a circle indicating a touch on the black key surface + +void KeyboardDisplay::drawBlackTouch(float x, float y, float touchLocH, float touchLocV, float touchSize) { + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + glColor3f(0.0, 1.0, 0.0); + + glBegin(GL_POLYGON); + + if(touchLocH < 0.0) + touchLocH = 0.5; + + for(int i = 0; i < 360; i += 5) { + glVertex2f(x + cosf((float)i*3.14159/180.0)*(kDisplayMinTouchSize + touchSize*kDisplayTouchSizeScaler) + + touchLocH * kBlackKeyWidth, + y + sinf((float)i*3.14159/180.0)*(kDisplayMinTouchSize + touchSize*kDisplayTouchSizeScaler) + kBlackKeyLength*touchLocV); + } + + glEnd(); +} + +// Draw a slider bar indicating the current key analog position + +void KeyboardDisplay::drawAnalogSlider(float x, float y, bool calibrated, bool whiteKey, float value) { + // First some gray lines indicating the 0.0 and 1.0 marks + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + glColor3f(0.5, 0.5, 0.5); + + glBegin(GL_POLYGON); + glVertex2f(x, y + kAnalogSliderZeroLocation); + glVertex2f(x, y + kAnalogSliderOneLocation); + glVertex2f(x + kAnalogSliderWidth, y + kAnalogSliderOneLocation); + glVertex2f(x + kAnalogSliderWidth, y + kAnalogSliderZeroLocation); + glEnd(); + + // Draw a red box at the top for uncalibrated values + if(!calibrated) { + glColor3f(1.0, 0.0, 0.0); + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + glBegin(GL_POLYGON); + glVertex2f(x, y + kAnalogSliderOneLocation); + glVertex2f(x, y + kAnalogSliderLength); + glVertex2f(x + kAnalogSliderWidth, y + kAnalogSliderLength); + glVertex2f(x + kAnalogSliderWidth, y + kAnalogSliderOneLocation); + glEnd(); + } + + // Next the filled part indicating the specific value (same color as touches), then the outline + if(whiteKey) + glColor3f(1.0, 0.0, 1.0); + else + glColor3f(0.0, 1.0, 0.0); + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + glBegin(GL_POLYGON); + + float locationForValue = kAnalogSliderLength * (value - kAnalogSliderMinimumValue) / (kAnalogSliderMaximumValue - kAnalogSliderMinimumValue); + if(locationForValue < 0.0) + locationForValue = 0.0; + if(locationForValue > kAnalogSliderLength) + locationForValue = kAnalogSliderLength; + + // Draw solid box from 0.0 to current value + glVertex2f(x, y + kAnalogSliderZeroLocation); + glVertex2f(x, y + locationForValue); + glVertex2f(x + kAnalogSliderWidth, y + locationForValue); + glVertex2f(x + kAnalogSliderWidth, y + kAnalogSliderZeroLocation); + glEnd(); + + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + glColor3f(0.0, 0.0, 0.0); + + glBegin(GL_POLYGON); + glVertex2f(x, y); + glVertex2f(x, y + kAnalogSliderLength); + glVertex2f(x + kAnalogSliderWidth, y + kAnalogSliderLength); + glVertex2f(x + kAnalogSliderWidth, y); + glEnd(); +} + +void KeyboardDisplay::refreshViewport() { + //glViewport(0, 0, displayPixelWidth_, displayPixelHeight_); +} + +// Conversion from internal coordinate space to external pixel values and back + +// Pixel values go from 0,0 (lower left) to displayPixelWidth_, displayPixelHeight_ (upper right) +// Internal values go from -totalDisplayWidth_/2, -totalDisplayHeight_/2 (lower left) +// to totalDisplayWidth_/2, totalDisplayHeight_/2 (upper right) + +// Pixel value in --> OpenGL value out +KeyboardDisplay::Point KeyboardDisplay::screenToInternal(Point& inPoint) { + Point out; + + out.x = -totalDisplayWidth_*0.5 + (inPoint.x/displayPixelWidth_) * totalDisplayWidth_; + out.y = -totalDisplayHeight_*0.5 + (inPoint.y/displayPixelHeight_) * totalDisplayHeight_; + + return out; +} + +// OpenGL value in --> Pixel value out +KeyboardDisplay::Point KeyboardDisplay::internalToScreen(Point& inPoint) { + Point out; + + out.x = ((inPoint.x + totalDisplayWidth_*0.5)/totalDisplayWidth_) * displayPixelWidth_; + out.y = ((inPoint.y + totalDisplayHeight_*0.5)/totalDisplayHeight_) * displayPixelHeight_; + + return out; +} + +// Given an internal-coordinate representation, return the number of the key that it belongs +// in, otherwise return -1 if no key matches. + +int KeyboardDisplay::keyForLocation(Point& internalPoint) { + // First, check that the point is within the overall bounding box of the keyboard + if(internalPoint.y < -totalDisplayHeight_*0.5 + kDisplayBottomMargin || + internalPoint.y > totalDisplayHeight_*0.5 - kDisplayTopMargin) + return -1; + if(internalPoint.x < -totalDisplayWidth_*0.5 + kDisplaySideMargin || + internalPoint.x > totalDisplayWidth_*0.5 - kDisplaySideMargin) + return -1; + + // Now, look for the key region corresponding to this horizontal location + // hLoc indicates the relative distance from the beginning of the first key + + float hLoc = internalPoint.x + totalDisplayWidth_*0.5 - kDisplaySideMargin; + + if(hLoc < 0.0) + return -1; + + // normalizedHLoc indicates the index of the white key this touch is near. + float normalizedHLoc = hLoc / (kWhiteKeyFrontWidth + kInterKeySpacing); + + // Two relevant regions: front of the white keys, back of the white keys with black keys + // Distinguish them by vertical position. + + int shapeOfBottomKey = keyShape(lowestMidiNote_); // White key index of lowest key + int lowestC = (lowestMidiNote_ / 12) * 12; // C below lowest key + int whiteKeyNumber = floorf(normalizedHLoc); // Number of white key + int whiteOctaveNumber = (whiteKeyNumber + shapeOfBottomKey) / 7; // Octave the key is in + int chromaticKeyNumber = 12 * whiteOctaveNumber + kWhiteToChromatic[(whiteKeyNumber + shapeOfBottomKey) % 7]; + + // Check if we're on the front area of the white keys, and if so, ignore points located in the gaps + // between the keys + + if(internalPoint.y + totalDisplayHeight_*0.5 - kDisplayBottomMargin <= kWhiteKeyFrontLength) { + if(normalizedHLoc - floorf(normalizedHLoc) > kWhiteKeyFrontWidth / (kWhiteKeyFrontWidth + kInterKeySpacing)) + return -1; + return lowestC + chromaticKeyNumber; + } + else { + // Back of white keys, or black keys + + int whiteKeyShape = keyShape(chromaticKeyNumber); + if(whiteKeyShape < 0) // Shouldn't happen + return -1; + + float locRelativeToLeft = (normalizedHLoc - floorf(normalizedHLoc)) * (kWhiteKeyFrontWidth + kInterKeySpacing); + + // Check if we are in the back region of the white key. Handle the lowest and highest notes specially since + // the white keys are generally wider on account of no adjacent black key. + if(lowestC + chromaticKeyNumber == lowestMidiNote_) { + if(locRelativeToLeft <= kWhiteKeyBackOffsets[whiteKeyShape] + kWhiteKeyBackWidths[whiteKeyShape]) + return lowestC + chromaticKeyNumber; + } + else if(lowestC + chromaticKeyNumber == highestMidiNote_) { + if(locRelativeToLeft >= kWhiteKeyBackOffsets[whiteKeyShape]) + return lowestC + chromaticKeyNumber; + } + else if(locRelativeToLeft >= kWhiteKeyBackOffsets[whiteKeyShape] && + locRelativeToLeft <= kWhiteKeyBackOffsets[whiteKeyShape] + kWhiteKeyBackWidths[whiteKeyShape]) { + return lowestC + chromaticKeyNumber; + } + + // By now, we've established that we're not on top of a white key. See if we align to a black key. + // Watch the vertical gap between white and black keys + if(internalPoint.y + totalDisplayHeight_*0.5 - kDisplayBottomMargin <= + kWhiteKeyFrontLength + kWhiteKeyBackLength - kBlackKeyLength) + return -1; + + // Is there a black key below this white key? + if(keyShape(chromaticKeyNumber - 1) < 0) { + if(locRelativeToLeft <= kWhiteKeyBackOffsets[whiteKeyShape] - kInterKeySpacing && + lowestC + chromaticKeyNumber > lowestMidiNote_) + return lowestC + chromaticKeyNumber - 1; + } + // Or is there a black key above this white key? + if(keyShape(chromaticKeyNumber + 1) < 0) { + if(locRelativeToLeft >= kWhiteKeyBackOffsets[whiteKeyShape] + kWhiteKeyBackWidths[whiteKeyShape] + kInterKeySpacing + && lowestC + chromaticKeyNumber < highestMidiNote_) + return lowestC + chromaticKeyNumber + 1; + } + } + + // If all else fails, assume we're not on any key + return -1; +} \ No newline at end of file diff -r 000000000000 -r 3580ffe87dc8 Source/Display/KeyboardDisplay.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Source/Display/KeyboardDisplay.h Mon Nov 11 18:19:35 2013 +0000 @@ -0,0 +1,181 @@ +/* + TouchKeys: multi-touch musical keyboard control software + Copyright (c) 2013 Andrew McPherson + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + + ===================================================================== + + KeyboardDisplay.h: displays the keyboard state, including active MIDI + notes and current touch position and size. +*/ + +#ifndef KEYBOARD_DISPLAY_H +#define KEYBOARD_DISPLAY_H + +#include +#include +//#include +#include "../JuceLibraryCode/JuceHeader.h" +#include "../TouchKeys/KeyTouchFrame.h" +#include "OpenGLDisplayBase.h" + + +// This class uses OpenGL to implement the actual drawing of the piano keyboard graphics. +// Graphics include the current state of each key and the touches on the surface. + +class KeyboardDisplay : public OpenGLDisplayBase { + // Internal data structures and constants +private: + // Display dimensions, normalized to the width of one white key + + static const float kWhiteKeyFrontWidth; + static const float kBlackKeyWidth; + static const float kWhiteKeyFrontLength; + static const float kWhiteKeyBackLength; + static const float kBlackKeyLength; + static const float kInterKeySpacing; + static const float kAnalogSliderVerticalSpacing; + static const float kAnalogSliderLength; + static const float kAnalogSliderWidth; + static const float kAnalogSliderMinimumValue; + static const float kAnalogSliderMaximumValue; + static const float kAnalogSliderZeroLocation; + static const float kAnalogSliderOneLocation; + + // Individual geometry for C, D, E, F, G, A, B, c' + + static const float kWhiteKeyBackOffsets[9]; + static const float kWhiteKeyBackWidths[9]; + + // Display margins + + static const float kDisplaySideMargin; + static const float kDisplayBottomMargin; + static const float kDisplayTopMargin; + + // Key shape constants + + static const int kShapeForNote[12]; + static const int kWhiteToChromatic[7]; + static const float kWhiteKeyFrontBackCutoff; + + // Touch constants + static const float kDisplayMinTouchSize; + static const float kDisplayTouchSizeScaler; + + + typedef struct { + bool active; + float locH; + float locV1; + float locV2; + float locV3; + float size1; + float size2; + float size3; + } TouchInfo; + + typedef struct { + float x; + float y; + } Point; + +public: + KeyboardDisplay(); + + // Setup methods for display size and keyboard range + void setKeyboardRange(int lowest, int highest); + float keyboardAspectRatio() { return totalDisplayWidth_ / totalDisplayHeight_; } + void setDisplaySize(float width, float height); + + // Drawing methods + bool needsRender() { return needsUpdate_; } + void render(); + + // Interaction methods + void mouseDown(float x, float y); + void mouseDragged(float x, float y); + void mouseUp(float x, float y); + void rightMouseDown(float x, float y); + void rightMouseDragged(float x, float y); + void rightMouseUp(float x, float y); + + // Take action associated with clicking a key. These are called within the mouse + // methods but may also be called externally. + void keyClicked(int key); + void keyRightClicked(int key); + + // State-change methods + void setTouchForKey(int key, const KeyTouchFrame& touch); + void clearTouchForKey(int key); + void clearAllTouches(); + void setAnalogCalibrationStatusForKey(int key, bool isCalibrated); + void setAnalogValueForKey(int key, float value); + void clearAnalogData(); + void setMidiActive(int key, bool active); + void clearMidiData(); + + void setAnalogSensorsPresent(bool present) { analogSensorsPresent_ = present; } + void setTouchSensorPresentForKey(int key, bool present); + void setTouchSensingEnabled(bool enabled); + +private: + void drawWhiteKey(float x, float y, int shape, bool first, bool last, bool highlighted); + void drawBlackKey(float x, float y, bool highlighted); + + void drawWhiteTouch(float x, float y, int shape, float touchLocH, float touchLocV, float touchSize); + void drawBlackTouch(float x, float y, float touchLocH, float touchLocV, float touchSize); + + void drawAnalogSlider(float x, float y, bool calibrated, bool whiteKey, float value); + + // Indicate the shape of the given MIDI note. 0-6 for white keys C-B, -1 for black keys. + // We handle unusual shaped keys at the top or bottom of the keyboard separately. + + int keyShape(int key) { + if(key < 0) return -1; + return kShapeForNote[key % 12]; + } + + void refreshViewport(); + + // Conversion from internal coordinate space to external pixel values and back + Point screenToInternal(Point& inPoint); + Point internalToScreen(Point& inPoint); + + // Figure out which key (if any) the current point corresponds to + int keyForLocation(Point& internalPoint); + +private: + + int lowestMidiNote_, highestMidiNote_; // Which keys should be displayed (use MIDI note numbers) + float totalDisplayWidth_, totalDisplayHeight_; // Size of the internal view (centered around origin) + float displayPixelWidth_, displayPixelHeight_; // Pixel resolution of the surrounding window + bool needsUpdate_; // Whether the keyboard should be redrawn + int currentHighlightedKey_; // What key is being clicked on at the moment + bool touchSensingEnabled_; // Whether touch-sensitive keys are being used + bool touchSensingPresentOnKey_[128]; // Whether the key with this MIDI note has a touch sensor + + bool analogSensorsPresent_; // Whether the given device has analog sensors at all + bool analogValueIsCalibratedForKey_[128]; // Whether the analog sensor is calibrated on this key + float analogValueForKey_[128]; // Latest analog sensor value for each key + bool midiActiveForKey_[128]; // Whether the MIDI note is on for each key + + TouchInfo currentTouches_[128]; // Touch data for each key + TouchInfo currentTouchesMirror_[128]; // Mirror of the above, used for active display + //std::map currentTouches_; // Collection of current touch data + CriticalSection displayMutex_; // Synchronize access between data and display threads +}; + +#endif /* KEYBOARD_DISPLAY_H */ \ No newline at end of file diff -r 000000000000 -r 3580ffe87dc8 Source/Display/OpenGLDisplayBase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Source/Display/OpenGLDisplayBase.h Mon Nov 11 18:19:35 2013 +0000 @@ -0,0 +1,52 @@ +/* + TouchKeys: multi-touch musical keyboard control software + Copyright (c) 2013 Andrew McPherson + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + + ===================================================================== + + OpenGLDisplayBase.h: virtual base class for a renderer that handles + arbitrary display sizes and user mouse events. +*/ + +#ifndef touchkeys_OpenGLDisplayBase_h +#define touchkeys_OpenGLDisplayBase_h + +// Virtual base class that implements some basic methods that the OS-specific +// GUI can attach to. Specific displays are subclasses of this + +class OpenGLDisplayBase { +public: + OpenGLDisplayBase() {} + + virtual ~OpenGLDisplayBase() {} + + // Setup method for display size + virtual void setDisplaySize(float width, float height) = 0; + + // Drawing methods + virtual bool needsRender() = 0; + virtual void render() = 0; + + // Interaction methods + virtual void mouseDown(float x, float y) = 0; + virtual void mouseDragged(float x, float y) = 0; + virtual void mouseUp(float x, float y) = 0; + virtual void rightMouseDown(float x, float y) = 0; + virtual void rightMouseDragged(float x, float y) = 0; + virtual void rightMouseUp(float x, float y) = 0; +}; + +#endif diff -r 000000000000 -r 3580ffe87dc8 Source/Display/OpenGLJuceCanvas.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Source/Display/OpenGLJuceCanvas.h Mon Nov 11 18:19:35 2013 +0000 @@ -0,0 +1,96 @@ +/* + TouchKeys: multi-touch musical keyboard control software + Copyright (c) 2013 Andrew McPherson + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + + ===================================================================== + + OpenGLJuceCanvas.h: Juce Component subclass which connects to the + OpenGLDisplayBase class. Provides a generic interface between Juce and + the specific OpenGL renderer. +*/ + +#ifndef __TouchKeys__OpenGLJuceCanvas__ +#define __TouchKeys__OpenGLJuceCanvas__ + +#include "../JuceLibraryCode/JuceHeader.h" +#include "OpenGLDisplayBase.h" + +#if JUCE_OPENGL + +//============================================================================== +class OpenGLJuceCanvas : public Component, + public OpenGLRenderer +{ +public: + // *** Constructor / Destructor *** + OpenGLJuceCanvas(OpenGLDisplayBase& display) : display_(display) { + openGLContext_.setRenderer (this); + openGLContext_.setComponentPaintingEnabled (true); + openGLContext_.setContinuousRepainting (true); + openGLContext_.attachTo (*this); + } + ~OpenGLJuceCanvas() { + openGLContext_.detach(); + } + + // *** OpenGL Context Methods *** + void newOpenGLContextCreated() {} + void openGLContextClosing() {} + + void mouseDown (const MouseEvent& e) + { + if(e.mods.isLeftButtonDown()) + display_.mouseDown(e.x, e.y); + else if(e.mods.isRightButtonDown()) + display_.rightMouseDown(e.x, e.y); + } + + void mouseDrag (const MouseEvent& e) + { + if(e.mods.isLeftButtonDown()) + display_.mouseDragged(e.x, e.y); + else if(e.mods.isRightButtonDown()) + display_.rightMouseDragged(e.x, e.y); + } + + void mouseUp (const MouseEvent& e) + { + if(e.mods.isLeftButtonDown()) + display_.mouseUp(e.x, e.y); + else if(e.mods.isRightButtonDown()) + display_.rightMouseUp(e.x, e.y); + } + + + void resized() { + display_.setDisplaySize(getWidth(), getHeight()); + } + + void paint (Graphics&) {} + + void renderOpenGL() + { + display_.render(); + } + +private: + OpenGLDisplayBase& display_; // Reference to the TouchKeys-specific OpenGL Display + OpenGLContext openGLContext_; +}; + +#endif /* JUCE_OPENGL */ + +#endif /* defined(__TouchKeys__OpenGLJuceCanvas__) */ diff -r 000000000000 -r 3580ffe87dc8 Source/Display/RawSensorDisplay.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Source/Display/RawSensorDisplay.cpp Mon Nov 11 18:19:35 2013 +0000 @@ -0,0 +1,188 @@ +/* + TouchKeys: multi-touch musical keyboard control software + Copyright (c) 2013 Andrew McPherson + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + + ===================================================================== + + RawSensorDisplay.cpp: simple graph for showing raw TouchKeys sensor values +*/ + +#include "RawSensorDisplay.h" +#include +#include + +// Class constants +// Display margins +const float RawSensorDisplay::kDisplaySideMargin = 0.5; +const float RawSensorDisplay::kDisplayBottomMargin = 0.5; +const float RawSensorDisplay::kDisplayTopMargin = 0.5; + +// Size of bar graphs and spacing +const float RawSensorDisplay::kDisplayBarWidth = 0.5; +const float RawSensorDisplay::kDisplayBarSpacing = 0.25; +const float RawSensorDisplay::kDisplayBarHeight = 10.0; + + +RawSensorDisplay::RawSensorDisplay() : +displayPixelWidth_(1.0), displayPixelHeight_(1.0), totalDisplayWidth_(1.0), totalDisplayHeight_(1.0), +yMin_(-10), yMax_(256), needsUpdate_(true) { + // Initialize OpenGL settings: 2D only + + //glMatrixMode(GL_PROJECTION); + //glDisable(GL_DEPTH_TEST); + + totalDisplayWidth_ = kDisplaySideMargin*2 + kDisplayBarWidth; + totalDisplayHeight_ = kDisplayTopMargin + kDisplayBottomMargin + kDisplayBarHeight; +} + +void RawSensorDisplay::setDisplaySize(float width, float height) { + ScopedLock sl(displayMutex_); + + displayPixelWidth_ = width; + displayPixelHeight_ = height; + refreshViewport(); +} + + +// Render the keyboard display + +void RawSensorDisplay::render() { + // Start with a light gray background + glClearColor(0.8, 0.8, 0.8, 1.0); + glClear(GL_COLOR_BUFFER_BIT); + glLoadIdentity(); + + float invAspectRatio = totalDisplayWidth_ / totalDisplayHeight_; + float scaleValue = 2.0 / totalDisplayWidth_; + + glScalef(scaleValue, scaleValue * invAspectRatio, scaleValue); + glTranslatef(-1.0 / scaleValue, -totalDisplayHeight_ / 2.0, 0); + glTranslatef(0.0, kDisplayBottomMargin, 0.0); + + ScopedLock sl(displayMutex_); + + // Draw the line for zero value + glColor3f(0.5, 0.5, 0.5); + glBegin(GL_LINES); + glVertex2f(0, graphToDisplayY(0.0)); + glVertex2f(totalDisplayWidth_, graphToDisplayY(0.0)); + glEnd(); + + glTranslatef(kDisplaySideMargin, 0.0, 0.0); + + for(int i = 0; i < displayValues_.size(); i++) { + // Draw each bar in sequence + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + glColor3f(1.0, 0.0, 0.0); + + glBegin(GL_POLYGON); + glVertex2f(0, graphToDisplayY(0)); + glVertex2f(0, graphToDisplayY(displayValues_[i])); + glVertex2f(kDisplayBarWidth, graphToDisplayY(displayValues_[i])); + glVertex2f(kDisplayBarWidth, graphToDisplayY(0)); + glEnd(); + + glTranslatef(kDisplayBarWidth + kDisplayBarSpacing, 0.0, 0.0); + } + + needsUpdate_ = false; + + glFlush(); +} + +// Copy new data into the display buffer +void RawSensorDisplay::setDisplayData(std::vector const& values) { + displayValues_ = values; + + // Update display width according to number of data points + totalDisplayWidth_ = kDisplaySideMargin*2 + (kDisplayBarWidth + kDisplayBarSpacing) * displayValues_.size(); + + needsUpdate_ = true; +} + +// Mouse interaction methods + +void RawSensorDisplay::mouseDown(float x, float y) { + //Point mousePoint = {x, y}; + //Point scaledPoint = screenToInternal(mousePoint); + + //needsUpdate_ = true; +} + +void RawSensorDisplay::mouseDragged(float x, float y) { + //Point mousePoint = {x, y}; + //Point scaledPoint = screenToInternal(mousePoint); + + //needsUpdate_ = true; +} + +void RawSensorDisplay::mouseUp(float x, float y) { + //Point mousePoint = {x, y}; + //Point scaledPoint = screenToInternal(mousePoint); + + //needsUpdate_ = true; +} + +void RawSensorDisplay::rightMouseDown(float x, float y) { + //Point mousePoint = {x, y}; + //Point scaledPoint = screenToInternal(mousePoint); + + //needsUpdate_ = true; +} + +void RawSensorDisplay::rightMouseDragged(float x, float y) { + //Point mousePoint = {x, y}; + //Point scaledPoint = screenToInternal(mousePoint); +} + +void RawSensorDisplay::rightMouseUp(float x, float y) { + //Point mousePoint = {x, y}; + //Point scaledPoint = screenToInternal(mousePoint); +} + +float RawSensorDisplay::graphToDisplayY(float y) { + return kDisplayBarHeight*(y - yMin_)/(yMax_ - yMin_); +} + +void RawSensorDisplay::refreshViewport() { + glViewport(0, 0, displayPixelWidth_, displayPixelHeight_); +} + +// Conversion from internal coordinate space to external pixel values and back + +// Pixel values go from 0,0 (lower left) to displayPixelWidth_, displayPixelHeight_ (upper right) +// Internal values go from -totalDisplayWidth_/2, -totalDisplayHeight_/2 (lower left) +// to totalDisplayWidth_/2, totalDisplayHeight_/2 (upper right) + +// Pixel value in --> OpenGL value out +RawSensorDisplay::Point RawSensorDisplay::screenToInternal(Point& inPoint) { + Point out; + + out.x = -totalDisplayWidth_*0.5 + (inPoint.x/displayPixelWidth_) * totalDisplayWidth_; + out.y = -totalDisplayHeight_*0.5 + (inPoint.y/displayPixelHeight_) * totalDisplayHeight_; + + return out; +} + +// OpenGL value in --> Pixel value out +RawSensorDisplay::Point RawSensorDisplay::internalToScreen(Point& inPoint) { + Point out; + + out.x = ((inPoint.x + totalDisplayWidth_*0.5)/totalDisplayWidth_) * displayPixelWidth_; + out.y = ((inPoint.y + totalDisplayHeight_*0.5)/totalDisplayHeight_) * displayPixelHeight_; + + return out; +} diff -r 000000000000 -r 3580ffe87dc8 Source/Display/RawSensorDisplay.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Source/Display/RawSensorDisplay.h Mon Nov 11 18:19:35 2013 +0000 @@ -0,0 +1,100 @@ +/* + TouchKeys: multi-touch musical keyboard control software + Copyright (c) 2013 Andrew McPherson + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + + ===================================================================== + + RawSensorDisplay.h: simple graph for showing raw TouchKeys sensor values +*/ + +#ifndef __touchkeys__RawSensorDisplay__ +#define __touchkeys__RawSensorDisplay__ + +#include +#include +//#include +#include "../JuceLibraryCode/JuceHeader.h" +#include "../TouchKeys/PianoTypes.h" +#include "../Utility/Node.h" +#include "OpenGLDisplayBase.h" + + +// This class uses OpenGL to draw a bar graph of key sensor data, +// for the purpose of debugging and validating individual keys + +class RawSensorDisplay : public OpenGLDisplayBase { + // Internal data structures and constants +private: + // Display margins + static const float kDisplaySideMargin; + static const float kDisplayBottomMargin; + static const float kDisplayTopMargin; + + // Size of bar graphs and spacing + static const float kDisplayBarWidth; + static const float kDisplayBarSpacing; + static const float kDisplayBarHeight; + + typedef struct { + float x; + float y; + } Point; + +public: + RawSensorDisplay(); + + // Setup methods for display size and keyboard range + void setDisplaySize(float width, float height); + float aspectRatio() { return totalDisplayWidth_ / totalDisplayHeight_; } + + // Drawing methods + bool needsRender() { return needsUpdate_; } + void render(); + + // Interaction methods + void mouseDown(float x, float y); + void mouseDragged(float x, float y); + void mouseUp(float x, float y); + void rightMouseDown(float x, float y); + void rightMouseDragged(float x, float y); + void rightMouseUp(float x, float y); + + // Data update methods + void setDisplayData(std::vector const& values); + +private: + // Convert mathematical XY coordinate space to drawing positions + float graphToDisplayX(float x); + float graphToDisplayY(float y); + + void refreshViewport(); + + // Conversion from internal coordinate space to external pixel values and back + Point screenToInternal(Point& inPoint); + Point internalToScreen(Point& inPoint); + + +private: + float displayPixelWidth_, displayPixelHeight_; // Pixel resolution of the surrounding window + float totalDisplayWidth_, totalDisplayHeight_; // Size of the internal view (centered around origin) + float yMin_, yMax_; // Range of the graph axes + + bool needsUpdate_; // Whether the keyboard should be redrawn + CriticalSection displayMutex_; // Synchronize access between data and display threads + std::vector displayValues_; // Values to display as a bar graph +}; + +#endif /* defined(__touchkeys__RawSensorDisplay__) */ diff -r 000000000000 -r 3580ffe87dc8 Source/GUI/ControlWindowMainComponent.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Source/GUI/ControlWindowMainComponent.cpp Mon Nov 11 18:19:35 2013 +0000 @@ -0,0 +1,851 @@ +/* + ============================================================================== + + This is an automatically generated GUI class created by the Introjucer! + + Be careful when adding custom code to these files, as only the code within + the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded + and re-saved. + + Created with Introjucer version: 3.1.0 + + ------------------------------------------------------------------------------ + + The Introjucer is part of the JUCE library - "Jules' Utility Class Extensions" + Copyright 2004-13 by Raw Material Software Ltd. + + ============================================================================== +*/ + +//[Headers] You can add your own extra header files here... +#include "KeyboardZoneComponent.h" +//[/Headers] + +#include "ControlWindowMainComponent.h" + + +//[MiscUserDefs] You can add your own user definitions and misc code here... +//[/MiscUserDefs] + +//============================================================================== +ControlWindowMainComponent::ControlWindowMainComponent () + : controller_(0) +{ + addAndMakeVisible (dataLoggingGroupComponent = new GroupComponent ("MIDI input group", + "Data Logging")); + + addAndMakeVisible (midiInputGroupComponent = new GroupComponent ("MIDI input group", + "MIDI Input")); + + addAndMakeVisible (midiInputDeviceComboBox = new ComboBox ("MIDI input combo box")); + midiInputDeviceComboBox->setEditableText (false); + midiInputDeviceComboBox->setJustificationType (Justification::centredLeft); + midiInputDeviceComboBox->setTextWhenNothingSelected (String::empty); + midiInputDeviceComboBox->setTextWhenNoChoicesAvailable ("(no choices)"); + midiInputDeviceComboBox->addListener (this); + + addAndMakeVisible (label = new Label ("new label", + "Device:")); + label->setFont (Font (15.00f, Font::plain)); + label->setJustificationType (Justification::centredLeft); + label->setEditable (false, false, false); + label->setColour (TextEditor::textColourId, Colours::black); + label->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); + + addAndMakeVisible (groupComponent = new GroupComponent ("new group", + "TouchKeys")); + + addAndMakeVisible (label2 = new Label ("new label", + "Device:\n")); + label2->setFont (Font (15.00f, Font::plain)); + label2->setJustificationType (Justification::centredLeft); + label2->setEditable (false, false, false); + label2->setColour (TextEditor::textColourId, Colours::black); + label2->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); + + addAndMakeVisible (touchkeyDeviceComboBox = new ComboBox ("TouchKeys combo box")); + touchkeyDeviceComboBox->setEditableText (false); + touchkeyDeviceComboBox->setJustificationType (Justification::centredLeft); + touchkeyDeviceComboBox->setTextWhenNothingSelected (String::empty); + touchkeyDeviceComboBox->setTextWhenNoChoicesAvailable ("(no choices)"); + touchkeyDeviceComboBox->addListener (this); + + addAndMakeVisible (label3 = new Label ("new label", + "Status:\n")); + label3->setFont (Font (15.00f, Font::plain)); + label3->setJustificationType (Justification::centredLeft); + label3->setEditable (false, false, false); + label3->setColour (TextEditor::textColourId, Colours::black); + label3->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); + + addAndMakeVisible (touchkeyStartButton = new TextButton ("TouchKeys start button")); + touchkeyStartButton->setButtonText ("Start"); + touchkeyStartButton->addListener (this); + + addAndMakeVisible (touchkeyStatusLabel = new Label ("TouchKeys status label", + "not running")); + touchkeyStatusLabel->setFont (Font (15.00f, Font::plain)); + touchkeyStatusLabel->setJustificationType (Justification::centredLeft); + touchkeyStatusLabel->setEditable (false, false, false); + touchkeyStatusLabel->setColour (TextEditor::textColourId, Colours::black); + touchkeyStatusLabel->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); + + addAndMakeVisible (oscGroupComponent = new GroupComponent ("OSC group", + "OSC Output")); + + addAndMakeVisible (label7 = new Label ("new label", + "Host:")); + label7->setFont (Font (15.00f, Font::plain)); + label7->setJustificationType (Justification::centredLeft); + label7->setEditable (false, false, false); + label7->setColour (TextEditor::textColourId, Colours::black); + label7->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); + + addAndMakeVisible (oscHostTextEditor = new TextEditor ("new text editor")); + oscHostTextEditor->setMultiLine (false); + oscHostTextEditor->setReturnKeyStartsNewLine (false); + oscHostTextEditor->setReadOnly (false); + oscHostTextEditor->setScrollbarsShown (true); + oscHostTextEditor->setCaretVisible (true); + oscHostTextEditor->setPopupMenuEnabled (true); + oscHostTextEditor->setText ("127.0.0.1"); + + addAndMakeVisible (label8 = new Label ("new label", + "Port:")); + label8->setFont (Font (15.00f, Font::plain)); + label8->setJustificationType (Justification::centredLeft); + label8->setEditable (false, false, false); + label8->setColour (TextEditor::textColourId, Colours::black); + label8->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); + + addAndMakeVisible (oscPortTextEditor = new TextEditor ("new text editor")); + oscPortTextEditor->setMultiLine (false); + oscPortTextEditor->setReturnKeyStartsNewLine (false); + oscPortTextEditor->setReadOnly (false); + oscPortTextEditor->setScrollbarsShown (true); + oscPortTextEditor->setCaretVisible (true); + oscPortTextEditor->setPopupMenuEnabled (true); + oscPortTextEditor->setText ("8000"); + + addAndMakeVisible (oscEnableButton = new ToggleButton ("OSC enable button")); + oscEnableButton->setButtonText ("Enable OSC output"); + oscEnableButton->addListener (this); + + addAndMakeVisible (oscEnableRawButton = new ToggleButton ("OSC enable raw button")); + oscEnableRawButton->setButtonText ("Send raw frames"); + oscEnableRawButton->addListener (this); + + addAndMakeVisible (label4 = new Label ("new label", + "Lowest Octave:")); + label4->setFont (Font (15.00f, Font::plain)); + label4->setJustificationType (Justification::centredLeft); + label4->setEditable (false, false, false); + label4->setColour (TextEditor::textColourId, Colours::black); + label4->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); + + addAndMakeVisible (touchkeyOctaveComboBox = new ComboBox ("TouchKeys octave box")); + touchkeyOctaveComboBox->setEditableText (false); + touchkeyOctaveComboBox->setJustificationType (Justification::centredLeft); + touchkeyOctaveComboBox->setTextWhenNothingSelected (String::empty); + touchkeyOctaveComboBox->setTextWhenNoChoicesAvailable ("(no choices)"); + touchkeyOctaveComboBox->addListener (this); + + addAndMakeVisible (loggingButton = new TextButton ("logging button")); + loggingButton->setButtonText ("Start Logging"); + loggingButton->addListener (this); + + addAndMakeVisible (oscInputGroupComponent = new GroupComponent ("MIDI input group", + "OSC Input")); + + addAndMakeVisible (oscInputEnableButton = new ToggleButton ("OSC input enable button")); + oscInputEnableButton->setButtonText ("Enable OSC input"); + oscInputEnableButton->addListener (this); + + addAndMakeVisible (label6 = new Label ("new label", + "Port:")); + label6->setFont (Font (15.00f, Font::plain)); + label6->setJustificationType (Justification::centredLeft); + label6->setEditable (false, false, false); + label6->setColour (TextEditor::textColourId, Colours::black); + label6->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); + + addAndMakeVisible (oscInputPortTextEditor = new TextEditor ("new text editor")); + oscInputPortTextEditor->setMultiLine (false); + oscInputPortTextEditor->setReturnKeyStartsNewLine (false); + oscInputPortTextEditor->setReadOnly (false); + oscInputPortTextEditor->setScrollbarsShown (true); + oscInputPortTextEditor->setCaretVisible (true); + oscInputPortTextEditor->setPopupMenuEnabled (true); + oscInputPortTextEditor->setText ("8001"); + + addAndMakeVisible (playLogButton = new TextButton ("play log button")); + playLogButton->setButtonText ("Play Log..."); + playLogButton->addListener (this); + + addAndMakeVisible (keyboardZoneTabbedComponent = new TabbedComponent (TabbedButtonBar::TabsAtTop)); + keyboardZoneTabbedComponent->setTabBarDepth (30); + keyboardZoneTabbedComponent->setCurrentTabIndex (-1); + + addAndMakeVisible (addZoneButton = new TextButton ("add zone button")); + addZoneButton->setButtonText ("Add"); + addZoneButton->addListener (this); + + addAndMakeVisible (removeZoneButton = new TextButton ("remove zone button")); + removeZoneButton->setButtonText ("Del"); + removeZoneButton->addListener (this); + + addAndMakeVisible (touchkeyAutodetectButton = new TextButton ("TouchKeys autodetect button")); + touchkeyAutodetectButton->setButtonText ("Detect"); + touchkeyAutodetectButton->addListener (this); + + + //[UserPreSize] + lastSelectedMidiInputID_ = -1; + lastSegmentUniqueIdentifier_ = -1; + + // Add octave labels to combo box + for(int i = 0; i <= kTouchkeysMaxOctave; i++) { + touchkeyOctaveComboBox->addItem("C" + String(i), i + kTouchkeysComponentComboBoxOffset); + } + //[/UserPreSize] + + setSize (872, 444); + + + //[Constructor] You can add your own custom stuff here.. + oscHostTextEditor->addListener(this); + oscPortTextEditor->addListener(this); + oscInputPortTextEditor->addListener(this); + //[/Constructor] +} + +ControlWindowMainComponent::~ControlWindowMainComponent() +{ + //[Destructor_pre]. You can add your own custom destruction code here.. + //[/Destructor_pre] + + dataLoggingGroupComponent = nullptr; + midiInputGroupComponent = nullptr; + midiInputDeviceComboBox = nullptr; + label = nullptr; + groupComponent = nullptr; + label2 = nullptr; + touchkeyDeviceComboBox = nullptr; + label3 = nullptr; + touchkeyStartButton = nullptr; + touchkeyStatusLabel = nullptr; + oscGroupComponent = nullptr; + label7 = nullptr; + oscHostTextEditor = nullptr; + label8 = nullptr; + oscPortTextEditor = nullptr; + oscEnableButton = nullptr; + oscEnableRawButton = nullptr; + label4 = nullptr; + touchkeyOctaveComboBox = nullptr; + loggingButton = nullptr; + oscInputGroupComponent = nullptr; + oscInputEnableButton = nullptr; + label6 = nullptr; + oscInputPortTextEditor = nullptr; + playLogButton = nullptr; + keyboardZoneTabbedComponent = nullptr; + addZoneButton = nullptr; + removeZoneButton = nullptr; + touchkeyAutodetectButton = nullptr; + + + //[Destructor]. You can add your own custom destruction code here.. + //[/Destructor] +} + +//============================================================================== +void ControlWindowMainComponent::paint (Graphics& g) +{ + //[UserPrePaint] Add your own custom painting code here.. + //[/UserPrePaint] + + g.fillAll (Colour (0xffd2d2d2)); + + //[UserPaint] Add your own custom painting code here.. + //[/UserPaint] +} + +void ControlWindowMainComponent::resized() +{ + dataLoggingGroupComponent->setBounds (8, 392, 304, 64); + midiInputGroupComponent->setBounds (8, 144, 304, 64); + midiInputDeviceComboBox->setBounds (72, 168, 224, 24); + label->setBounds (16, 168, 55, 24); + groupComponent->setBounds (8, 8, 304, 128); + label2->setBounds (16, 32, 55, 24); + touchkeyDeviceComboBox->setBounds (72, 32, 224, 24); + label3->setBounds (16, 96, 55, 24); + touchkeyStartButton->setBounds (216, 96, 79, 24); + touchkeyStatusLabel->setBounds (72, 96, 136, 24); + oscGroupComponent->setBounds (8, 288, 304, 96); + label7->setBounds (16, 344, 55, 24); + oscHostTextEditor->setBounds (64, 344, 128, 24); + label8->setBounds (200, 344, 40, 24); + oscPortTextEditor->setBounds (240, 344, 56, 24); + oscEnableButton->setBounds (24, 312, 144, 24); + oscEnableRawButton->setBounds (176, 312, 144, 24); + label4->setBounds (16, 64, 104, 24); + touchkeyOctaveComboBox->setBounds (120, 64, 88, 24); + loggingButton->setBounds (24, 416, 128, 24); + oscInputGroupComponent->setBounds (8, 216, 304, 64); + oscInputEnableButton->setBounds (24, 240, 152, 24); + label6->setBounds (200, 240, 40, 24); + oscInputPortTextEditor->setBounds (240, 240, 56, 24); + playLogButton->setBounds (168, 416, 128, 24); + keyboardZoneTabbedComponent->setBounds (320, 0, 552, 464); + addZoneButton->setBounds (776, 4, 38, 20); + removeZoneButton->setBounds (824, 4, 38, 20); + touchkeyAutodetectButton->setBounds (216, 64, 79, 24); + //[UserResized] Add your own custom resize handling here.. + //[/UserResized] +} + +void ControlWindowMainComponent::comboBoxChanged (ComboBox* comboBoxThatHasChanged) +{ + //[UsercomboBoxChanged_Pre] + if(controller_ == 0) + return; + //[/UsercomboBoxChanged_Pre] + + if (comboBoxThatHasChanged == midiInputDeviceComboBox) + { + //[UserComboBoxCode_midiInputDeviceComboBox] -- add your combo box handling code here.. + + // Look up the selected ID, remembering that Juce indices start at 1 and the first of + // these is "Disabled" + int selection = midiInputDeviceComboBox->getSelectedId() - kMidiInputDeviceComboBoxOffset; + if(selection == 1 - kMidiInputDeviceComboBoxOffset) { // Disabled + if(controller_->midiTouchkeysStandaloneModeIsEnabled()) + controller_->midiTouchkeysStandaloneModeDisable(); + controller_->disableAllMIDIInputPorts(); + } + else if(selection == 2 - kMidiInputDeviceComboBoxOffset) { // Standalone mode + controller_->disableAllMIDIInputPorts(); + controller_->midiTouchkeysStandaloneModeEnable(); + } + else if(selection >= 0 && selection < midiInputDeviceIDs_.size()) { + int deviceId = midiInputDeviceIDs_[selection]; + if(controller_->midiTouchkeysStandaloneModeIsEnabled()) + controller_->midiTouchkeysStandaloneModeDisable(); + controller_->disableAllMIDIInputPorts(); + controller_->enableMIDIInputPort(deviceId); + } + //[/UserComboBoxCode_midiInputDeviceComboBox] + } + else if (comboBoxThatHasChanged == touchkeyDeviceComboBox) + { + //[UserComboBoxCode_touchkeyDeviceComboBox] -- add your combo box handling code here.. + // Nothing to do here right away -- wait until start button is pressed + //[/UserComboBoxCode_touchkeyDeviceComboBox] + } + else if (comboBoxThatHasChanged == touchkeyOctaveComboBox) + { + //[UserComboBoxCode_touchkeyOctaveComboBox] -- add your combo box handling code here.. + int octave = touchkeyOctaveComboBox->getSelectedId() - kTouchkeysComponentComboBoxOffset; + + // Convert octave number to MIDI note (C4 = 60) + if(controller_ != 0) + controller_->touchkeyDeviceSetLowestMidiNote((octave + 1)*12); + //[/UserComboBoxCode_touchkeyOctaveComboBox] + } + + //[UsercomboBoxChanged_Post] + //[/UsercomboBoxChanged_Post] +} + +void ControlWindowMainComponent::buttonClicked (Button* buttonThatWasClicked) +{ + //[UserbuttonClicked_Pre] + if(controller_ == 0) + return; + //[/UserbuttonClicked_Pre] + + if (buttonThatWasClicked == touchkeyStartButton) + { + //[UserButtonCode_touchkeyStartButton] -- add your button handler code here.. + if(controller_->touchkeyDeviceIsRunning()) { + // TouchKeys were running. Stop and close. + controller_->closeTouchkeyDevice(); + } + else { + // TouchKeys weren't running. Open and start. + String devName = controller_->touchkeyDevicePrefix().c_str(); + devName += touchkeyDeviceComboBox->getText(); + + // This will attempt to start the device and update the state accordingly + controller_->touchkeyDeviceStartupSequence(devName.toUTF8()); + } + //[/UserButtonCode_touchkeyStartButton] + } + else if (buttonThatWasClicked == oscEnableButton) + { + //[UserButtonCode_oscEnableButton] -- add your button handler code here.. + controller_->oscTransmitSetEnabled(oscEnableButton->getToggleState()); + //[/UserButtonCode_oscEnableButton] + } + else if (buttonThatWasClicked == oscEnableRawButton) + { + //[UserButtonCode_oscEnableRawButton] -- add your button handler code here.. + controller_->oscTransmitSetRawDataEnabled(oscEnableRawButton->getToggleState()); + //[/UserButtonCode_oscEnableRawButton] + } + else if (buttonThatWasClicked == loggingButton) + { + //[UserButtonCode_loggingButton] -- add your button handler code here.. + if(controller_->isLogging()) + controller_->stopLogging(); + else + controller_->startLogging(); + //[/UserButtonCode_loggingButton] + } + else if (buttonThatWasClicked == oscInputEnableButton) + { + //[UserButtonCode_oscInputEnableButton] -- add your button handler code here.. + //[/UserButtonCode_oscInputEnableButton] + } + else if (buttonThatWasClicked == playLogButton) + { + //[UserButtonCode_playLogButton] -- add your button handler code here.. + //[/UserButtonCode_playLogButton] + } + else if (buttonThatWasClicked == addZoneButton) + { + //[UserButtonCode_addZoneButton] -- add your button handler code here.. + controller_->midiSegmentAdd(); + //[/UserButtonCode_addZoneButton] + } + else if (buttonThatWasClicked == removeZoneButton) + { + //[UserButtonCode_removeZoneButton] -- add your button handler code here.. + int tabIndex = keyboardZoneTabbedComponent->getCurrentTabIndex(); + if(tabIndex != 0) { + KeyboardZoneComponent* selectedComponent = static_cast (keyboardZoneTabbedComponent->getTabContentComponent(tabIndex)); + controller_->midiSegmentRemove(selectedComponent->keyboardSegment()); + } + //[/UserButtonCode_removeZoneButton] + } + else if (buttonThatWasClicked == touchkeyAutodetectButton) + { + //[UserButtonCode_touchkeyAutodetectButton] -- add your button handler code here.. + if(controller_->touchkeyDeviceIsAutodetecting()) + controller_->touchkeyDeviceStopAutodetecting(); + else + controller_->touchkeyDeviceAutodetectLowestMidiNote(); + //[/UserButtonCode_touchkeyAutodetectButton] + } + + //[UserbuttonClicked_Post] + //[/UserbuttonClicked_Post] +} + + + +//[MiscUserCode] You can add your own definitions of your custom methods or any other code here... + +void ControlWindowMainComponent::textEditorReturnKeyPressed(TextEditor &editor) +{ + if(controller_ == 0) + return; + if(&editor == oscHostTextEditor || &editor == oscPortTextEditor) + updateOscHostPort(); +} + +void ControlWindowMainComponent::textEditorEscapeKeyPressed(TextEditor &editor) +{ + // Nothing to do here +} + +void ControlWindowMainComponent::textEditorFocusLost(TextEditor &editor) +{ + textEditorReturnKeyPressed(editor); +} + +// Update list of TouchKeys and MIDI input devices +void ControlWindowMainComponent::updateInputDeviceList() +{ + if(controller_ == 0) + return; + + // *** TouchKeys devices *** + vector tkdevices = controller_->availableTouchkeyDevices(); + vector::iterator tkit; + int counter; + + touchkeyDeviceComboBox->clear(); + + if(tkdevices.size() == 0) { + touchkeyDeviceComboBox->addItem("No devices", 1); + touchkeyDeviceComboBox->setSelectedId(1, dontSendNotification); + touchkeyDeviceComboBox->setEnabled(false); + touchkeyStartButton->setEnabled(false); + } + else { + counter = 1; + for(tkit = tkdevices.begin(); tkit != tkdevices.end(); ++tkit) { + touchkeyDeviceComboBox->addItem(tkit->c_str(), counter++); + } + touchkeyDeviceComboBox->setSelectedId(1, dontSendNotification); + touchkeyDeviceComboBox->setEnabled(true); + touchkeyStartButton->setEnabled(true); + } + + // *** MIDI input devices *** + vector > devices = controller_->availableMIDIInputDevices(); + vector >::iterator it; + + midiInputDeviceComboBox->clear(); + midiInputDeviceIDs_.clear(); + midiInputDeviceComboBox->addItem("Disabled", 1); + midiInputDeviceComboBox->addItem("TouchKeys Standalone", 2); + counter = kMidiInputDeviceComboBoxOffset; + for(it = devices.begin(); it != devices.end(); ++it) { + midiInputDeviceComboBox->addItem((*it).second.c_str(), counter); + midiInputDeviceIDs_.push_back(it->first); + counter++; + } +} + +void ControlWindowMainComponent::updateOscHostPort() +{ + if(controller_ == 0) + return; + + String oscHost = oscHostTextEditor->getText(); + String oscPort = oscPortTextEditor->getText(); + controller_->oscTransmitClearAddresses(); + controller_->oscTransmitAddAddress(oscHost.toUTF8(), oscPort.toUTF8()); +} + +// Synchronize the UI state with the underlying state of the controller +void ControlWindowMainComponent::synchronize() { + if(controller_ == 0) + return; + + // Update TouchKeys status + if(controller_->touchkeyDeviceIsRunning()) { + touchkeyStartButton->setButtonText("Stop"); + touchkeyStatusLabel->setText("Running", dontSendNotification); + } + else if(controller_->touchkeyDeviceErrorOccurred()) { + touchkeyStartButton->setButtonText("Start"); + touchkeyStatusLabel->setText(controller_->touchkeyDeviceErrorMessage().c_str(), dontSendNotification); + } + else { + touchkeyStartButton->setButtonText("Start"); + touchkeyStatusLabel->setText("Not running", dontSendNotification); + } + + // Update MIDI input status + if(controller_->midiTouchkeysStandaloneModeIsEnabled()) { + midiInputDeviceComboBox->setSelectedId(2, dontSendNotification); + } + else { + const std::vector& selectedMidiInputDevices(controller_->selectedMIDIInputPorts()); + if(selectedMidiInputDevices.empty()) { + midiInputDeviceComboBox->setSelectedId(1, dontSendNotification); + } + else if(selectedMidiInputDevices.front() != lastSelectedMidiInputID_){ + // Input has changed from before. Find it in vector + // If there is more than one selected ID, we will only take the first one for + // the current UI. This affects the display but not the functionality. + for(int i = 0; i < midiInputDeviceIDs_.size(); i++) { + if(midiInputDeviceIDs_[i] == selectedMidiInputDevices.front()) { + midiInputDeviceComboBox->setSelectedId(i + kMidiInputDeviceComboBoxOffset, dontSendNotification); + break; + } + } + // ...and cache this as the last ID so we don't search again next time + lastSelectedMidiInputID_ = selectedMidiInputDevices.front(); + } + } + + // Update OSC status + oscEnableButton->setToggleState(controller_->oscTransmitEnabled(), dontSendNotification); + oscEnableRawButton->setToggleState(controller_->oscTransmitRawDataEnabled(), dontSendNotification); + + // Update the OSC fields only if the text editors aren't active + if(!oscHostTextEditor->hasKeyboardFocus(true) && !oscPortTextEditor->hasKeyboardFocus(true)) { + const std::vector& oscAddresses = controller_->oscTransmitAddresses(); + if(oscAddresses.empty()) { + oscHostTextEditor->setText("", false); + oscPortTextEditor->setText("", false); + } + else { + // Take the first address to display in the text editor. As with MIDI input, + // this doesn't affect the functionality, only the UI display. + lo_address firstAddress = oscAddresses.front(); + + oscHostTextEditor->setText(lo_address_get_hostname(firstAddress), false); + oscPortTextEditor->setText(lo_address_get_port(firstAddress), false); + } + } + + // Set the octave button + int octave = (controller_->touchkeyDeviceLowestMidiNote() / 12) - 1; + if(octave >= 0 && octave <= kTouchkeysMaxOctave) + touchkeyOctaveComboBox->setSelectedId(octave + kTouchkeysComponentComboBoxOffset, dontSendNotification); + + // Enable or disable the autodetect button depending on the device status + if(!controller_->touchkeyDeviceIsRunning()) { + touchkeyAutodetectButton->setEnabled(false); + } + else if(controller_->touchkeyDeviceIsAutodetecting()) { + touchkeyAutodetectButton->setEnabled(true); + touchkeyAutodetectButton->setButtonText("Cancel"); + } + else { + touchkeyAutodetectButton->setEnabled(true); + touchkeyAutodetectButton->setButtonText("Detect"); + } + + // Set the text on the logging button + if(controller_->isLogging()) { + loggingButton->setButtonText("Stop Logging"); + } + else + loggingButton->setButtonText("Start Logging"); + + // Update segments list if it has changed + if(lastSegmentUniqueIdentifier_ != controller_->midiSegmentUniqueIdentifier()) + updateKeyboardSegments(); + + // Synchronize every tab component + for(int tab = 0; tab < keyboardZoneTabbedComponent->getNumTabs(); tab++) { + KeyboardZoneComponent *component = static_cast (keyboardZoneTabbedComponent->getTabContentComponent(tab)); + component->synchronize(); + } + + // Update add/remove buttons + if(keyboardZoneTabbedComponent->getCurrentTabIndex() <= 0) { + removeZoneButton->setEnabled(false); + } + else { + removeZoneButton->setEnabled(true); + } + if(controller_->midiSegmentsCount() >= 8) + addZoneButton->setEnabled(false); + else + addZoneButton->setEnabled(true); +} + +// Update the state of the keyboard segment tab bar. Called only when segments change +void ControlWindowMainComponent::updateKeyboardSegments() +{ + if(controller_ == 0) + return; + // Update the identifier to say we've matched the current state of the segments + lastSegmentUniqueIdentifier_ = controller_->midiSegmentUniqueIdentifier(); + + // Save the current selected index in case we later remove it + int currentlySelectedIndex = keyboardZoneTabbedComponent->getCurrentTabIndex(); + KeyboardZoneComponent* currentlySelectedComponent = static_cast (keyboardZoneTabbedComponent->getTabContentComponent(currentlySelectedIndex)); + MidiKeyboardSegment* currentlySelectedSegment = 0; + if(currentlySelectedComponent != 0) + currentlySelectedSegment = currentlySelectedComponent->keyboardSegment(); + bool selectedNewTab = false; + + // First, go through the segments and create tabs as needed + int maxNumSegments = controller_->midiSegmentsCount(); + for(int i = 0; i < maxNumSegments; i++) { + MidiKeyboardSegment* segment = controller_->midiSegment(i); + bool matched = false; + if(segment == 0) + continue; + // Look for this segment among the tabs we already have + for(int tab = 0; tab < keyboardZoneTabbedComponent->getNumTabs(); tab++) { + KeyboardZoneComponent *component = static_cast (keyboardZoneTabbedComponent->getTabContentComponent(tab)); + if(component->keyboardSegment() == segment) { + // Found it... + matched = true; + break; + } + } + // If we didn't find it, add a tab for this segment + if(!matched) { + KeyboardZoneComponent *newComponent = new KeyboardZoneComponent(); + newComponent->setMainApplicationController(controller_); + newComponent->setKeyboardSegment(segment); + + char name[16]; + snprintf(name, 16, "Zone %d", segment->outputPort()); + + // Add the component, telling the tab manager to take charge of deleting it at the end + keyboardZoneTabbedComponent->addTab(name, Colours::lightgrey, newComponent, true); + keyboardZoneTabbedComponent->setCurrentTabIndex(keyboardZoneTabbedComponent->getNumTabs() - 1); + selectedNewTab = true; + + //std::cout << "Adding tab for segment " << segment << endl; + } + } + + // Now go through the other way and remove tabs that are no longer needed + // Iterate through each tab: find a match in the segments + int tab = 0; + while(tab < keyboardZoneTabbedComponent->getNumTabs()) { + KeyboardZoneComponent *component = static_cast (keyboardZoneTabbedComponent->getTabContentComponent(tab)); + MidiKeyboardSegment *segment = component->keyboardSegment(); + bool matched = false; + + for(int i = 0; i < maxNumSegments; i++) { + if(segment == controller_->midiSegment(i)) { + matched = true; + break; + } + } + if(segment == 0 || !matched) { + //std::cout << "Removing tab for nonexistent segment " << segment << endl; + + if(currentlySelectedSegment == segment) { + // The currently selected tab has been removed. Select the prior one. + if(currentlySelectedIndex > 0) + keyboardZoneTabbedComponent->setCurrentTabIndex(currentlySelectedIndex - 1); + else + keyboardZoneTabbedComponent->setCurrentTabIndex(0); + } + + // This tab holds a nonexistent segment and should be removed + keyboardZoneTabbedComponent->removeTab(tab); + + // And we have to start over again since the tab indexing has changed + tab = 0; + } + else // Found a match: check the next tab + tab++; + // Eventually, we get to the end of the list of tabs an we know every existing tab matches a segment + } +} + +//[/MiscUserCode] + + +//============================================================================== +#if 0 +/* -- Introjucer information section -- + + This is where the Introjucer stores the metadata that describe this GUI layout, so + make changes in here at your peril! + +BEGIN_JUCER_METADATA + + + + + + + + +END_JUCER_METADATA +*/ +#endif + + +//[EndFile] You can add extra defines here... +//[/EndFile] diff -r 000000000000 -r 3580ffe87dc8 Source/GUI/ControlWindowMainComponent.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Source/GUI/ControlWindowMainComponent.h Mon Nov 11 18:19:35 2013 +0000 @@ -0,0 +1,130 @@ +/* + ============================================================================== + + This is an automatically generated GUI class created by the Introjucer! + + Be careful when adding custom code to these files, as only the code within + the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded + and re-saved. + + Created with Introjucer version: 3.1.0 + + ------------------------------------------------------------------------------ + + The Introjucer is part of the JUCE library - "Jules' Utility Class Extensions" + Copyright 2004-13 by Raw Material Software Ltd. + + ============================================================================== +*/ + +#ifndef __JUCE_HEADER_FD693E32C8291DFA__ +#define __JUCE_HEADER_FD693E32C8291DFA__ + +//[Headers] -- You can add your own extra header files here -- +#include "JuceHeader.h" +#include "../MainApplicationController.h" +//[/Headers] + + + +//============================================================================== +/** + //[Comments] + An auto-generated component, created by the Introjucer. + + Describe your class and how it works here! + //[/Comments] +*/ +class ControlWindowMainComponent : public Component, + public TextEditor::Listener, + public ComboBoxListener, + public ButtonListener +{ +public: + //============================================================================== + ControlWindowMainComponent (); + ~ControlWindowMainComponent(); + + //============================================================================== + //[UserMethods] -- You can add your own custom methods in this section. + void setMainApplicationController(MainApplicationController *controller) { + // Attach the user interface to the controller and vice-versa + controller_ = controller; + updateInputDeviceList(); + } + + // TextEditor listener methods + void textEditorTextChanged(TextEditor &editor) {} + void textEditorReturnKeyPressed(TextEditor &editor); + void textEditorEscapeKeyPressed(TextEditor &editor); + void textEditorFocusLost(TextEditor &editor); + + void synchronize(); + //[/UserMethods] + + void paint (Graphics& g); + void resized(); + void comboBoxChanged (ComboBox* comboBoxThatHasChanged); + void buttonClicked (Button* buttonThatWasClicked); + + + +private: + //[UserVariables] -- You can add your own custom variables in this section. + enum { + // Offsets between Juce UI IDs and positions in vector + kMidiInputDeviceComboBoxOffset = 3, + kTouchkeysComponentComboBoxOffset = 1, + kTouchkeysMaxOctave = 6 + }; + + void updateInputDeviceList(); + void updateOscHostPort(); + void updateKeyboardSegments(); + + MainApplicationController *controller_; // Pointer to the main application controller + std::vector midiInputDeviceIDs_; + int lastSelectedMidiInputID_; + int lastSegmentUniqueIdentifier_; + //[/UserVariables] + + //============================================================================== + ScopedPointer dataLoggingGroupComponent; + ScopedPointer midiInputGroupComponent; + ScopedPointer midiInputDeviceComboBox; + ScopedPointer