From 31c19a595b90f42adbf415ea8bdb3c65fe10eacb Mon Sep 17 00:00:00 2001 From: nicolas Date: Wed, 4 Feb 2026 11:51:22 +0100 Subject: [PATCH] commit du code source --- .gitignore | 3 + .../Clicks/01 SeikoSQ50/High Seiko SQ50.wav | Bin 0 -> 13966 bytes Assets/Clicks/01 SeikoSQ50/Low Seiko SQ50.wav | Bin 0 -> 13966 bytes Assets/Clicks/02 Stick/High Stick.wav | Bin 0 -> 28018 bytes Assets/Clicks/02 Stick/Low Stick.wav | Bin 0 -> 27958 bytes Assets/Clicks/03 Cowbell/High Cowbell.wav | Bin 0 -> 15952 bytes Assets/Clicks/03 Cowbell/Low Cowbell.wav | Bin 0 -> 37760 bytes Assets/Clicks/04 vChip Wood/High Wood.wav | Bin 0 -> 58844 bytes Assets/Clicks/04 vChip Wood/Low Wood.wav | Bin 0 -> 58844 bytes Assets/Clicks/05 vChip Claves/HIgh Claves.wav | Bin 0 -> 25180 bytes Assets/Clicks/05 vChip Claves/Low Claves.wav | Bin 0 -> 25180 bytes Makefile | 229 + README.md | 11 +- .../.continue/mcpServers/new-mcp-server.yaml | 10 + Source/.continue/rules/new-rule.md | 5 + Source/.vscode/settings.json | 5 + Source/BPMPanel.cpp | 156 + Source/BPMPanel.h | 66 + Source/Config.cpp | 104 + Source/Config.h | 67 + Source/Figures.h | 43 + Source/Main.cpp | 118 + Source/MainComponent.cpp | 143 + Source/MainComponent.h | 79 + Source/MesurePanel.cpp | 133 + Source/MesurePanel.h | 62 + Source/Metronome.cpp | 246 + Source/Metronome.h | 134 + Source/OptionsPanel.cpp | 319 + Source/OptionsPanel.h | 145 + Source/PlayPanel.cpp | 161 + Source/PlayPanel.h | 73 + Source/TempoPanel.cpp | 91 + Source/TempoPanel.h | 34 + Tchick.jucer | 114 + Tchick.sln | 21 + Tchick_App.vcxproj | 3235 ++++++++++ Tchick_App.vcxproj.filters | 5696 +++++++++++++++++ Tchick_App.vcxproj.user | 4 + resources.rc | 31 + 40 files changed, 11537 insertions(+), 1 deletion(-) create mode 100644 Assets/Clicks/01 SeikoSQ50/High Seiko SQ50.wav create mode 100644 Assets/Clicks/01 SeikoSQ50/Low Seiko SQ50.wav create mode 100644 Assets/Clicks/02 Stick/High Stick.wav create mode 100644 Assets/Clicks/02 Stick/Low Stick.wav create mode 100644 Assets/Clicks/03 Cowbell/High Cowbell.wav create mode 100644 Assets/Clicks/03 Cowbell/Low Cowbell.wav create mode 100644 Assets/Clicks/04 vChip Wood/High Wood.wav create mode 100644 Assets/Clicks/04 vChip Wood/Low Wood.wav create mode 100644 Assets/Clicks/05 vChip Claves/HIgh Claves.wav create mode 100644 Assets/Clicks/05 vChip Claves/Low Claves.wav create mode 100644 Makefile create mode 100644 Source/.continue/mcpServers/new-mcp-server.yaml create mode 100644 Source/.continue/rules/new-rule.md create mode 100644 Source/.vscode/settings.json create mode 100644 Source/BPMPanel.cpp create mode 100644 Source/BPMPanel.h create mode 100644 Source/Config.cpp create mode 100644 Source/Config.h create mode 100644 Source/Figures.h create mode 100644 Source/Main.cpp create mode 100644 Source/MainComponent.cpp create mode 100644 Source/MainComponent.h create mode 100644 Source/MesurePanel.cpp create mode 100644 Source/MesurePanel.h create mode 100644 Source/Metronome.cpp create mode 100644 Source/Metronome.h create mode 100644 Source/OptionsPanel.cpp create mode 100644 Source/OptionsPanel.h create mode 100644 Source/PlayPanel.cpp create mode 100644 Source/PlayPanel.h create mode 100644 Source/TempoPanel.cpp create mode 100644 Source/TempoPanel.h create mode 100644 Tchick.jucer create mode 100644 Tchick.sln create mode 100644 Tchick_App.vcxproj create mode 100644 Tchick_App.vcxproj.filters create mode 100644 Tchick_App.vcxproj.user create mode 100644 resources.rc diff --git a/.gitignore b/.gitignore index e257658..3488d8e 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,6 @@ *.out *.app +JuceLibraryCode/** + +/.vs diff --git a/Assets/Clicks/01 SeikoSQ50/High Seiko SQ50.wav b/Assets/Clicks/01 SeikoSQ50/High Seiko SQ50.wav new file mode 100644 index 0000000000000000000000000000000000000000..64d39e296df92fadec13a9fe118bca793f90899c GIT binary patch literal 13966 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 CcCB&% literal 0 HcmV?d00001 diff --git a/Assets/Clicks/01 SeikoSQ50/Low Seiko SQ50.wav b/Assets/Clicks/01 SeikoSQ50/Low Seiko SQ50.wav new file mode 100644 index 0000000000000000000000000000000000000000..ebdbf405f61b3574f48388c3d823fa74294363d8 GIT binary patch literal 13966 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�YLy59%1+hKZ{Kg?viQLWN7oKUB?UZ&2{OY}C? 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 J+ywrEz!wAy;EMnN literal 0 HcmV?d00001 diff --git a/Assets/Clicks/04 vChip Wood/High Wood.wav b/Assets/Clicks/04 vChip Wood/High Wood.wav new file mode 100644 index 0000000000000000000000000000000000000000..211db220eda6612ba8400a016b17d128dafcdd4d GIT binary patch literal 58844 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 KoLBo5$^3tmpaGx& literal 0 HcmV?d00001 diff --git a/Assets/Clicks/05 vChip Claves/HIgh Claves.wav b/Assets/Clicks/05 vChip Claves/HIgh Claves.wav new file mode 100644 index 0000000000000000000000000000000000000000..19985eb7ab005e88d0f71cf94a30b53ac9918610 GIT binary patch literal 25180 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

g-r^LbO5>ePcJ*=>cc+6Z>{Mncp|Ve! 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 AS^xk5 literal 0 HcmV?d00001 diff --git a/Assets/Clicks/05 vChip Claves/Low Claves.wav b/Assets/Clicks/05 vChip Claves/Low Claves.wav new file mode 100644 index 0000000000000000000000000000000000000000..709c9490298d29db38892c26605dfbbab5767967 GIT binary patch literal 25180 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 C{pO$m literal 0 HcmV?d00001 diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..b53609d --- /dev/null +++ b/Makefile @@ -0,0 +1,229 @@ +# Automatically generated makefile, created by the Projucer +# Don't edit this file! Your changes will be overwritten when you re-save the Projucer project! + +# build with "V=1" for verbose builds +ifeq ($(V), 1) +V_AT = +else +V_AT = @ +endif + +# (this disables dependency generation if multiple architectures are set) +DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD) + +ifndef PKG_CONFIG + PKG_CONFIG=pkg-config +endif + +ifndef STRIP + STRIP=strip +endif + +ifndef AR + AR=ar +endif + +ifndef CONFIG + CONFIG=Debug +endif + +JUCE_ARCH_LABEL := $(shell uname -m) + +ifeq ($(CONFIG),Debug) + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Debug + JUCE_OUTDIR := build + + ifeq ($(TARGET_ARCH),) + TARGET_ARCH := + endif + + JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=1" "-DJUCE_USE_DARK_SPLASH_SCREEN=0" "-DJUCE_PROJUCER_VERSION=0x70003" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_JACK=1" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_B28D=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -IJuceLibraryCode -IJuceLibraryCode/modules $(CPPFLAGS) + JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0" + JUCE_TARGET_APP := Tchick + + JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 $(CFLAGS) + JUCE_CXXFLAGS += $(JUCE_CFLAGS) -std=c++20 $(CXXFLAGS) + JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) $(shell $(PKG_CONFIG) --libs alsa freetype2 libcurl) -fvisibility=hidden -lrt -ldl -lpthread $(LDFLAGS) + + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) +endif + +ifeq ($(CONFIG),Release) + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Release + JUCE_OUTDIR := build + + ifeq ($(TARGET_ARCH),) + TARGET_ARCH := + endif + + JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=1" "-DJUCE_USE_DARK_SPLASH_SCREEN=0" "-DJUCE_PROJUCER_VERSION=0x70003" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_JACK=1" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_B28D=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -IJuceLibraryCode -IJuceLibraryCode/modules $(CPPFLAGS) + JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0" + JUCE_TARGET_APP := Tchick + + JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3 $(CFLAGS) + JUCE_CXXFLAGS += $(JUCE_CFLAGS) -std=c++20 $(CXXFLAGS) + JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) $(shell $(PKG_CONFIG) --libs alsa freetype2 libcurl) -fvisibility=hidden -lrt -ldl -lpthread $(LDFLAGS) + + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) +endif + +OBJECTS_APP := \ + $(JUCE_OBJDIR)/OptionsPanel_74384d2f.o \ + $(JUCE_OBJDIR)/TempoPanel_68242652.o \ + $(JUCE_OBJDIR)/PlayPanel_f7a1c6f1.o \ + $(JUCE_OBJDIR)/MesurePanel_621c6998.o \ + $(JUCE_OBJDIR)/Config_df6c736b.o \ + $(JUCE_OBJDIR)/BPMPanel_fcde4d0e.o \ + $(JUCE_OBJDIR)/Main_b18eef62.o \ + $(JUCE_OBJDIR)/Metronome_d2176e73.o \ + $(JUCE_OBJDIR)/MainComponent_fec15f05.o \ + $(JUCE_OBJDIR)/include_juce_audio_basics_854129ea.o \ + $(JUCE_OBJDIR)/include_juce_audio_devices_c670bf62.o \ + $(JUCE_OBJDIR)/include_juce_audio_formats_7957c261.o \ + $(JUCE_OBJDIR)/include_juce_audio_processors_46d0f806.o \ + $(JUCE_OBJDIR)/include_juce_audio_processors_ara_80e36097.o \ + $(JUCE_OBJDIR)/include_juce_audio_processors_lv2_libs_badcdc68.o \ + $(JUCE_OBJDIR)/include_juce_audio_utils_d9446d36.o \ + $(JUCE_OBJDIR)/include_juce_core_f75b497b.o \ + $(JUCE_OBJDIR)/include_juce_data_structures_7e723c43.o \ + $(JUCE_OBJDIR)/include_juce_events_92002035.o \ + $(JUCE_OBJDIR)/include_juce_graphics_915442e7.o \ + $(JUCE_OBJDIR)/include_juce_gui_basics_1fa21125.o \ + $(JUCE_OBJDIR)/include_juce_gui_extra_fc3dee7a.o \ + +.PHONY: clean all strip + +all : $(JUCE_OUTDIR)/$(JUCE_TARGET_APP) + +$(JUCE_OUTDIR)/$(JUCE_TARGET_APP) : $(OBJECTS_APP) $(RESOURCES) + @command -v $(PKG_CONFIG) >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; } + @$(PKG_CONFIG) --print-errors alsa freetype2 libcurl + @echo Linking "Tchick - App" + -$(V_AT)mkdir -p $(JUCE_BINDIR) + -$(V_AT)mkdir -p $(JUCE_LIBDIR) + -$(V_AT)mkdir -p $(JUCE_OUTDIR) + $(V_AT)$(CXX) -o $(JUCE_OUTDIR)/$(JUCE_TARGET_APP) $(OBJECTS_APP) $(JUCE_LDFLAGS) $(JUCE_LDFLAGS_APP) $(RESOURCES) $(TARGET_ARCH) + +$(JUCE_OBJDIR)/OptionsPanel_74384d2f.o: Source/OptionsPanel.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling OptionsPanel.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/TempoPanel_68242652.o: Source/TempoPanel.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling TempoPanel.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/PlayPanel_f7a1c6f1.o: Source/PlayPanel.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling PlayPanel.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/MesurePanel_621c6998.o: Source/MesurePanel.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling MesurePanel.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/Config_df6c736b.o: Source/Config.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling Config.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/BPMPanel_fcde4d0e.o: Source/BPMPanel.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling BPMPanel.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/Main_b18eef62.o: Source/Main.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling Main.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/Metronome_d2176e73.o: Source/Metronome.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling Metronome.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/MainComponent_fec15f05.o: Source/MainComponent.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling MainComponent.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/include_juce_audio_basics_854129ea.o: JuceLibraryCode/include_juce_audio_basics.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling include_juce_audio_basics.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/include_juce_audio_devices_c670bf62.o: JuceLibraryCode/include_juce_audio_devices.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling include_juce_audio_devices.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/include_juce_audio_formats_7957c261.o: JuceLibraryCode/include_juce_audio_formats.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling include_juce_audio_formats.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/include_juce_audio_processors_46d0f806.o: JuceLibraryCode/include_juce_audio_processors.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling include_juce_audio_processors.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/include_juce_audio_processors_ara_80e36097.o: JuceLibraryCode/include_juce_audio_processors_ara.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling include_juce_audio_processors_ara.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/include_juce_audio_processors_lv2_libs_badcdc68.o: JuceLibraryCode/include_juce_audio_processors_lv2_libs.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling include_juce_audio_processors_lv2_libs.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/include_juce_audio_utils_d9446d36.o: JuceLibraryCode/include_juce_audio_utils.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling include_juce_audio_utils.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/include_juce_core_f75b497b.o: JuceLibraryCode/include_juce_core.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling include_juce_core.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/include_juce_data_structures_7e723c43.o: JuceLibraryCode/include_juce_data_structures.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling include_juce_data_structures.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/include_juce_events_92002035.o: JuceLibraryCode/include_juce_events.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling include_juce_events.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/include_juce_graphics_915442e7.o: JuceLibraryCode/include_juce_graphics.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling include_juce_graphics.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/include_juce_gui_basics_1fa21125.o: JuceLibraryCode/include_juce_gui_basics.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling include_juce_gui_basics.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" + +$(JUCE_OBJDIR)/include_juce_gui_extra_fc3dee7a.o: JuceLibraryCode/include_juce_gui_extra.cpp + -$(V_AT)mkdir -p $(JUCE_OBJDIR) + @echo "Compiling include_juce_gui_extra.cpp" + $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" + +clean: + @echo Cleaning Tchick + $(V_AT)$(CLEANCMD) + +strip: + @echo Stripping Tchick + -$(V_AT)$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET) + +-include $(OBJECTS_APP:%.o=%.d) diff --git a/README.md b/README.md index 8a3a67e..b7a767f 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,12 @@ # Tchick -Simple metronome \ No newline at end of file +A basic metronome application built to test capabilities of [JUCE](https://github.com/juce-framework/JUCE) +audio application framework. + +## Build +Generate your prefered build chain via Projucer by opening Tchick.sln +Visual Studio 2022 and linux makefiles are provided as examples. +On linux, you have to copy Assets/Clicks folder in the output directory. + +## Run +Run the executable. Click play button. Have fun. \ No newline at end of file diff --git a/Source/.continue/mcpServers/new-mcp-server.yaml b/Source/.continue/mcpServers/new-mcp-server.yaml new file mode 100644 index 0000000..0e32aa6 --- /dev/null +++ b/Source/.continue/mcpServers/new-mcp-server.yaml @@ -0,0 +1,10 @@ +name: New MCP server +version: 0.0.1 +schema: v1 +mcpServers: + - name: New MCP server + command: npx + args: + - -y + - + env: {} diff --git a/Source/.continue/rules/new-rule.md b/Source/.continue/rules/new-rule.md new file mode 100644 index 0000000..f9554c7 --- /dev/null +++ b/Source/.continue/rules/new-rule.md @@ -0,0 +1,5 @@ +--- +description: A description of your rule +--- + +Your rule content \ No newline at end of file diff --git a/Source/.vscode/settings.json b/Source/.vscode/settings.json new file mode 100644 index 0000000..0c2297c --- /dev/null +++ b/Source/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "continue.enableConsole": true, + "continue.enableQuickActions": true, + "continue.telemetryEnabled": false +} \ No newline at end of file diff --git a/Source/BPMPanel.cpp b/Source/BPMPanel.cpp new file mode 100644 index 0000000..68f671b --- /dev/null +++ b/Source/BPMPanel.cpp @@ -0,0 +1,156 @@ +/* + ============================================================================== + Copyright 2022 Nicolas Chambert + +This program is free software : you can redistribute itand /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 < http://www.gnu.org/licenses/>. + + ============================================================================== +*/ + +/* + ============================================================================== + + Gestion du tempo. + + ============================================================================== +*/ + +#include "BPMPanel.h" + + +BPMPanel::BPMPanel(juce::Colour c) : backgroundColour(c) +{ + // initialisation de l'interface + addComponent(decrement); + addComponent(bpm); + addComponent(increment); + + addComponent(twice); + addComponent(half); + addComponent(set60); + addComponent(set90); + addComponent(set120); + addComponent(set150); + + decrement.setRepeatSpeed(300, 100); // On veux pouvoir laisser le bouton appuyé + increment.setRepeatSpeed(300, 100); + + bpm.setText("72", juce::dontSendNotification); + bpm.getFont().setBold(true); + bpm.setColour(juce::Label::textColourId, juce::Colours::black); + bpm.setJustificationType(juce::Justification::centred); + bpm.setFont(50); +} + +void BPMPanel::addComponent(juce::Component& c) +{ + addAndMakeVisible(c); + c.setColour(juce::TextButton::buttonColourId, backgroundColour); + c.setColour(juce::TextButton::textColourOffId, juce::Colours::black); +} + +void BPMPanel::mouseWheelMove(const juce::MouseEvent&, + const juce::MouseWheelDetails& wheel) +{ + // capture des mouseWheel pour invoquer increment/decrement + float dir = wheel.deltaY * (wheel.isReversed ? -1.0f : 1.0f); + if (dir > 0) + { + increment.onClick(); + } + else + { + decrement.onClick(); + } +} + +void BPMPanel::paint(juce::Graphics& g) +{ + g.fillAll(backgroundColour); +} + +void BPMPanel::resized() +{ + // Layout à la mano avec une première ligne pour les raccourcis + auto area = getLocalBounds(); + int margin = 3; + area.removeFromTop(3*margin); + + { + // première ligne accès rapide aux speeds + int setLinHeigth = 20; + auto setSpeed = area.removeFromTop(setLinHeigth); + int butWidth = 64; + int marginH = (setSpeed.getWidth() - butWidth * 4) / 2; + setSpeed.removeFromLeft(marginH); + set60.setBounds(setSpeed.removeFromLeft(butWidth)); setSpeed.removeFromLeft(margin); + set90.setBounds(setSpeed.removeFromLeft(butWidth)); setSpeed.removeFromLeft(margin); + set120.setBounds(setSpeed.removeFromLeft(butWidth)); setSpeed.removeFromLeft(margin); + set150.setBounds(setSpeed.removeFromLeft(butWidth)); setSpeed.removeFromLeft(margin); + } + + area.removeFromTop(margin); + + // Et une deuxième ligne avec increment/decrement et le tempo courant + { + // deuxième ligne BPM inc + dec + int butHeigth = 20; + int butWidth = 64; + int labeSize = 5 * butHeigth; + int totalWidth = 2 * butWidth + labeSize; + int marginH = (area.getWidth() - totalWidth) / 2; + int marginV = (area.getHeight() - labeSize) / 2; + decrement.setBounds(area.getX() + marginH, area.getY() + marginV + butHeigth, butWidth, 2 * butHeigth); + half.setBounds(area.getX() + marginH, area.getY() + marginV + 3 * butHeigth + margin, butWidth, butHeigth); + + bpm.setBounds(area.getX() + marginH + butWidth, area.getY() + marginV, labeSize, labeSize); + + increment.setBounds(area.getX() + marginH + butWidth + labeSize, area.getY() + marginV + butHeigth, butWidth, 2 * butHeigth); + twice.setBounds(area.getX() + marginH + butWidth + labeSize, area.getY() + marginV + 3 * butHeigth + margin, butWidth, butHeigth); + } +} + +void BPMPanel::init(Metronome & metro) +{ + // On établi les liaisons entre le Metronome et les composants graphique + bpm.setText(juce::String(metro.getBPM()), juce::dontSendNotification); // On récupère la valeur initiale du tempo + increment.onClick = [&, this]() { inc(metro); }; + decrement.onClick = [&, this]() { dec(metro); }; + set60.onClick = [&, this]() { setBPM(metro, 60); }; + set90.onClick = [&, this]() { setBPM(metro, 90); }; + set120.onClick = [&, this]() { setBPM(metro, 120); }; + set150.onClick = [&, this]() { setBPM(metro, 150); }; + half.onClick = [&, this]() { setBPM(metro, metro.getBPM() / 2); }; + twice.onClick = [&, this]() { setBPM(metro, metro.getBPM() * 2); }; +} + +void BPMPanel::inc(Metronome& metro) +{ + // Ajoute 1 au tempo + metro.setBPM(metro.getBPM() + 1); + bpm.setText(juce::String(metro.getBPM()), juce::dontSendNotification); +} + +void BPMPanel::dec(Metronome& metro) +{ + // reduit le tempo de 1 + metro.setBPM(metro.getBPM() - 1); + bpm.setText(juce::String(metro.getBPM()), juce::dontSendNotification); +} +void BPMPanel::setBPM(Metronome& metro, int value) +{ + // défini la nouvelle valeur du tempo + metro.setBPM(value); + bpm.setText(juce::String(metro.getBPM()), juce::dontSendNotification); +} \ No newline at end of file diff --git a/Source/BPMPanel.h b/Source/BPMPanel.h new file mode 100644 index 0000000..265add9 --- /dev/null +++ b/Source/BPMPanel.h @@ -0,0 +1,66 @@ +#pragma once +/* + ============================================================================== + Copyright 2022 Nicolas Chambert + +This program is free software : you can redistribute itand /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 < http://www.gnu.org/licenses/>. + + ============================================================================== +*/ + +/* + ============================================================================== + + Gestion du tempo. + + ============================================================================== +*/ + +#include +#include "Metronome.h" + +struct BPMPanel : public juce::Component +{ + explicit BPMPanel(juce::Colour c); + + // Méthode de surcharge JUCE + void mouseWheelMove(const juce::MouseEvent&, + const juce::MouseWheelDetails& wheel) override; // on prend en charge le mouseWheel pour changer le tempo + + void paint(juce::Graphics& g) override; + + void resized() override; + + // utilitaire graphique + void addComponent(juce::Component& c); + + // méthodes de gestion du tempo + void init(Metronome& metro); + void inc(Metronome& metro); + void dec(Metronome& metro); + void setBPM(Metronome& metro, int value); + + // composants graphiques + juce::Colour backgroundColour; + juce::TextButton increment{ "+" }; + juce::TextButton decrement{ "-" }; + juce::TextButton twice{ "*2" }; + juce::TextButton half{ "/2" }; + juce::TextButton set60{ "60" }; + juce::TextButton set90{ "90" }; + juce::TextButton set120{ "120" }; + juce::TextButton set150{ "150" }; + juce::Label bpm; +}; + diff --git a/Source/Config.cpp b/Source/Config.cpp new file mode 100644 index 0000000..de62bfc --- /dev/null +++ b/Source/Config.cpp @@ -0,0 +1,104 @@ +/* + ============================================================================== + Copyright 2022 Nicolas Chambert + +This program is free software : you can redistribute itand /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 < http://www.gnu.org/licenses/>. + + ============================================================================== +*/ + +/* + ============================================================================== + + Gestion de la sauvegarde de la configuration courante. + + ============================================================================== +*/ + +#include "Config.h" + +// petit singleton +Config* Config::instance = nullptr; + + +Config& Config::Load() +{ + if (instance == nullptr) + instance = new Config(); + + // On cherche le fichier json dans le repertoire courant + juce::File curDir{ juce::File::getSpecialLocation(juce::File::SpecialLocationType::currentExecutableFile).getParentDirectory() }; + juce::File confFile{ curDir.getChildFile("tchick.json") }; + + if (confFile.exists()) + { + // s'il existe, on le charge + auto content = juce::JSON::parse(confFile); + instance->fromVar(content); + } + + return *instance; +} + +void Config::Save(Metronome& metro, OptionsPanel& options) +{ + // On initialise les paramètres + instance->bpm = metro.getBPM(); + instance->measures = metro.getMeasures(); + instance->gain = metro.getGain(); + instance->figure = (int)metro.getFigure(); + instance->sound = options.getSoundName(); + + // on transforme en var + juce::var obj = instance->asVar(); + + // on met à jours le fichier + juce::File curDir{ juce::File::getSpecialLocation(juce::File::SpecialLocationType::currentExecutableFile).getParentDirectory() }; + juce::File confFile{ curDir.getChildFile("tchick.json") }; + juce::FileOutputStream stream(confFile); + + if (stream.openedOk()) + { + // méthode préconisé pour ecraser le fichier existant + stream.setPosition(0); + stream.truncate(); + juce::JSON::writeToStream(stream, obj); + } +} + +juce::var Config::asVar() +{ + // création du var à partir de this + juce::DynamicObject* obj = new juce::DynamicObject(); + juce::NamedValueSet& properties = obj->getProperties(); + properties.set("bpm", bpm); + properties.set("measures", measures); + properties.set("gain", gain); + properties.set("sound", sound); + properties.set("figure", figure); + return juce::var(obj); +} + +void Config::fromVar(juce::var var) +{ + // chargement des paramètres depuis un var + juce::DynamicObject* obj = var.getDynamicObject(); + juce::NamedValueSet& properties = obj->getProperties(); + + if(properties.contains("bpm")) bpm = properties["bpm"]; + if(properties.contains("measures")) measures = properties["measures"]; + if(properties.contains("gain")) gain = properties["gain"]; + if(properties.contains("sound")) sound = properties["sound"]; + if(properties.contains("figure")) figure = properties["figure"]; +} \ No newline at end of file diff --git a/Source/Config.h b/Source/Config.h new file mode 100644 index 0000000..f834305 --- /dev/null +++ b/Source/Config.h @@ -0,0 +1,67 @@ +#pragma once +/* + ============================================================================== + Copyright 2022 Nicolas Chambert + +This program is free software : you can redistribute itand /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 < http://www.gnu.org/licenses/>. + + ============================================================================== +*/ + +/* + ============================================================================== + + Gestion de la sauvegarde de la configuration courante. + + ============================================================================== +*/ + +#include +#include "Metronome.h" +#include "OptionsPanel.h" + + +class Metronome; +struct OptionsPanel; +class Config +{ +public: + ~Config() {}; + + // charge la config depuis le fichier json ou les valeurs par defaut + static Config& Load(); + + // enregistre la config dans le fichier json + static void Save(Metronome& metro, OptionsPanel& options); + + // paramètres sauvegardés + int bpm{ 72 }; // default 72 + int measures{ 4 }; // default 4 + float gain{ 1.0f }; // default 1.0 + juce::String sound{ "" }; // default empty + int figure{ 1 }; // default 1 (noire) + + +private: + // je crois que c'est pas suffisant mais on devrait toujours passer par les méthodes statiques + Config() {}; + + // convertisseur paramètre <-> var + juce::var asVar(); + + void fromVar(juce::var var); + + // seule instance de config + static Config* instance; +}; \ No newline at end of file diff --git a/Source/Figures.h b/Source/Figures.h new file mode 100644 index 0000000..3c6ec4e --- /dev/null +++ b/Source/Figures.h @@ -0,0 +1,43 @@ +#pragma once +/* + ============================================================================== + Copyright 2022 Nicolas Chambert + +This program is free software : you can redistribute itand /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 < http://www.gnu.org/licenses/>. + + ============================================================================== +*/ + +/* + ============================================================================== + + Elements graphiques svg, notament les figures rythmiques. + Versions modifiés de svg Wikimedia + Et bouton play fait à la main + + ============================================================================== +*/ + +#include + +namespace SVGFigures +{ + const juce::String blanche(" "); + const juce::String noire(" "); + const juce::String croches(" "); + const juce::String triolet(" "); + const juce::String doubles(" "); + const juce::String swing(" "); + const juce::String play(" "); +} \ No newline at end of file diff --git a/Source/Main.cpp b/Source/Main.cpp new file mode 100644 index 0000000..a25eb46 --- /dev/null +++ b/Source/Main.cpp @@ -0,0 +1,118 @@ +/* + ============================================================================== + Copyright 2022 Nicolas Chambert + +This program is free software : you can redistribute itand /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 < http://www.gnu.org/licenses/>. + + ============================================================================== +*/ + +#include +#include "MainComponent.h" + +//============================================================================== +class MetronomeApplication : public juce::JUCEApplication +{ +public: + //============================================================================== + MetronomeApplication() {} + + const juce::String getApplicationName() override { return ProjectInfo::projectName; } + const juce::String getApplicationVersion() override { return ProjectInfo::versionString; } + bool moreThanOneInstanceAllowed() override { return true; } + + //============================================================================== + void initialise (const juce::String&) override + { + // This method is where you should put your application's initialisation code.. + + mainWindow.reset (new MainWindow (getApplicationName())); + } + + void shutdown() override + { + // Add your application's shutdown code here.. + + mainWindow = nullptr; // (deletes our window) + } + + //============================================================================== + void systemRequestedQuit() override + { + // This is called when the app is being asked to quit: you can ignore this + // request and let the app carry on running, or call quit() to allow the app to close. + quit(); + } + + void anotherInstanceStarted (const juce::String&) override + { + // When another instance of the app is launched while this one is running, + // this method is invoked, and the commandLine parameter tells you what + // the other instance's command-line arguments were. + } + + //============================================================================== + /* + This class implements the desktop window that contains an instance of + our MainComponent class. + */ + class MainWindow : public juce::DocumentWindow + { + public: + MainWindow (juce::String name) + : DocumentWindow (name, + juce::Desktop::getInstance().getDefaultLookAndFeel() + .findColour (juce::ResizableWindow::backgroundColourId), + DocumentWindow::allButtons) + { + setUsingNativeTitleBar (true); + setContentOwned (new MainComponent(Config::Load()), true); // On charge la configuration json et on la passe au constructeur de MainComponent + + #if JUCE_IOS || JUCE_ANDROID + setFullScreen (true); + #else + setResizable (false, false); + centreWithSize (getWidth(), getHeight()); + #endif + + setVisible (true); + } + + void closeButtonPressed() override + { + // This is called when the user tries to close this window. Here, we'll just + // ask the app to quit when this happens, but you can change this to do + // whatever you need. + ((MainComponent*)getContentComponent())->saveConfig(); + JUCEApplication::getInstance()->systemRequestedQuit(); + } + + /* Note: Be careful if you override any DocumentWindow methods - the base + class uses a lot of them, so by overriding you might break its functionality. + It's best to do all your work in your content component instead, but if + you really have to override any DocumentWindow methods, make sure your + subclass also calls the superclass's method. + */ + + private: + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainWindow) + }; + +private: + std::unique_ptr mainWindow; +}; + +//============================================================================== +// This macro generates the main() routine that launches the app. +START_JUCE_APPLICATION (MetronomeApplication) diff --git a/Source/MainComponent.cpp b/Source/MainComponent.cpp new file mode 100644 index 0000000..fe2a43a --- /dev/null +++ b/Source/MainComponent.cpp @@ -0,0 +1,143 @@ +/* + ============================================================================== + Copyright 2022 Nicolas Chambert + +This program is free software : you can redistribute itand /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 < http://www.gnu.org/licenses/>. + + ============================================================================== +*/ + + + +#include "MainComponent.h" + +//============================================================================== +MainComponent::MainComponent(Config& conf) : + metronome(conf), + measures(juce::Colours::whitesmoke), + bpm(juce::Colours::whitesmoke), + tempo(juce::Colours::whitesmoke), + playButton(juce::Colours::whitesmoke), + options(juce::Colours::whitesmoke, conf) +{ + addAndMakeVisible (measures); + addAndMakeVisible (bpm); + bpm.init(metronome); + addAndMakeVisible (tempo); + tempo.init(metronome); + + addAndMakeVisible(playButton); + playButton.init(metronome); + addAndMakeVisible (options); + options.init(metronome); + + setSize (400, 600); + + // Some platforms require permissions to open input channels so request that here + if (juce::RuntimePermissions::isRequired (juce::RuntimePermissions::recordAudio) + && ! juce::RuntimePermissions::isGranted (juce::RuntimePermissions::recordAudio)) + { + juce::RuntimePermissions::request (juce::RuntimePermissions::recordAudio, + [&] (bool granted) { if (granted) setAudioChannels (2, 2); }); + } + else + { + // Specify the number of input and output channels that we want to open + setAudioChannels (0, 2); + } + + startTimer(20); // timer pour aller relire les eventuels signaux du métronome +} + +MainComponent::~MainComponent() +{ + shutdownAudio(); +} + +//============================================================================== +void MainComponent::prepareToPlay (int , double sampleRate) +{ + metronome.prepareToPlay(sampleRate); // passe le sampleRate au métronome +} + +void MainComponent::getNextAudioBlock (const juce::AudioSourceChannelInfo& bufferToFill) +{ + // netoyage de l'entrée + bufferToFill.clearActiveBufferRegion(); + + if (playButton.playState == PlayState::playing) + { + // boucle de lecture du métronome + metronome.getNextAudioBlock (bufferToFill); + } +} + +void MainComponent::releaseResources() +{ +} + +//============================================================================== +void MainComponent::paint (juce::Graphics& g) +{ + g.fillAll (juce::Colours::lightgrey); +} + +void MainComponent::resized() +{ + // Comme on à séparé tout en composants, on utilise un simple grille en ligne + juce::Grid grid; + using Track = juce::Grid::TrackInfo; + using Fr = juce::Grid::Fr; + grid.templateRows = { Track (Fr (5)), Track (Fr (12)), Track (Fr (8)),Track (Fr (20)), Track (Fr (4)) }; + grid.templateColumns = { Track (Fr (1)) }; + + float margin = 1.0f; + grid.items = { + juce::GridItem (measures).withMargin(juce::GridItem::Margin(0.0f, 0.0f, margin, 0.0f)), + juce::GridItem (bpm).withMargin(juce::GridItem::Margin(margin, 0.0f, margin, 0.0f)), + juce::GridItem (tempo).withMargin(juce::GridItem::Margin(margin, 0.0f, margin, 0.0f)), + juce::GridItem(playButton).withMargin(juce::GridItem::Margin(margin, 0.0f, margin, 0.0f)), + juce::GridItem (options).withMargin(juce::GridItem::Margin(margin, 0.0f, 0.0f, 0.0f)), + }; + + + grid.performLayout (getLocalBounds()); +} + +void MainComponent::timerCallback() +{ + // On regarde si le metronome à des choses à nous dire (changement de mesure) + if (metronome.signal.get() == true) + { + int cur = metronome.getCurrentMeasure(); + metronome.signal.set(false); // on ferme le signal + int meas = metronome.getMeasures(); + cur = cur > 0 ? cur - 1 : cur; + measures.update(meas, cur % meas); + if (cur != lastcur) + { + // On à changé de mesure, on indique au playButton de s'allumer pendant 6 frames + playButton.highlightFrames = 6; + lastcur = cur; + } + } + + playButton.highlight(); // le bouton va se redessiner et decrementer son highlightFrames +} + +void MainComponent::saveConfig() +{ + // sauvegarde la configuration du metronome à la fermeture + Config::Save(metronome, options); +} \ No newline at end of file diff --git a/Source/MainComponent.h b/Source/MainComponent.h new file mode 100644 index 0000000..1feabb3 --- /dev/null +++ b/Source/MainComponent.h @@ -0,0 +1,79 @@ +#pragma once +/* + ============================================================================== + Copyright 2022 Nicolas Chambert + +This program is free software : you can redistribute itand /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 < http://www.gnu.org/licenses/>. + + ============================================================================== +*/ + + +#include +#include "MesurePanel.h" +#include "BPMPanel.h" +#include "TempoPanel.h" +#include "PlayPanel.h" +#include "OptionsPanel.h" +#include "Metronome.h" + +//============================================================================== + +/* + This component lives inside our window, and this is where you should put all + your controls and content. +*/ + + + +class MainComponent : private juce::Timer, public juce::AudioAppComponent +{ +public: + //============================================================================== + MainComponent(Config& conf); + ~MainComponent(); + + //============================================================================== + void prepareToPlay (int , double sampleRate) override; + void getNextAudioBlock (const juce::AudioSourceChannelInfo& bufferToFill) override; + void releaseResources() override; + + //============================================================================== + void paint (juce::Graphics& g) override; + void resized() override; + + void saveConfig(); + +private: + MesurePanel measures; + BPMPanel bpm; + PlayPanel playButton; + TempoPanel tempo; + OptionsPanel options; + + Metronome metronome; + + // conserve la dernière mesure pour déclencher le highlight en cas de changement + int lastcur; + + // Utilisation d'un timer pour relire les signaux du metronome + // timer de 20ms, largement suffisant pour un retour graphique sans surcharger le processeur (~50fps) + void timerCallback() override; + + // permet de faire clignoter le bouton play sur le temps + void highlight(); + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainComponent) +}; + diff --git a/Source/MesurePanel.cpp b/Source/MesurePanel.cpp new file mode 100644 index 0000000..5ad45b7 --- /dev/null +++ b/Source/MesurePanel.cpp @@ -0,0 +1,133 @@ + +#include "MesurePanel.h" +/* + ============================================================================== + Copyright 2022 Nicolas Chambert + +This program is free software : you can redistribute itand /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 < http://www.gnu.org/licenses/>. + + ============================================================================== +*/ + +/* + ============================================================================== + + Gestion du nombre de temps par mesure. + + ============================================================================== +*/ + +void RoundCBLookAndFeel::drawToggleButton(juce::Graphics& g, juce::ToggleButton& button, + bool shouldDrawButtonAsHighlighted, bool shouldDrawButtonAsDown) +{ + // dessine un cercle au lieux d'un bouton + auto fontSize = juce::jmin(15.0f, (float)button.getHeight() * 0.75f); + auto tickWidth = fontSize * 1.1f; + + drawTickBox(g, button, 4.0f, ((float)button.getHeight() - tickWidth) * 0.5f, + tickWidth, tickWidth, + button.getToggleState(), + button.isEnabled(), + shouldDrawButtonAsHighlighted, + shouldDrawButtonAsDown); +} + +void RoundCBLookAndFeel::drawTickBox(juce::Graphics& g, juce::Component& component, + float x, float y, float w, float h, + bool ticked, bool isEnabled, + bool shouldDrawButtonAsHighlighted, bool shouldDrawButtonAsDown) +{ + // dessine un cercle au lieux d'un bouton + juce::ignoreUnused(isEnabled, shouldDrawButtonAsHighlighted, shouldDrawButtonAsDown); + + g.setColour(component.findColour(juce::ToggleButton::tickDisabledColourId)); + g.drawEllipse(x, y, w, h, 1.0f); + + if (ticked) + { + g.setColour(component.findColour(juce::ToggleButton::tickColourId)); + g.fillEllipse(x, y, w, h); + } +} + + + +MesurePanel::MesurePanel(juce::Colour c) : backgroundColour(c) +{ + lef.reset(new RoundCBLookAndFeel()); + update(4, 0); +} + +MesurePanel::~MesurePanel() +{ + // evite une fuite mémoire à la fermeture due au L&F + for (auto& tb : buttons) + { + removeChildComponent(tb); + tb->setLookAndFeel(nullptr); + } +} + +void MesurePanel::paint(juce::Graphics& g) +{ + g.fillAll(backgroundColour); +} + +void MesurePanel::update(int nb, int cur) +{ + // Construit autant de bouton qu'il y a de temps + if (buttons.size() != nb) + { + // Si la mesure à changé on reinitialise + for (auto& tb : buttons) + { + removeChildComponent(tb); + tb->setVisible(false); + + } + + buttons.clear(); + for (int i = 0; i < nb; ++i) + { + auto* tb = new juce::ToggleButton(juce::String(i)); + addAndMakeVisible(buttons.add(tb)); + tb->setRadioGroupId(1234); + tb->setColour(juce::ToggleButton::tickDisabledColourId, juce::Colours::black); + tb->setColour(juce::ToggleButton::tickColourId, juce::Colours::black); + tb->setLookAndFeel(lef.get()); + } + } + + // On sélectionne le bouton correpondant au temps courant + for (int i = 0; i < nb; ++i) + { + buttons[i]->setToggleState(i == cur, juce::dontSendNotification); + } + + resized(); +} + +void MesurePanel::resized() +{ + // Layout via une flexbox pour répartir les boutons en ligne + juce::FlexBox fb; + fb.flexWrap = juce::FlexBox::Wrap::wrap; + fb.justifyContent = juce::FlexBox::JustifyContent::center; + fb.alignContent = juce::FlexBox::AlignContent::center; + + for (auto* b : buttons) + fb.items.add(juce::FlexItem(*b).withMinWidth(40.0f).withMinHeight(40.0f)); + + fb.performLayout(getLocalBounds().toFloat()); +} \ No newline at end of file diff --git a/Source/MesurePanel.h b/Source/MesurePanel.h new file mode 100644 index 0000000..61e536f --- /dev/null +++ b/Source/MesurePanel.h @@ -0,0 +1,62 @@ +#pragma once +/* + ============================================================================== + Copyright 2022 Nicolas Chambert + +This program is free software : you can redistribute itand /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 < http://www.gnu.org/licenses/>. + + ============================================================================== +*/ + +/* + ============================================================================== + + Gestion du nombre de temps par mesure. + + ============================================================================== +*/ + +#include + +// Surcharge les boutons pour un rond plein ou vide +struct RoundCBLookAndFeel : public juce::LookAndFeel_V4 +{ + void drawToggleButton(juce::Graphics& g, juce::ToggleButton& button, + bool shouldDrawButtonAsHighlighted, bool shouldDrawButtonAsDown) override; + + void drawTickBox(juce::Graphics& g, juce::Component& component, + float x, float y, float w, float h, + bool ticked, bool isEnabled, + bool shouldDrawButtonAsHighlighted, bool shouldDrawButtonAsDown) override; +}; + +// Panneau d'affichage de la mesure en cours +struct MesurePanel : public juce::Component +{ + explicit MesurePanel(juce::Colour c); + + ~MesurePanel(); + + // Méthode de surcharge JUCE + void paint(juce::Graphics& g) override; + void resized() override; + + // méthodes internes + void update(int nb, int cur); + + // composants graphiques + juce::Colour backgroundColour; + juce::OwnedArray buttons; + std::unique_ptr lef; +}; \ No newline at end of file diff --git a/Source/Metronome.cpp b/Source/Metronome.cpp new file mode 100644 index 0000000..38c2881 --- /dev/null +++ b/Source/Metronome.cpp @@ -0,0 +1,246 @@ +/* + ============================================================================== + Copyright 2022 Nicolas Chambert + +This program is free software : you can redistribute itand /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 < http://www.gnu.org/licenses/>. + + ============================================================================== +*/ + +/* + ============================================================================== + + Moteur de l'application. Gère la lecture des samples Callé sur le bon tempo. + + ============================================================================== +*/ + +#include "Metronome.h" + +Metronome::Metronome(Config& conf) +{ + // on récupère les valeurs de la configuration + bpm.set(conf.bpm); + measures.set(conf.measures); + gain.set(conf.gain); + setFigure(conf.figure); + + // on initialise le lecteur wav + formatManager.registerBasicFormats(); + + // On crée 2 voie sur le synthé + for (auto i = 0; i < 2; ++i) + synth.addVoice(new juce::SamplerVoice()); +} + +Metronome::~Metronome() +{ + // libère les sons + synth.clearSounds(); +} + + +void Metronome::loadSounds(std::string high, std::string low) +{ + // chargement des sons high et low + auto mySamplesHigh = juce::File{high}; + auto mySamplesLow = juce::File{ low }; + + jassert(mySamplesHigh.exists()); + jassert(mySamplesLow.exists()); + synth.clearSounds(); + + juce::BigInteger usedNotes; + usedNotes.setRange(0, 1, true); + auto formatReaderHigh = formatManager.createReaderFor(mySamplesHigh); + synth.addSound(new juce::SamplerSound("High", *formatReaderHigh, usedNotes, 0, 0.0f, 0.0f, 999.0)); + delete formatReaderHigh; + + juce::BigInteger usedNotes2; + usedNotes2.setRange(1, 1, true); + auto formatReaderLow = formatManager.createReaderFor(mySamplesLow); + synth.addSound(new juce::SamplerSound("Low", *formatReaderLow, usedNotes2, 1, 0.0f, 0.0f, 999.0)); + delete formatReaderLow; +} + +void Metronome::prepareToPlay (double sr) +{ + // Appelé avant de démaré la lecture, on récupère la sr et on initialise le reste du moteur + sampleRate = sr; + updateInterval = (int)(60.0 / bpm.get() * sampleRate); + synth.setCurrentPlaybackSampleRate(sampleRate); + initMeasure(); +} + +void Metronome::getNextAudioBlock(juce::AudioSourceChannelInfo const& bufferToFill) +{ + // Méthode invoqué par le moteur audio. Le but est de remplir bufferToFill avec la waveform que l'on souhaite jouer + int const numSamples = bufferToFill.numSamples; + + juce::MidiBuffer midi; + int measCount = measures.get(); + + int measLength = updateInterval * measCount; // nombre de sample total dans une mesure + int start = lastPos; // Le premier index du buffer correspond au lastPos + int stop = lastPos + numSamples; // et la dernière position du buffer + for (auto cur : measStruct) + { + // On cherche Si dans notre mesure on a un click entre start et stop + int nextTick = (int)(cur.measPos * updateInterval); // le measPos est en relatif, on convertit en équivalent samples + if (stop > measLength) + { + // Dans le cas ou stop se situe sur la mesure suivante, on décale le nextTick d'une mesure + nextTick += measLength; + } + + if (nextTick >= start && nextTick < stop) + { + // On à trouvé un tick + if (cur.type != NoteType::mute) + { + // qui est pas mute + // on sélectionne la bone note, la bonne vélocité et on génère un événement midi à nextTick - start + int note = cur.type == NoteType::high ? 0 : 1; + float vel = cur.type == NoteType::lowLow ? 0.2f : 1.0f; + midi.addEvent(juce::MidiMessage::noteOn(1, note, vel), nextTick - start); + } + + // on signale l'interface (pour marquer le temps même s'il est mute) + signal.set(true); + } + } + + // On incrémente lastPos + lastPos = stop; + if (lastPos > measLength) + { + // Et on le remet dans la mesure suivante + lastPos -= measLength; + } + + // On demande au synthé de remplir le buffer + synth.renderNextBlock(*bufferToFill.buffer, + midi, + 0, + bufferToFill.numSamples); + + // On reprend la main sur le buffer pour appliquer le gain manuellement + float mult = gain.get(); + for (auto channel = 0; channel < bufferToFill.buffer->getNumChannels(); ++channel) + { + auto* buffer = bufferToFill.buffer->getWritePointer(channel, bufferToFill.startSample); + + for (auto sample = 0; sample < bufferToFill.numSamples; ++sample) + buffer[sample] = buffer[sample] * mult; + } +} + +void Metronome::reset() +{ + // raz + lastPos = 0; + signal.set(true); +} + +void Metronome::setBPM(int value) +{ + // contraint les BPM entre 10 et 400 + int coerce = juce::jlimit(10, 400, value); + bpm.set(coerce); + + int lastInterval = updateInterval; + updateInterval = (int)(60.0 / bpm.get() * sampleRate); + // En cas de changement de BPM brutal on constate un décalage dans la lecture + // Pour remédier à ca on recalibre le lastPos en proportion du nouvel intervale + lastPos = (int)(lastPos * (float)updateInterval / (float)lastInterval); +} + +int Metronome::getCurrentMeasure() const +{ + // permet à l'UI de savoir sur quel temps de la mesure on se trouve + int numTemps = (lastPos + updateInterval - 1) / updateInterval; // nombre de temps depuis le start + return numTemps; +} + +void Metronome::initMeasure() +{ + // construit la structure de la mesure + measStruct.clear(); + int measCount = measures.get(); + switch (figure.get()) + { + case FigureType::blanche: + // On alterne click/Mute + for (size_t i = 0; i < measCount; ++i) + { + if (i % 2 == 0) + { + measStruct.push_back(MeasureTick((float)i, i == 0 ? NoteType::high : NoteType::low)); + } + else + { + measStruct.push_back(MeasureTick((float)i, NoteType::mute)); + } + } + + break; + case FigureType::noire: + // Un click par temps + for (size_t i = 0; i < measCount; ++i) + { + measStruct.push_back(MeasureTick((float)i, i == 0 ? NoteType::high : NoteType::low)); + } + + break; + case FigureType::croche: + // On alterne click/lowlow + for (size_t i = 0; i < measCount; ++i) + { + measStruct.push_back(MeasureTick((float)i, i == 0 ? NoteType::high : NoteType::low)); + measStruct.push_back(MeasureTick((float)i + 0.5f, NoteType::lowLow)); + } + + break; + case FigureType::triolet: + // On alterne click/lowlow/lowlow + for (size_t i = 0; i < measCount; ++i) + { + measStruct.push_back(MeasureTick((float)i, i == 0 ? NoteType::high : NoteType::low)); + measStruct.push_back(MeasureTick((float)i + 1.f / 3.f, NoteType::lowLow)); + measStruct.push_back(MeasureTick((float)i + 2.f / 3.f, NoteType::lowLow)); + } + break; + case FigureType::doubleCroche: + // On alterne click/lowlow/lowlow/lowlow + for (size_t i = 0; i < measCount; ++i) + { + measStruct.push_back(MeasureTick((float)i, i == 0 ? NoteType::high : NoteType::low)); + measStruct.push_back(MeasureTick((float)i + 0.25f, NoteType::lowLow)); + measStruct.push_back(MeasureTick((float)i + 0.5f, NoteType::lowLow)); + measStruct.push_back(MeasureTick((float)i + 0.75f, NoteType::lowLow)); + } + break; + case FigureType::swing: + // On alterne click/lowlow sur les 2/3 du temps + for (size_t i = 0; i < measCount; ++i) + { + measStruct.push_back(MeasureTick((float)i, i == 0 ? NoteType::high : NoteType::low)); + measStruct.push_back(MeasureTick((float)i + 2.f / 3.f, NoteType::lowLow)); + } + break; + + default: + break; + } +} diff --git a/Source/Metronome.h b/Source/Metronome.h new file mode 100644 index 0000000..d159f55 --- /dev/null +++ b/Source/Metronome.h @@ -0,0 +1,134 @@ +#pragma once +/* + ============================================================================== + Copyright 2022 Nicolas Chambert + +This program is free software : you can redistribute itand /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 < http://www.gnu.org/licenses/>. + + ============================================================================== +*/ + +/* + ============================================================================== + + Moteur de l'application. Gère la lecture des samples Callé sur le bon tempo. + + ============================================================================== +*/ + +#include +#include "Config.h" + +class Config; + +// Défini les 3 niveaux de clic utilisés par le métronome +// high marque le premier temps de la mesure. correspond au sample High*.wav +// low marque les autres temps de la mesure. correspond au sample Low*.wav +// lowlow est utilisé pour les clics intermédiares (croches,...). correspond au sample Low*.wav avec une vélocité réduite +// mute permet de marquer un silence sur le temps lorsqu'on bat la mesure à la blanche +enum class NoteType { high = 0, low = 1, lowLow = 2, mute = 3 }; + +// Les figures rythmiques disponibles : blanche, noire, croche, triolet, double croche +// la figure swing (ou shuffle) est construite sur un triolet avec un click sur le temps et un sur le 2/3 de temps. +// suivant l'interprétation, le swing devrait su situer entre le triolet et la double croche mais c'est moi qui décide. +enum class FigureType { blanche = 0, noire = 1, croche = 2, triolet = 3, doubleCroche = 4, swing = 5 }; + +// structure de base pour définir la structure rythmique de la mesure +struct MeasureTick +{ + // position du click dans la mesure en valeur absolu + // pour une mesure de 5 temps measPos est dans l'intervale [0, 5[ + float measPos; + + // type de click + NoteType type; +}; + +// Bat la mesure +class Metronome +{ +public: + Metronome(Config& configuration); + ~Metronome(); + + juce::Atomic signal; + + // méthodes de gestion du lecteur + void prepareToPlay (double sampleRate); + void getNextAudioBlock (const juce::AudioSourceChannelInfo& bufferToFill); + + // reinitialise le lecteur sur le stop + void reset(); + + // recharge les son high et low + void loadSounds(std::string high, std::string low); + + // accesseurs + int getBPM() const noexcept + { + return bpm.get(); + } + void setBPM(int value); + + int getMeasures() const noexcept + { + return measures.get(); + } + void setMeasures(int value) { + int coerce = juce::jlimit(1, 9, value); // On limite le nombre de mesure à 9 + measures.set(coerce); + initMeasure(); // reconstruit la structure de la mesure + signal.set(true); // signale à la GUI de se metre à jours + } + + int getCurrentMeasure() const; + + void setGain(float value) { + gain.set(value); + } + + float getGain() { + return gain.get(); + } + + void setFigure(int value) { + figure.set((FigureType)value); + initMeasure(); // reconstruit la structure de la mesure + } + + FigureType getFigure() { + return figure.get(); + } + + +private: + // variables réglables depuis l'UI (d'ou le Atomic) + juce::Atomic measures{ 4 }; // nombre de temps par mesure + juce::Atomic bpm{ 72 }; // tempo + juce::Atomic gain{ 1.0f }; // volume sonore + juce::Atomic figure{ FigureType::noire }; // type de figure utilisé pour construire la mesure + + // variables internes + double sampleRate { 0 }; // nombre de sample par secondes + int updateInterval{ 0 }; // nombre de sample entre 2 temps : 60/bpm*sr + int lastPos{ 0 }; // indice du dernier sample traité lors de l'appel getNextAudioBlock. Valeur réinitialisé à chaque mesure modulo la taille de la mesure + std::vector measStruct; // structure de la mesure, contient tout les clicks en fonction du nombre de mesure et de la figure courante + + juce::AudioFormatManager formatManager; // chargement des fichier wav + juce::Synthesiser synth; // la gestion direct du remplissage du buffer via getNextAudioBlock est trop compliqué + // On passe par un Synthé avec un fichier par note, on déclenche la lecture par un evenement midi déclenché précisément + + + void initMeasure(); // reconstruit la structure de la mesure +}; diff --git a/Source/OptionsPanel.cpp b/Source/OptionsPanel.cpp new file mode 100644 index 0000000..70151dd --- /dev/null +++ b/Source/OptionsPanel.cpp @@ -0,0 +1,319 @@ +/* + ============================================================================== + Copyright 2022 Nicolas Chambert + +This program is free software : you can redistribute itand /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 < http://www.gnu.org/licenses/>. + + ============================================================================== +*/ + +/* + ============================================================================== + + Gestion des options figure rythmique et fichier son du tick. + + ============================================================================== +*/ + +#include "OptionsPanel.h" +#include "Figures.h" + +void ClickSounds::init() +{ + // on récupère tout les sous dossiers dans App/Clicks + juce::File curDir{ juce::File::getSpecialLocation(juce::File::SpecialLocationType::currentExecutableFile).getParentDirectory() }; + juce::File clickDir{ curDir.getChildFile("Clicks")}; + auto it = clickDir.findChildFiles(juce::File::findDirectories, false); + for (int i = 0; i < it.size(); ++i) + { + juce::File sub = it[i]; + bool highFile = !sub.findChildFiles(juce::File::TypesOfFileToFind::findFiles, false, "High*.wav").isEmpty(); + bool lowFile = !sub.findChildFiles(juce::File::TypesOfFileToFind::findFiles, false, "Low*.wav").isEmpty(); + if (highFile && lowFile) + { + // On n'ajoute que si on a bien les fichiers High et Low + juce::String path = sub.getFullPathName(); + std::string ss = path.toStdString(); + sounds.push_back(ss); + } + } +} + +std::string ClickSounds::getSoundName(int i) const +{ + // Valeur affiché dans la combo, on récupère le nom du sous dossier + juce::File path{ sounds[i] }; + return path.getFileNameWithoutExtension().toStdString(); +} + +std::string ClickSounds::getSoundPathHigh(int i) const +{ + // Chemin vers le fichier High + juce::File path{ sounds[i] }; + return path.findChildFiles(juce::File::TypesOfFileToFind::findFiles, false, "High*.wav")[0].getFullPathName().toStdString(); +} +std::string ClickSounds::getSoundPathLow(int i) const +{ + // Chemin vers le fichier Low + juce::File path{ sounds[i] }; + return path.findChildFiles(juce::File::TypesOfFileToFind::findFiles, false, "Low*.wav")[0].getFullPathName().toStdString(); +} + +int ClickSounds::getIndex(std::string soundName) const +{ + // récupère l'index du fichier à partir de son nom + // Utilisé pour restaurer la configuration + // Du coup si le son n'est pas trouvé on retourne le premier son + for (int i = 0; i < sounds.size(); ++i) + { + if (getSoundName(i) == soundName) + { + return i; + } + } + + return 0; +} + +void ComboLookAndFeel::drawPopupMenuBackground(juce::Graphics& g, int width, int height) +{ + // Permet de setter le background du PopupMenu + g.fillAll(juce::Colours::whitesmoke); + juce::ignoreUnused(width, height); + +#if ! JUCE_MAC + g.setColour(juce::Colours::darkgrey.withAlpha(0.6f)); + g.drawRect(0, 0, width, height); +#endif +} + +void ComboLookAndFeel::drawPopupMenuItem(juce::Graphics& g, const juce::Rectangle& area, + const bool isSeparator, const bool isActive, + const bool isHighlighted, const bool isTicked, + const bool hasSubMenu, const juce::String& text, + const juce::String& shortcutKeyText, + const juce::Drawable* icon, const juce::Colour* const textColourToUse) +{ + // Permet de setter le background du PopupMenuItem + if (isSeparator) + { + auto r = area.reduced(5, 0); + r.removeFromTop(juce::roundToInt(((float)r.getHeight() * 0.5f) - 0.5f)); + + g.setColour(juce::Colours::darkgrey.withAlpha(0.3f)); + g.fillRect(r.removeFromTop(1)); + } + else + { + auto textColour = (textColourToUse == nullptr ? juce::Colours::darkgrey + : *textColourToUse); + + auto r = area.reduced(1); + + if (isHighlighted && isActive) + { + g.setColour(juce::Colours::lightgrey); + g.fillRect(r); + + g.setColour(juce::Colours::darkgrey); + } + else + { + g.setColour(textColour.withMultipliedAlpha(isActive ? 1.0f : 0.5f)); + } + + r.reduce(juce::jmin(5, area.getWidth() / 20), 0); + + auto font = getPopupMenuFont(); + + auto maxFontHeight = (float)r.getHeight() / 1.3f; + + if (font.getHeight() > maxFontHeight) + font.setHeight(maxFontHeight); + + g.setFont(font); + + auto iconArea = r.removeFromLeft(juce::roundToInt(maxFontHeight)).toFloat(); + + if (icon != nullptr) + { + icon->drawWithin(g, iconArea, juce::RectanglePlacement::centred | juce::RectanglePlacement::onlyReduceInSize, 1.0f); + r.removeFromLeft(juce::roundToInt(maxFontHeight * 0.5f)); + } + else if (isTicked) + { + auto tick = getTickShape(1.0f); + g.fillPath(tick, tick.getTransformToScaleToFit(iconArea.reduced(iconArea.getWidth() / 5, 0).toFloat(), true)); + } + + if (hasSubMenu) + { + auto arrowH = 0.6f * getPopupMenuFont().getAscent(); + + auto x = static_cast (r.removeFromRight((int)arrowH).getX()); + auto halfH = static_cast (r.getCentreY()); + + juce::Path path; + path.startNewSubPath(x, halfH - arrowH * 0.5f); + path.lineTo(x + arrowH * 0.6f, halfH); + path.lineTo(x, halfH + arrowH * 0.5f); + + g.strokePath(path, juce::PathStrokeType(2.0f)); + } + + r.removeFromRight(3); + g.drawFittedText(text, r, juce::Justification::centredLeft, 1); + + if (shortcutKeyText.isNotEmpty()) + { + auto f2 = font; + f2.setHeight(f2.getHeight() * 0.75f); + f2.setHorizontalScale(0.95f); + g.setFont(f2); + + g.drawText(shortcutKeyText, r, juce::Justification::centredRight, true); + } + } +} + + +OptionsPanel::OptionsPanel(juce::Colour c, Config& configuration) : backgroundColour(c) +{ + // initialisation de l'interface + clef.reset(new ComboLookAndFeel()); + addAndMakeVisible(figures); + auto doc = juce::XmlDocument::parse(SVGFigures::noire); // on charge la noire par defaut, va être re-initialisé par la configuration + auto note = juce::Drawable::createFromSVG(*doc); + figures.setImages(note.get()); + figures.setToggleState(false, juce::NotificationType::dontSendNotification); + figures.setColour(juce::TextButton::buttonColourId, juce::Colours::whitesmoke); + figures.setColour(juce::TextButton::textColourOffId, juce::Colours::black); + figures.onClick = [&] + { + // génère le dropdown menu des figures + juce::PopupMenu menu; + + int width = 70; + int height = 48; + menu.addCustomItem(1, std::make_unique(SVGFigures::blanche, width, height, juce::Colours::whitesmoke)); + menu.addCustomItem(4, std::make_unique(SVGFigures::triolet, width, height, juce::Colours::whitesmoke)); + menu.addCustomItem(2, std::make_unique(SVGFigures::noire, width, height, juce::Colours::whitesmoke)); + menu.addCustomItem(5, std::make_unique(SVGFigures::doubles, width, height, juce::Colours::whitesmoke)); + menu.addCustomItem(3, std::make_unique(SVGFigures::croches, width, height, juce::Colours::whitesmoke)); + menu.addCustomItem(6, std::make_unique(SVGFigures::swing, width, height, juce::Colours::whitesmoke)); + + menu.showMenuAsync(juce::PopupMenu::Options{}.withTargetComponent(figures) + .withMinimumNumColumns(3), [&](int resultId) { if(resultId > 0) setFigure(resultId - 1); }); + }; + + addAndMakeVisible(sounds); + sounds.setLookAndFeel(clef.get()); + sounds.setColour(juce::ComboBox::backgroundColourId, juce::Colours::whitesmoke); + sounds.setColour(juce::ComboBox::outlineColourId, juce::Colours::darkgrey); + sounds.setColour(juce::ComboBox::arrowColourId, juce::Colours::darkgrey); + sounds.setColour(juce::ComboBox::textColourId, juce::Colours::darkgrey); + clicksounds.init(); // charge la liste des sons + curSoundID = clicksounds.getIndex(configuration.sound.toStdString()); // récupère le son courant dans la configuration +} + +juce::String OptionsPanel::getSoundName() +{ + // Récupère le nom du son courant pour sauver la config + return clicksounds.getSoundName(sounds.getSelectedId() - 1); +} + +void OptionsPanel::setFigure(int figure) +{ + // MàJ de l'icone de la figure courante + juce::String newSVG; + switch (figure) + { + case 0: + newSVG = SVGFigures::blanche; + break; + case 2: + newSVG = SVGFigures::croches; + break; + case 3: + newSVG = SVGFigures::triolet; + break; + case 4: + newSVG = SVGFigures::doubles; + break; + case 5: + newSVG = SVGFigures::swing; + break; + case 1: + default: + newSVG = SVGFigures::noire; + break; + } + + auto doc = juce::XmlDocument::parse(newSVG); + auto note = juce::Drawable::createFromSVG(*doc); + figures.setImages(note.get()); + setMetroFigure(figure); +} + +OptionsPanel::~OptionsPanel() +{ + // evite une fuite mémoire à la fermeture due au L&F + sounds.setLookAndFeel(nullptr); + figures.setLookAndFeel(nullptr); +} + +void OptionsPanel::paint(juce::Graphics& g) +{ + g.fillAll(backgroundColour); +} + +void OptionsPanel::resized() +{ + // On utilise un layout grille en 2 colonnes + int margin = 3; + juce::Grid grid; + using Track = juce::Grid::TrackInfo; + using Fr = juce::Grid::Fr; + grid.templateRows = { Track(Fr(1)) }; + grid.templateColumns = { Track(Fr(1)), Track(Fr(1)) }; + grid.items = { + juce::GridItem(figures).withMargin(juce::GridItem::Margin(margin)), + juce::GridItem(sounds).withMargin(juce::GridItem::Margin(margin)), + }; + + grid.performLayout(getLocalBounds()); +} + +void OptionsPanel::init(Metronome& metro) +{ + // On établi les liaisons entre le Metronome et les composants graphique + for (int i = 0; i < clicksounds.getSoundCount(); ++i) + { + sounds.addItem(clicksounds.getSoundName(i), i + 1); // La combo n'autorise pas 0 comme Id, d'ou le + 1 + } + + sounds.setSelectedId(curSoundID + 1); // toujours ce + 1 + selectSound(metro); // charge le son courant dans le metronome + sounds.onChange = [&, this]() { selectSound(metro); }; + setMetroFigure = [&](int figure) { metro.setFigure(figure); }; + setFigure((int)metro.getFigure()); +} + +void OptionsPanel::selectSound(Metronome& metro) +{ + // charge le son courant dans le metronome + std::string high = clicksounds.getSoundPathHigh(sounds.getSelectedId() - 1); + std::string low = clicksounds.getSoundPathLow(sounds.getSelectedId() - 1); + metro.loadSounds(high, low); +} \ No newline at end of file diff --git a/Source/OptionsPanel.h b/Source/OptionsPanel.h new file mode 100644 index 0000000..4740756 --- /dev/null +++ b/Source/OptionsPanel.h @@ -0,0 +1,145 @@ +#pragma once +/* + ============================================================================== + Copyright 2022 Nicolas Chambert + +This program is free software : you can redistribute itand /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 < http://www.gnu.org/licenses/>. + + ============================================================================== +*/ + +/* + ============================================================================== + + Gestion des options figure rythmique et fichier son du tick. + + ============================================================================== +*/ + +#include +#include "Metronome.h" +#include "Config.h" + +class Config; +class Metronome; + +// Surcharge les boutons pour afficher l'image de la figure rythmique +struct FigureButton : public juce::PopupMenu::CustomComponent +{ + FigureButton(juce::String image, int widthIn, int heightIn, juce::Colour backgroundIn) + : juce::PopupMenu::CustomComponent(false), + idealWidth(widthIn), + idealHeight(heightIn), + background(backgroundIn) + { + // initialisation de l'interface + addAndMakeVisible(button); + // récupère l'image de la figure + auto doc = juce::XmlDocument::parse(image); + auto note = juce::Drawable::createFromSVG(*doc); + button.setImages(note.get()); + button.setToggleState(false, juce::NotificationType::dontSendNotification); + button.setColour(juce::TextButton::buttonColourId, juce::Colours::whitesmoke); + button.setColour(juce::TextButton::textColourOffId, juce::Colours::black); + button.onClick = [&, this] + { + // notifie la "Combo" + this->triggerMenuItem(); + }; + } + + void getIdealSize(int& width, int& height) override + { + width = idealWidth; + height = idealHeight; + } + + void paint(juce::Graphics& g) override { g.fillAll(background); } + + void resized() override { button.setBounds(getBounds()); } + + // composants graphiques + juce::Colour background; + juce::DrawableButton button{ "Figures", juce::DrawableButton::ImageOnButtonBackground }; + + // taille du bouton + int idealWidth = 0; + int idealHeight = 0; +}; + +// L&F pour la combo des sons, permet de setter le background du Popup +struct ComboLookAndFeel : public juce::LookAndFeel_V4 +{ + void drawPopupMenuBackground(juce::Graphics& g, int width, int height) override; + void drawPopupMenuItem(juce::Graphics& g, const juce::Rectangle& area, + const bool isSeparator, const bool isActive, + const bool isHighlighted, const bool isTicked, + const bool hasSubMenu, const juce::String& text, + const juce::String& shortcutKeyText, + const juce::Drawable* icon, const juce::Colour* const textColourToUse) override; +}; + +// structure dédiée à la gestion des sons +struct ClickSounds +{ + ClickSounds() {}; + + // Charge la liste de sons + void init(); + + // Accesseurs + int getSoundCount() const { return (int)sounds.size(); }; + std::string getSoundName(int i) const; + std::string getSoundPathHigh(int i) const; + std::string getSoundPathLow(int i) const; + + int getIndex(std::string soundName) const; + + // Liste des sons + std::vector sounds; +}; + +// Panneau d'affichage des options +struct OptionsPanel : public juce::Component +{ + explicit OptionsPanel(juce::Colour c, Config& configuration); + ~OptionsPanel(); + + // Méthode de surcharge JUCE + void paint(juce::Graphics& g) override; + void resized() override; + + // méthodes internes + void init(Metronome& metro); + + void selectSound(Metronome& metro); + void setFigure(int figure); + juce::String getSoundName(); + + // composants graphiques + juce::DrawableButton figures{ "Figures", juce::DrawableButton::ImageOnButtonBackground }; + juce::ComboBox sounds; + juce::Colour backgroundColour; + std::unique_ptr clef; + + // variables internes + // liste des sons + ClickSounds clicksounds; + + // pointeur sur la méthode qui permet de setter le metronome + std::function< void(int)> setMetroFigure {nullptr}; + + // permet de stocker l'id du son selectionné dans la configuration entre le constructeur et le init() + int curSoundID; +}; \ No newline at end of file diff --git a/Source/PlayPanel.cpp b/Source/PlayPanel.cpp new file mode 100644 index 0000000..42408ab --- /dev/null +++ b/Source/PlayPanel.cpp @@ -0,0 +1,161 @@ +/* + ============================================================================== + Copyright 2022 Nicolas Chambert + +This program is free software : you can redistribute itand /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 < http://www.gnu.org/licenses/>. + + ============================================================================== +*/ + +/* + ============================================================================== + + Gestion du bouton play et du volume. + + ============================================================================== +*/ + +#include "PlayPanel.h" +#include "Metronome.h" +#include "Figures.h" + +void RoundButtonLookAndFeel::drawButtonBackground(juce::Graphics& g, juce::Button& button, const juce::Colour& backgroundColour, + bool isMouseOverButton, bool isButtonDown) +{ + // version addapté du LookAndFeel_V4 + auto baseColour = backgroundColour.withMultipliedSaturation(button.hasKeyboardFocus(true) ? 1.3f : 0.9f) + .withMultipliedAlpha(button.isEnabled() ? 0.9f : 0.5f); + + if (isButtonDown || isMouseOverButton) + baseColour = baseColour.contrasting(isButtonDown ? 0.2f : 0.1f); + + auto width = (float)button.getWidth() - 1.0f; + auto height = (float)button.getHeight() - 1.0f; + + if (width > 0 && height > 0) + { + // on viens dessiner un cercle + auto rect = button.getLocalBounds(); + float rwidth = rect.getWidth() < rect.getHeight() ? (float)rect.getWidth() - 25.0f : (float)rect.getHeight() - 25.0f; + + g.setGradientFill(juce::ColourGradient::vertical(juce::Colours::lightgrey, 0.0f, + juce::Colours::lightgrey.darker(0.1f), height)); + g.fillEllipse(rect.getCentreX() - rwidth / 2, rect.getCentreY() - rwidth / 2, rwidth, rwidth); + + g.setGradientFill(juce::ColourGradient::vertical(baseColour, 0.0f, + baseColour.darker(0.1f), height)); + + g.drawEllipse(rect.getCentreX() - rwidth / 2, rect.getCentreY() - rwidth / 2, rwidth, rwidth, 4); + } +} + +PlayPanel::PlayPanel(juce::Colour c) : backgroundColour(c) +{ + // initialisation de l'interface + lef.reset(new RoundButtonLookAndFeel()); + + // Le dessin du bouton play est dans un svg + auto doc = juce::XmlDocument::parse(SVGFigures::play); + auto image = juce::Drawable::createFromSVG(*doc); + addComponent(volume); + addComponent(playButton); + playButton.setRadioGroupId(1); + playButton.setImages(image.get()); + playButton.setToggleState(false, juce::NotificationType::dontSendNotification); + playButton.setColour(juce::TextButton::buttonColourId, juce::Colours::lightgreen); + playButton.setColour(juce::TextButton::textColourOffId, juce::Colours::black); + playButton.setLookAndFeel(lef.get()); + volume.setRange(-100, 6); // on prend -100db en min, et on s'autorise à amplifier le sample à +6db + volume.setValue(0); // valeur initiale à 0db + volume.setSliderStyle(juce::Slider::SliderStyle::LinearVertical); + volume.setTextBoxStyle(juce::Slider::TextEntryBoxPosition::NoTextBox, true, 0, 0); + volume.setColour(juce::Slider::thumbColourId, backgroundColour); + volume.setColour(juce::Slider::trackColourId, juce::Colours::green); +} + +PlayPanel::~PlayPanel() +{ + // evite une fuite mémoire à la fermeture due au L&F + playButton.setLookAndFeel(nullptr); +} + +void PlayPanel::addComponent(juce::Component& c) +{ + addAndMakeVisible(c); + c.setColour(juce::TextButton::buttonColourId, backgroundColour); + c.setColour(juce::TextButton::textColourOffId, juce::Colours::black); +} + +void PlayPanel::paint(juce::Graphics& g) +{ + g.fillAll(backgroundColour); +} + +void PlayPanel::resized() +{ + // On gêre le placement via une grille 3 collones + // la première colonne est vide et sert de "marge" + juce::Grid vpgrid; + using Track = juce::Grid::TrackInfo; + using Fr = juce::Grid::Fr; + vpgrid.templateRows = { Track(Fr(1)) }; + vpgrid.templateColumns = { Track(Fr(1)), Track(Fr(5)), Track(Fr(1)) }; + + vpgrid.items = { juce::GridItem(), juce::GridItem(playButton), juce::GridItem(volume) }; + vpgrid.performLayout(getLocalBounds()); +} + +void PlayPanel::init(Metronome& metro) +{ + // On établi les liaisons entre le Metronome et les composants graphique + playButton.onClick = [&, this]() { play(metro); }; + volume.setValue(juce::Decibels::gainToDecibels(metro.getGain())); // On récupère la valeur initiale du gain + volume.onValueChange = [&, this] + { + double db = volume.getValue(); + metro.setGain((float)juce::Decibels::decibelsToGain(db)); + }; +} + +void PlayPanel::play(Metronome& metro) +{ + // lance la lecture ou met en pause + playState = playState == PlayState::playing ? PlayState::stopped : PlayState::playing; + if (playState == PlayState::stopped) + { + // en cas de stop, on remet les compteurs à zero sur le metronome + metro.reset(); + } + + // On modifie la couleur du bouton en fonction de l'état + playButton.setColour(juce::TextButton::buttonColourId, playState == PlayState::playing ? juce::Colours::green : juce::Colours::lightgreen); +} + +void PlayPanel::highlight() +{ + // Met le bouton en surbrillance sur le temps + // la variable highlightFrames decompte 6 frames sur un timer de 20ms soit 120ms + if (playState == PlayState::playing) + { + if (highlightFrames > 0) + { + playButton.setColour(juce::TextButton::buttonColourId, juce::Colours::orangered); + highlightFrames--; + } + else + { + playButton.setColour(juce::TextButton::buttonColourId, juce::Colours::green); + } + } +} \ No newline at end of file diff --git a/Source/PlayPanel.h b/Source/PlayPanel.h new file mode 100644 index 0000000..8b8a1df --- /dev/null +++ b/Source/PlayPanel.h @@ -0,0 +1,73 @@ +#pragma once +/* + ============================================================================== + Copyright 2022 Nicolas Chambert + +This program is free software : you can redistribute itand /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 < http://www.gnu.org/licenses/>. + + ============================================================================== +*/ + +/* + ============================================================================== + + Gestion du bouton play et du volume. + + ============================================================================== +*/ +#include +#include "Metronome.h" + +// Etat de lecture +enum class PlayState +{ + playing, + stopped +}; + +// surcharge du look&feel pour dessiner le bouton play en cercle +struct RoundButtonLookAndFeel : public juce::LookAndFeel_V4 +{ + void drawButtonBackground(juce::Graphics& g, juce::Button& button, const juce::Colour& backgroundColour, + bool isMouseOverButton, bool isButtonDown) override; +}; + +// classe principale +struct PlayPanel : public juce::Component +{ + explicit PlayPanel(juce::Colour c); + ~PlayPanel(); + + // Méthode de surcharge JUCE + void paint(juce::Graphics& g) override; + void resized() override; + + // utilitaire graphique + void addComponent(juce::Component& c); + + // méthodes de gestion du lecteur + void init(Metronome& metro); + void play(Metronome& metro); + void highlight(); + + // composants graphiques + juce::Colour backgroundColour; + juce::Slider volume; + juce::DrawableButton playButton { "Play", juce::DrawableButton::ImageOnButtonBackground }; + std::unique_ptr lef; + + // variables internes + int highlightFrames; + PlayState playState{ PlayState::stopped }; +}; \ No newline at end of file diff --git a/Source/TempoPanel.cpp b/Source/TempoPanel.cpp new file mode 100644 index 0000000..6b2f9c4 --- /dev/null +++ b/Source/TempoPanel.cpp @@ -0,0 +1,91 @@ +/* + ============================================================================== + Copyright 2022 Nicolas Chambert + +This program is free software : you can redistribute itand /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 < http://www.gnu.org/licenses/>. + + ============================================================================== +*/ + +/* + ============================================================================== + + Gestion du nombre de temps par mesure. + + ============================================================================== +*/ +#include "TempoPanel.h" +#include "Metronome.h" + +TempoPanel::TempoPanel(juce::Colour c) : backgroundColour(c) +{ + // initialisation de l'interface + addComponent(decrement); + addComponent(tempo); + addComponent(increment); + tempo.setText("4", juce::dontSendNotification); // On met une valeur mais elle va être RaZ dans le init() + tempo.getFont().setBold(true); + tempo.setColour(juce::Label::textColourId, juce::Colours::black); + tempo.setJustificationType(juce::Justification::centred); + tempo.setFont(30); +} + +void TempoPanel::addComponent(juce::Component& c) +{ + addAndMakeVisible(c); + c.setColour(juce::TextButton::buttonColourId, backgroundColour); + c.setColour(juce::TextButton::textColourOffId, juce::Colours::black); +} + +void TempoPanel::paint(juce::Graphics& g) +{ + g.fillAll(backgroundColour); +} + +void TempoPanel::resized() +{ + // On gêre le layout à la main + auto area = getLocalBounds(); + int butHeigth = 20; + int butWidth = 48; + int labeSize = 3 * butHeigth; + int totalWidth = 2 * butWidth + labeSize; + int marginH = (area.getWidth() - totalWidth) / 2; + int marginV = (area.getHeight() - labeSize) / 2; + decrement.setBounds(area.getX() + marginH, area.getY() + marginV + butHeigth, butWidth, butHeigth); + tempo.setBounds(area.getX() + marginH + butWidth, area.getY() + marginV, labeSize, labeSize); + increment.setBounds(area.getX() + marginH + butWidth + labeSize, area.getY() + marginV + butHeigth, butWidth, butHeigth); +} + +void TempoPanel::init(Metronome& metro) +{ + // On établi les liaisons entre le Metronome et les composants graphique + tempo.setText(juce::String(metro.getMeasures()), juce::dontSendNotification); + increment.onClick = [&, this]() { inc(metro); }; + decrement.onClick = [&, this]() { dec(metro); }; +} + +void TempoPanel::inc(Metronome& metro) +{ + // incrémente le tempo + metro.setMeasures(metro.getMeasures() + 1); + tempo.setText(juce::String(metro.getMeasures()), juce::dontSendNotification); // MàJ du label +} + +void TempoPanel::dec(Metronome& metro) +{ + // decremente le tempo + metro.setMeasures(metro.getMeasures() - 1); + tempo.setText(juce::String(metro.getMeasures()), juce::dontSendNotification); // MàJ du label +} \ No newline at end of file diff --git a/Source/TempoPanel.h b/Source/TempoPanel.h new file mode 100644 index 0000000..21411d1 --- /dev/null +++ b/Source/TempoPanel.h @@ -0,0 +1,34 @@ +#pragma once +/* + ============================================================================== + + Gestion du nombre de temps par mesure. + + ============================================================================== +*/ + +#include +#include "Metronome.h" + +struct TempoPanel : public juce::Component +{ + explicit TempoPanel(juce::Colour c); + + // Méthode de surcharge JUCE + void paint(juce::Graphics& g) override; + void resized() override; + + // utilitaire graphique + void addComponent(juce::Component& c); + + // méthodes de gestion du tempo + void init(Metronome& metro); + void inc(Metronome& metro); + void dec(Metronome& metro); + + // composants graphiques + juce::Colour backgroundColour; + juce::TextButton increment{ "+" }; + juce::TextButton decrement{ "-" }; + juce::Label tempo; +}; \ No newline at end of file diff --git a/Tchick.jucer b/Tchick.jucer new file mode 100644 index 0000000..a9ad47e --- /dev/null +++ b/Tchick.jucer @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tchick.sln b/Tchick.sln new file mode 100644 index 0000000..cc08196 --- /dev/null +++ b/Tchick.sln @@ -0,0 +1,21 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio Version 17 + +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Tchick - App", "Tchick_App.vcxproj", "{F9D7600C-859C-26DC-FE32-2EB5A98F1734}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F9D7600C-859C-26DC-FE32-2EB5A98F1734}.Debug|x64.ActiveCfg = Debug|x64 + {F9D7600C-859C-26DC-FE32-2EB5A98F1734}.Debug|x64.Build.0 = Debug|x64 + {F9D7600C-859C-26DC-FE32-2EB5A98F1734}.Release|x64.ActiveCfg = Release|x64 + {F9D7600C-859C-26DC-FE32-2EB5A98F1734}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Tchick_App.vcxproj b/Tchick_App.vcxproj new file mode 100644 index 0000000..f96790f --- /dev/null +++ b/Tchick_App.vcxproj @@ -0,0 +1,3235 @@ + + + + + + Debug + x64 + + + Release + x64 + + + + {F9D7600C-859C-26DC-FE32-2EB5A98F1734} + + + + Application + false + false + v143 + 10.0 + + + Application + false + true + v143 + 10.0 + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + .exe + $(SolutionDir)$(Platform)\$(Configuration)\App\ + $(Platform)\$(Configuration)\App\ + Tchick + true + $(SolutionDir)$(Platform)\$(Configuration)\App\ + $(Platform)\$(Configuration)\App\ + Tchick + true + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + + + + Disabled + ProgramDatabase + JuceLibraryCode;JuceLibraryCode\modules;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=1;JUCE_USE_DARK_SPLASH_SCREEN=0;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_JACK=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_B28D=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + true + NotUsing + $(IntDir)\ + $(IntDir)\ + $(IntDir)\Tchick.pdb + Level4 + true + true + stdcpplatest + + + JuceLibraryCode;JuceLibraryCode\modules;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=1;JUCE_USE_DARK_SPLASH_SCREEN=0;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_JACK=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_B28D=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions) + + + $(OutDir)\Tchick.exe + true + libcmt.lib; msvcrt.lib;;%(IgnoreSpecificDefaultLibraries) + true + $(IntDir)\Tchick.pdb + Windows + true + + + true + $(IntDir)\Tchick.bsc + + + + xcopy /s /y "$(SolutionDir)Assets\Clicks" "$(OutDir)\Clicks\" + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + + + + Full + JuceLibraryCode;JuceLibraryCode\modules;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=1;JUCE_USE_DARK_SPLASH_SCREEN=0;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_JACK=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_B28D=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions) + MultiThreadedDLL + true + NotUsing + $(IntDir)\ + $(IntDir)\ + $(IntDir)\Tchick.pdb + Level4 + true + true + stdcpplatest + + + JuceLibraryCode;JuceLibraryCode\modules;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=1;JUCE_USE_DARK_SPLASH_SCREEN=0;JUCE_PROJUCER_VERSION=0x70003;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_JACK=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_B28D=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions) + + + $(OutDir)\Tchick.exe + true + %(IgnoreSpecificDefaultLibraries) + false + $(IntDir)\Tchick.pdb + Windows + true + true + true + UseLinkTimeCodeGeneration + + + true + $(IntDir)\Tchick.bsc + + + + xcopy /s /y "$(SolutionDir)Assets\Clicks" "$(OutDir)\Clicks\" + + + + + + + + + + + + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + + + + /bigobj %(AdditionalOptions) + + + + + + + + + + /bigobj %(AdditionalOptions) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tchick_App.vcxproj.filters b/Tchick_App.vcxproj.filters new file mode 100644 index 0000000..f23b26d --- /dev/null +++ b/Tchick_App.vcxproj.filters @@ -0,0 +1,5696 @@ + + + + + + {36882D55-52F7-7E45-022D-951EE44C05AE} + + + {BED2C4DA-3FFF-C70D-776A-4157D052FABC} + + + {C8EC7F5C-4BD4-75B8-D0AD-92CF712D10E5} + + + {310C8C1F-9E8B-0728-D487-024F52B2AE61} + + + {E9AD0E83-CC87-DB72-D552-C8F18F4C64C6} + + + {7DE60269-2087-8D9C-0037-CF2BB5EDE150} + + + {E3B7DAA2-EBFD-3391-D6E1-73F983A2FABC} + + + {C7967784-984A-66A5-5A31-F0E83A7AEF5B} + + + {7042BC6E-6FC9-3653-E6B0-764CA49C6E5F} + + + {EB58F05A-A968-CEBE-40C4-107CDD8F240F} + + + {5FCF559E-451A-CB1E-B177-A5DC5A0005BB} + + + {05CE33FC-868F-AA1A-12B8-79C98E753648} + + + {D78296AF-218E-B17E-7F8B-9D148601188D} + + + {B96EBA26-E668-FFAF-FC53-1EC1337DAF5A} + + + {D8532E5E-469E-5042-EFC8-238241704735} + + + {777B5D1D-9AF0-B22B-8894-034603EE97F5} + + + {8292766D-2459-2E7E-7615-17216318BA93} + + + {9BD56105-DAB4-EBD5-00DD-BD540E98FE88} + + + {10472B2C-9888-D269-F351-0D0AC3BCD16C} + + + {BF23FC10-1D57-2A9B-706F-6DD8A7B593D4} + + + {386862D5-4DCC-A4B3-5642-60A201E303EF} + + + {092EFC17-7C95-7E04-0ACA-0D61A462EE81} + + + {285118C6-8FDA-7DCE-BEF4-FFB2120876C5} + + + {69ED6B61-9B8D-D47E-E4A6-2E9F9A94A75A} + + + {7CDB7CD1-BB96-F593-3C78-1E06182B5839} + + + {B0A708DE-B4CF-196B-14FB-DC8221509B8E} + + + {34F46ADE-EE31-227A-A69E-7732E70145F1} + + + {BB9B3C77-17FB-E994-8B75-88F1727E4655} + + + {C0971D77-2F14-190A-E2AE-89D6285F4D5A} + + + {AABEA333-6524-8891-51C7-6DAEB5700628} + + + {F2D29337-983E-BAD7-7B5C-E0AB3D53D404} + + + {C674B0FB-1FC0-2986-94B1-083845018994} + + + {0AFC1CE8-F6E6-9817-8C21-8432B2A375DA} + + + {0D1AF264-3AC1-78A2-B2A4-AE6171F9194A} + + + {9A5DB854-CFFB-5F88-C566-0E10F994DDB3} + + + {38A5DDC7-416E-548F-39DA-887875FE6B20} + + + {980FE2DB-05D3-5FDA-79DA-067A56F5D19D} + + + {F336DC25-747A-0663-93D6-E3EB9AA0CBF8} + + + {7D78546A-80FC-4DCA-00B9-F191F0AB2179} + + + {9EB3EC7F-2AB7-DDAA-3C05-DF382B728D3F} + + + {6B9FBFDC-1D10-6246-356D-00FF4535CECB} + + + {D6FCFC8E-7136-9109-78C0-91A3EB4C443F} + + + {EBF18AC1-F0ED-937A-2824-4307CE2ADAF7} + + + {5A0F7922-2EFB-6465-57E4-A445B804EFB5} + + + {4EC45416-0E7C-7567-6F75-D0C8CEE7DC4F} + + + {C2985031-0496-55B5-41A8-BAB99E53D89D} + + + {FB4AB426-7009-0036-BB75-E34256AA7C89} + + + {E684D858-09E8-0251-8E86-5657129641E1} + + + {1EF1BF17-F941-243A-04D1-EE617D140CBA} + + + {344DB016-679C-FBD0-3EC6-4570C47522DE} + + + {3D9758A0-9359-1710-87C1-05D475C08B17} + + + {E824435F-FC7B-10BE-5D1A-5DACC51A8836} + + + {86737735-F6BA-F64A-5EC7-5C9F36755F79} + + + {CDCCDBC1-E1A7-558D-D4AA-B48003178AE3} + + + {6656EC0E-A4C5-985B-242F-01890BDEFB1B} + + + {107F6637-689A-6DAC-1F5D-FD9734F3A0D9} + + + {C60CB2F9-12ED-74A2-C81C-366287805252} + + + {0BE3157E-54F5-3F72-7023-A62A81D83443} + + + {AD43AFB9-8A3D-C470-E098-4ADA2D6B1C07} + + + {77E6DFCD-32E7-A7E2-75E9-50C49384FEDA} + + + {8449F5A3-222A-3C21-88BD-2ACA69CD290A} + + + {50066622-9190-C54D-FE24-563064A80DB4} + + + {E8F398A4-2CFC-D98B-343B-FB06B6B54063} + + + {18BD9026-D673-60FB-C5C0-E4234E9FE71C} + + + {E469C933-C0FE-3A95-168B-234F8B4B620B} + + + {375C3EDB-D1F5-AA38-D498-B462B7BDEDE9} + + + {2E0391E6-2B82-F704-4B16-9EF63C4E25C1} + + + {D1C825D2-2980-075A-3EC0-43930977748F} + + + {B350BD14-1FB6-A9A0-4725-75CFEFC2D067} + + + {96D16B7E-5FC5-182E-8734-37C9D27C2299} + + + {56518C02-F710-7D5E-09E6-4B152D5900C7} + + + {8D78CFF1-6E9E-3E78-317D-7954EE6482BB} + + + {6B811726-62F3-6E7C-BE8E-493A61CAA9E4} + + + {C84EE2C8-14A3-D098-62A4-E1C75B7FA13A} + + + {42DD7AA9-DF7D-D9F9-E50C-69C44211A42B} + + + {009A44FF-D1C5-47C0-64CC-9122107C73D1} + + + {AAEE24C0-066F-8593-70EA-B7AC7553E885} + + + {CEC45021-32A4-16BA-8E12-023B029608CD} + + + {E5DFE07F-5901-AF5C-7759-84EBF9717E5E} + + + {3A189BF7-28D6-C0C4-B831-97AD9E46FE5A} + + + {829FC6C3-87E7-0491-B8C3-DC3905FB6039} + + + {49174595-84D0-A512-B98C-0CFD2D772B8A} + + + {E27C67CB-E138-DCCB-110D-623E2C01F9BC} + + + {392635C4-010A-C8A2-F46D-1A3628445E1C} + + + {1FF26A52-F9B9-625F-DEE9-8FEE0C02F0F4} + + + {3A5A13A1-B57C-EF05-AC38-53B08A4C8D4A} + + + {97983FD5-3F19-2B58-4941-D8FBB6B92BA4} + + + {ADC9725E-0948-5908-13BD-0275DB25325A} + + + {37AD6CD9-9FE5-A457-B1FE-36A85F973502} + + + {0F3B119C-FE8B-3978-2D80-53248BBBCDEA} + + + {5E836BFC-319A-1CE7-13C9-BD9E87F0A228} + + + {5D8E291B-1BB8-3A55-0939-D13A8589C395} + + + {BE3B7D89-2DE8-3CA1-B00E-55821EF3AAAC} + + + {E0DE9D5D-2792-148A-2CE1-182A90DD5F0E} + + + {DC27B453-334E-6965-BAD5-7F88C3E5BA46} + + + {4DC60E78-BBC0-B540-63A2-37E14ABBEF09} + + + {80C72173-A1E1-C3C5-9288-B889CE2EAFEA} + + + {4138B955-AA0B-FA86-DBF9-404CAFFFA866} + + + {2B4166B8-F470-F07C-4F51-D2DAAAECBB18} + + + {9C295115-C0CD-3129-1C4D-FB53299B23FB} + + + {65526A8B-3447-9DF0-FD5D-00D111126027} + + + {A54A1F5C-F32F-F97B-9E8A-69922B770A54} + + + {B90A44F3-B62D-B5C0-81A2-683D2650AEE6} + + + {DAF30656-5915-0E45-C4E4-54439617D525} + + + {9266EA90-6A0A-5DDB-9CB7-966BEF03BA5C} + + + {9C713CBA-A9E2-5F4E-F83C-2CAB8533913C} + + + {63571A07-9AA3-5BB0-1103-0B42A2E6BC9E} + + + {314F43F2-BC8F-B464-EAE7-86B9675454E9} + + + {874C5D0C-6D29-68EE-38BB-26200B56BC89} + + + {86BAA7A7-DC50-35B6-910B-932AEAF257F2} + + + {6B7BE34D-1BC1-C7B9-111F-C55CA8250943} + + + {9B6B6D54-D378-80C2-8CC9-D1D8FB44C2A8} + + + {D0584AC3-6837-14F6-90BF-5EA604D1F074} + + + {3CB9AC9F-1F99-25B3-8DC1-7DBB67D2E20C} + + + {794B64EC-B809-32E3-AD00-4EE6A74802CA} + + + {67BE498C-9E1F-C73A-B99A-387C034CE680} + + + {1A9C8538-959B-25E3-473D-B462C9A9D458} + + + {AA9F594C-DFAF-C0A7-0CCD-9F90E54D3A01} + + + {230BF784-34F4-3BE8-46D4-54E6B67E5E9E} + + + {39F680F3-5161-4D1C-EAD0-3911ED808874} + + + {3197198B-A978-E330-C7FB-07E5CE8236C7} + + + {42F7BE9D-3C8A-AE26-289B-8F355C068036} + + + {7868764A-6572-381A-906C-9C26792A4C29} + + + {03678508-A517-48BB-FB4A-485628C34E08} + + + {07D27C1D-3227-F527-356C-17DA11551A99} + + + {6146D580-99D2-A6C8-5908-30DC355BB6BA} + + + {C67003E8-BEA8-2188-F4B3-A122F4B4FA3F} + + + {09B91E68-1FF4-C7ED-9055-D4D96E66A0BA} + + + {30B3DA63-C1E4-F2EA-CEF0-8035D8CBFF64} + + + {4F24EEED-AA33-AC6C-9A39-72E71CF83EF0} + + + {0F70B1A9-BB50-23F5-2AE7-F95E51A00389} + + + {D4C8DC40-2CD2-04B6-05D0-1E7A88841390} + + + {58BED6AF-DB89-7560-B2B8-D937C1C0825A} + + + {B958F86B-6926-8D9B-2FC6-8BFD4BDC72C9} + + + {DB624F7D-D513-25AC-C13C-B9062EB3BEEE} + + + {89AA9B6C-4029-A34F-C1B0-3B5D8691F4D4} + + + {1A7F541C-B032-9C66-C320-A13B2A8A9866} + + + {4BAB7C18-51AB-0D9D-83CD-9C37F28D2E38} + + + {5523922E-8B0C-A52B-477C-752C09F8197F} + + + {857B6D8B-0ECB-FE9E-D1EB-D5E45E72F057} + + + {BAA582FA-40B7-320E-EE7A-4C3892C7BE72} + + + {632B4C79-AF7D-BFB5-D006-5AE67F607130} + + + {B10E20C2-4583-2B79-60B7-FE4D4B044313} + + + {CFB54F15-8A8A-0505-9B7F-ECA41CEE38E8} + + + {911F0159-A7A8-4A43-3FD4-154F62F4A44B} + + + {9D5816C2-E2B2-2E3F-B095-AC8BD1100D29} + + + {3FDCD000-763F-8477-9AF8-70ABA2E91E5E} + + + {0947506F-66FA-EF8D-8A4E-4D48BCDBB226} + + + {E4B6AED3-F54C-3FF2-069F-640BACAE0E08} + + + {D5EADBCC-6A1C-C940-0206-26E49110AF08} + + + {D27DC92D-5BEB-9294-DCD1-81D54E245AD5} + + + {BCD73D20-42B1-6CDB-DE66-B06236A60F47} + + + {20DC13F6-2369-8841-9F0B-D13FA14EEE74} + + + {A302A8DB-120F-9EBB-A3D5-2C29963AA56B} + + + {45489C2A-6E0E-CCDC-6638-0DACEEB63CCA} + + + {F1B90726-DB55-0293-BFAF-C65C7DF5489C} + + + {2C55FD42-0ACD-B0B8-7EAE-EB17F09BAEEC} + + + {B68CD2B2-701F-9AB7-4638-2485D6E06BCF} + + + {B0B7C78E-729E-0FFA-D611-82AE8BC7FE2C} + + + {0A4F7E12-220C-14EF-0026-9C0629FA9C17} + + + {37F49E10-4E62-6D5C-FF70-722D0CA3D97E} + + + {160D9882-0F68-278D-C5F9-8960FD7421D2} + + + {4CED05DA-E0A2-E548-F753-1F2EF299A8E3} + + + {46AE69B8-AD58-4381-6CDE-25C8D75B01D2} + + + {E56CB4FC-32E8-8740-A3BB-B323CD937A99} + + + {4ECDCA0C-BB38-0729-A6B6-2FB0B4D0863B} + + + {294E4CD5-B06F-97D1-04A3-51871CEA507C} + + + {77228F15-BD91-06FF-2C7E-0377D25C2C94} + + + {5CB531E6-BF9A-2C50-056C-EE5A525D28D3} + + + {E4EA47E5-B41C-2A19-1783-7E9104096ECD} + + + {B331BC33-9770-3DB5-73F2-BC2469ECCF7F} + + + {46A17AC9-0BFF-B5CE-26D6-B9D1992C88AC} + + + {D90A8DF7-FBAB-D363-13C0-6707BB22B72B} + + + {8AE77C40-6839-EC37-4515-BD3CC269BCE4} + + + {0EAD99DB-011F-09E5-45A2-365F646EB004} + + + {F57590C6-3B90-1BE1-1006-488BA33E8BD9} + + + {7C319D73-0D93-5842-0874-398D2D3038D5} + + + {2CB4DB0C-DD3B-6195-D822-76EC7A5C88D2} + + + {FE3CB19C-EF43-5CF5-DAF0-09D4E43D0AB9} + + + {C0E5DD5D-F8F1-DD25-67D7-291946AB3828} + + + {FE7E6CD5-C7A0-DB20-4E7E-D6E7F08C4578} + + + {895C2D33-E08D-B1BA-BB36-FC4CA65090C8} + + + {D64A57DB-A956-5519-1929-1D929B56E1B0} + + + {5A99CC24-AC45-7ED6-C11A-B8B86E76D884} + + + {7A131EEC-25A7-22F6-2839-A2194DDF3007} + + + {EA9DB76C-CEF7-6BFC-2070-28B7DF8E8063} + + + {3C206A40-6F1B-E683-ACF1-DEC3703D0140} + + + {DF95D4BF-E18C-125A-5EBB-8993A06E232C} + + + {118946F2-AC24-0F09-62D5-753DF87A60CD} + + + {07329F9B-7D3D-CEB3-C771-714842076140} + + + {08BBBECB-B0D1-7611-37EC-F57E1D0CE2A2} + + + {268E8F2A-980C-BF2F-B161-AACABC9D91F3} + + + {A4D76113-9EDC-DA60-D89B-5BACF7F1C426} + + + {FE955B6B-68AC-AA07-70D8-2413F6DB65C8} + + + {7ED5A90E-41AF-A1EF-659B-37CEEAB9BA61} + + + + + Tchick\Source + + + Tchick\Source + + + Tchick\Source + + + Tchick\Source + + + Tchick\Source + + + Tchick\Source + + + Tchick\Source + + + Tchick\Source + + + Tchick\Source + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\synthesisers + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics + + + JUCE Modules\juce_audio_basics + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\midi_io + + + JUCE Modules\juce_audio_devices\midi_io + + + JUCE Modules\juce_audio_devices\native\oboe\src\aaudio + + + JUCE Modules\juce_audio_devices\native\oboe\src\aaudio + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\sources + + + JUCE Modules\juce_audio_devices\sources + + + JUCE Modules\juce_audio_devices + + + JUCE Modules\juce_audio_devices + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\sampler + + + JUCE Modules\juce_audio_formats + + + JUCE Modules\juce_audio_formats + + + JUCE Modules\juce_audio_processors\format + + + JUCE Modules\juce_audio_processors\format + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\zix + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\atom + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\atom + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\atom + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\src\zix + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\src\zix + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\src\zix + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sratom\src + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\thread\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\scanning + + + JUCE Modules\juce_audio_processors\scanning + + + JUCE Modules\juce_audio_processors\scanning + + + JUCE Modules\juce_audio_processors\utilities\ARA + + + JUCE Modules\juce_audio_processors\utilities\ARA + + + JUCE Modules\juce_audio_processors\utilities\ARA + + + JUCE Modules\juce_audio_processors\utilities\ARA + + + JUCE Modules\juce_audio_processors\utilities\ARA + + + JUCE Modules\juce_audio_processors\utilities\ARA + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors + + + JUCE Modules\juce_audio_processors + + + JUCE Modules\juce_audio_processors + + + JUCE Modules\juce_audio_processors + + + JUCE Modules\juce_audio_utils\audio_cd + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\native + + + JUCE Modules\juce_audio_utils\native + + + JUCE Modules\juce_audio_utils\native + + + JUCE Modules\juce_audio_utils\native + + + JUCE Modules\juce_audio_utils\native + + + JUCE Modules\juce_audio_utils\native + + + JUCE Modules\juce_audio_utils\native + + + JUCE Modules\juce_audio_utils\native + + + JUCE Modules\juce_audio_utils\native + + + JUCE Modules\juce_audio_utils\native + + + JUCE Modules\juce_audio_utils\players + + + JUCE Modules\juce_audio_utils\players + + + JUCE Modules\juce_audio_utils + + + JUCE Modules\juce_audio_utils + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\javascript + + + JUCE Modules\juce_core\javascript + + + JUCE Modules\juce_core\logging + + + JUCE Modules\juce_core\logging + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\time + + + JUCE Modules\juce_core\time + + + JUCE Modules\juce_core\time + + + JUCE Modules\juce_core\unit_tests + + + JUCE Modules\juce_core\xml + + + JUCE Modules\juce_core\xml + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip + + + JUCE Modules\juce_core\zip + + + JUCE Modules\juce_core\zip + + + JUCE Modules\juce_core + + + JUCE Modules\juce_core + + + JUCE Modules\juce_data_structures\app_properties + + + JUCE Modules\juce_data_structures\app_properties + + + JUCE Modules\juce_data_structures\undomanager + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures + + + JUCE Modules\juce_data_structures + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\timers + + + JUCE Modules\juce_events\timers + + + JUCE Modules\juce_events + + + JUCE Modules\juce_events + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\effects + + + JUCE Modules\juce_graphics\effects + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats + + + JUCE Modules\juce_graphics\image_formats + + + JUCE Modules\juce_graphics\image_formats + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\placement + + + JUCE Modules\juce_graphics + + + JUCE Modules\juce_graphics + + + JUCE Modules\juce_gui_basics\accessibility + + + JUCE Modules\juce_gui_basics\application + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\x11 + + + JUCE Modules\juce_gui_basics\native\x11 + + + JUCE Modules\juce_gui_basics\native\x11 + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics + + + JUCE Modules\juce_gui_basics + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\documents + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra + + + JUCE Modules\juce_gui_extra + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + + + Tchick\Source + + + Tchick\Source + + + Tchick\Source + + + Tchick\Source + + + Tchick\Source + + + Tchick\Source + + + Tchick\Source + + + Tchick\Source + + + Tchick\Source + + + JUCE Modules\juce_audio_basics\audio_play_head + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\native + + + JUCE Modules\juce_audio_basics\native + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\synthesisers + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\midi_io\ump + + + JUCE Modules\juce_audio_devices\midi_io\ump + + + JUCE Modules\juce_audio_devices\midi_io + + + JUCE Modules\juce_audio_devices\midi_io + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\src\aaudio + + + JUCE Modules\juce_audio_devices\native\oboe\src\aaudio + + + JUCE Modules\juce_audio_devices\native\oboe\src\aaudio + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\sources + + + JUCE Modules\juce_audio_devices\sources + + + JUCE Modules\juce_audio_devices + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\protected + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\protected + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\protected + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\books\coupled + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\books\coupled + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\books\floor + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\books\uncoupled + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\sampler + + + JUCE Modules\juce_audio_formats + + + JUCE Modules\juce_audio_processors\format + + + JUCE Modules\juce_audio_processors\format + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\lilv + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\lilv + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\zix + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\zix + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\atom + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\atom + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\atom + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\buf-size + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\core + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\core + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\core + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\data-access + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\dynmanifest + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\event + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\event + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\instance-access + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\log + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\log + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\midi + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\morph + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\options + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\parameters + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\patch + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\port-groups + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\port-props + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\presets + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\resize-port + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\state + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\time + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\ui + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\units + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\uri-map + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\urid + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\worker + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\serd + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\sord + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\sord + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\src\zix + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\src\zix + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\src\zix + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\src\zix + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sratom\sratom + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK + + + JUCE Modules\juce_audio_processors\format_types\pslextensions + + + JUCE Modules\juce_audio_processors\format_types\pslextensions + + + JUCE Modules\juce_audio_processors\format_types\pslextensions + + + JUCE Modules\juce_audio_processors\format_types\pslextensions + + + JUCE Modules\juce_audio_processors\format_types\pslextensions + + + JUCE Modules\juce_audio_processors\format_types\pslextensions + + + JUCE Modules\juce_audio_processors\format_types\pslextensions + + + JUCE Modules\juce_audio_processors\format_types\pslextensions + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\thread\include + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\gui + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\gui + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\scanning + + + JUCE Modules\juce_audio_processors\scanning + + + JUCE Modules\juce_audio_processors\scanning + + + JUCE Modules\juce_audio_processors\utilities\ARA + + + JUCE Modules\juce_audio_processors\utilities\ARA + + + JUCE Modules\juce_audio_processors\utilities\ARA + + + JUCE Modules\juce_audio_processors\utilities\ARA + + + JUCE Modules\juce_audio_processors\utilities\ARA + + + JUCE Modules\juce_audio_processors\utilities\ARA + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors + + + JUCE Modules\juce_audio_utils\audio_cd + + + JUCE Modules\juce_audio_utils\audio_cd + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\players + + + JUCE Modules\juce_audio_utils\players + + + JUCE Modules\juce_audio_utils + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\javascript + + + JUCE Modules\juce_core\javascript + + + JUCE Modules\juce_core\logging + + + JUCE Modules\juce_core\logging + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\time + + + JUCE Modules\juce_core\time + + + JUCE Modules\juce_core\time + + + JUCE Modules\juce_core\unit_tests + + + JUCE Modules\juce_core\unit_tests + + + JUCE Modules\juce_core\xml + + + JUCE Modules\juce_core\xml + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip + + + JUCE Modules\juce_core\zip + + + JUCE Modules\juce_core\zip + + + JUCE Modules\juce_core + + + JUCE Modules\juce_data_structures\app_properties + + + JUCE Modules\juce_data_structures\app_properties + + + JUCE Modules\juce_data_structures\undomanager + + + JUCE Modules\juce_data_structures\undomanager + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\timers + + + JUCE Modules\juce_events\timers + + + JUCE Modules\juce_events + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\effects + + + JUCE Modules\juce_graphics\effects + + + JUCE Modules\juce_graphics\effects + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\placement + + + JUCE Modules\juce_graphics\placement + + + JUCE Modules\juce_graphics + + + JUCE Modules\juce_gui_basics\accessibility\enums + + + JUCE Modules\juce_gui_basics\accessibility\enums + + + JUCE Modules\juce_gui_basics\accessibility\enums + + + JUCE Modules\juce_gui_basics\accessibility\interfaces + + + JUCE Modules\juce_gui_basics\accessibility\interfaces + + + JUCE Modules\juce_gui_basics\accessibility\interfaces + + + JUCE Modules\juce_gui_basics\accessibility\interfaces + + + JUCE Modules\juce_gui_basics\accessibility + + + JUCE Modules\juce_gui_basics\accessibility + + + JUCE Modules\juce_gui_basics\application + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\x11 + + + JUCE Modules\juce_gui_basics\native\x11 + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\documents + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra + + + JUCE Library Code + + + + + Tchick\Assets\Clicks\01 SeikoSQ50 + + + Tchick\Assets\Clicks\01 SeikoSQ50 + + + Tchick\Assets\Clicks\02 Stick + + + Tchick\Assets\Clicks\02 Stick + + + Tchick\Assets\Clicks\03 Cowbell + + + Tchick\Assets\Clicks\03 Cowbell + + + Tchick\Assets\Clicks\04 vChip Wood + + + Tchick\Assets\Clicks\04 vChip Wood + + + Tchick\Assets\Clicks\05 vChip Claves + + + Tchick\Assets\Clicks\05 vChip Claves + + + JUCE Modules\juce_audio_devices\native\oboe + + + JUCE Modules\juce_audio_devices\native\oboe + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7 + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + + + JUCE Modules\juce_core\native\java + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + + + JUCE Library Code + + + diff --git a/Tchick_App.vcxproj.user b/Tchick_App.vcxproj.user new file mode 100644 index 0000000..88a5509 --- /dev/null +++ b/Tchick_App.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/resources.rc b/resources.rc new file mode 100644 index 0000000..3eb165b --- /dev/null +++ b/resources.rc @@ -0,0 +1,31 @@ +#pragma code_page(65001) + +#ifdef JUCE_USER_DEFINED_RC_FILE + #include JUCE_USER_DEFINED_RC_FILE +#else + +#undef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#include + +VS_VERSION_INFO VERSIONINFO +FILEVERSION 1,0,0,0 +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904E4" + BEGIN + VALUE "FileDescription", "Tchick\0" + VALUE "FileVersion", "1.0.0\0" + VALUE "ProductName", "Tchick\0" + VALUE "ProductVersion", "1.0.0\0" + END + END + + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif