mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
Added a new example project to the repository.
This commit is contained in:
parent
f146765b14
commit
bebf363fd1
27 changed files with 7587 additions and 0 deletions
|
|
@ -0,0 +1,100 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<JUCERPROJECT id="fyUrFS" name="BouncingBallWavetableDemo" projectType="guiapp"
|
||||
version="1.0.0" bundleIdentifier="com.juce.BouncingBallWavetableDemo"
|
||||
includeBinaryInAppConfig="1" jucerVersion="3.1.1">
|
||||
<MAINGROUP id="MgjqDB" name="BouncingBallWavetableDemo">
|
||||
<GROUP id="{D35F88A0-C242-1CAA-21A9-6D01F78F4128}" name="Source">
|
||||
<FILE id="M5GUDX" name="MainComponent.cpp" compile="1" resource="0"
|
||||
file="Source/MainComponent.cpp"/>
|
||||
<FILE id="Xtz8Fy" name="Main.cpp" compile="1" resource="0" file="Source/Main.cpp"/>
|
||||
</GROUP>
|
||||
</MAINGROUP>
|
||||
<EXPORTFORMATS>
|
||||
<XCODE_MAC targetFolder="Builds/MacOSX">
|
||||
<CONFIGURATIONS>
|
||||
<CONFIGURATION name="Debug" osxSDK="default" osxCompatibility="default" osxArchitecture="default"
|
||||
isDebug="1" optimisation="1" targetName="WavetableBouncingEditor"/>
|
||||
<CONFIGURATION name="Release" osxSDK="default" osxCompatibility="default" osxArchitecture="default"
|
||||
isDebug="0" optimisation="2" targetName="WavetableBouncingEditor"/>
|
||||
</CONFIGURATIONS>
|
||||
<MODULEPATHS>
|
||||
<MODULEPATH id="juce_core" path="../../modules"/>
|
||||
<MODULEPATH id="juce_events" path="../../modules"/>
|
||||
<MODULEPATH id="juce_graphics" path="../../modules"/>
|
||||
<MODULEPATH id="juce_data_structures" path="../../modules"/>
|
||||
<MODULEPATH id="juce_gui_basics" path="../../modules"/>
|
||||
<MODULEPATH id="juce_gui_extra" path="../../modules"/>
|
||||
<MODULEPATH id="juce_cryptography" path="../../modules"/>
|
||||
<MODULEPATH id="juce_video" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_basics" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_devices" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_formats" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_processors" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_utils" path="../../modules"/>
|
||||
</MODULEPATHS>
|
||||
</XCODE_MAC>
|
||||
<VS2013 targetFolder="Builds/VisualStudio2013">
|
||||
<CONFIGURATIONS>
|
||||
<CONFIGURATION name="Debug" winWarningLevel="4" generateManifest="1" winArchitecture="32-bit"
|
||||
isDebug="1" optimisation="1" targetName="WavetableBouncingEditor"/>
|
||||
<CONFIGURATION name="Release" winWarningLevel="4" generateManifest="1" winArchitecture="32-bit"
|
||||
isDebug="0" optimisation="2" targetName="WavetableBouncingEditor"/>
|
||||
</CONFIGURATIONS>
|
||||
<MODULEPATHS>
|
||||
<MODULEPATH id="juce_core" path="../../modules"/>
|
||||
<MODULEPATH id="juce_events" path="../../modules"/>
|
||||
<MODULEPATH id="juce_graphics" path="../../modules"/>
|
||||
<MODULEPATH id="juce_data_structures" path="../../modules"/>
|
||||
<MODULEPATH id="juce_gui_basics" path="../../modules"/>
|
||||
<MODULEPATH id="juce_gui_extra" path="../../modules"/>
|
||||
<MODULEPATH id="juce_cryptography" path="../../modules"/>
|
||||
<MODULEPATH id="juce_video" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_basics" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_devices" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_formats" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_processors" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_utils" path="../../modules"/>
|
||||
</MODULEPATHS>
|
||||
</VS2013>
|
||||
<LINUX_MAKE targetFolder="Builds/Linux">
|
||||
<CONFIGURATIONS>
|
||||
<CONFIGURATION name="Debug" libraryPath="/usr/X11R6/lib/" isDebug="1" optimisation="1"
|
||||
targetName="WavetableBouncingEditor"/>
|
||||
<CONFIGURATION name="Release" libraryPath="/usr/X11R6/lib/" isDebug="0" optimisation="2"
|
||||
targetName="WavetableBouncingEditor"/>
|
||||
</CONFIGURATIONS>
|
||||
<MODULEPATHS>
|
||||
<MODULEPATH id="juce_core" path="../../modules"/>
|
||||
<MODULEPATH id="juce_events" path="../../modules"/>
|
||||
<MODULEPATH id="juce_graphics" path="../../modules"/>
|
||||
<MODULEPATH id="juce_data_structures" path="../../modules"/>
|
||||
<MODULEPATH id="juce_gui_basics" path="../../modules"/>
|
||||
<MODULEPATH id="juce_gui_extra" path="../../modules"/>
|
||||
<MODULEPATH id="juce_cryptography" path="../../modules"/>
|
||||
<MODULEPATH id="juce_video" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_basics" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_devices" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_formats" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_processors" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_utils" path="../../modules"/>
|
||||
</MODULEPATHS>
|
||||
</LINUX_MAKE>
|
||||
</EXPORTFORMATS>
|
||||
<MODULES>
|
||||
<MODULES id="juce_audio_basics" showAllCode="1" useLocalCopy="0"/>
|
||||
<MODULES id="juce_audio_devices" showAllCode="1" useLocalCopy="0"/>
|
||||
<MODULES id="juce_audio_formats" showAllCode="1" useLocalCopy="0"/>
|
||||
<MODULES id="juce_audio_processors" showAllCode="1" useLocalCopy="0"/>
|
||||
<MODULES id="juce_audio_utils" showAllCode="1" useLocalCopy="0"/>
|
||||
<MODULES id="juce_core" showAllCode="1" useLocalCopy="0"/>
|
||||
<MODULES id="juce_cryptography" showAllCode="1" useLocalCopy="0"/>
|
||||
<MODULES id="juce_data_structures" showAllCode="1" useLocalCopy="0"/>
|
||||
<MODULES id="juce_events" showAllCode="1" useLocalCopy="0"/>
|
||||
<MODULES id="juce_graphics" showAllCode="1" useLocalCopy="0"/>
|
||||
<MODULES id="juce_gui_basics" showAllCode="1" useLocalCopy="0"/>
|
||||
<MODULES id="juce_gui_extra" showAllCode="1" useLocalCopy="0"/>
|
||||
<MODULES id="juce_video" showAllCode="1" useLocalCopy="0"/>
|
||||
</MODULES>
|
||||
<JUCEOPTIONS/>
|
||||
</JUCERPROJECT>
|
||||
162
examples/BouncingBallWavetableDemo/Builds/Linux/Makefile
Normal file
162
examples/BouncingBallWavetableDemo/Builds/Linux/Makefile
Normal file
|
|
@ -0,0 +1,162 @@
|
|||
# Automatically generated makefile, created by the Introjucer
|
||||
# Don't edit this file! Your changes will be overwritten when you re-save the Introjucer project!
|
||||
|
||||
# (this disables dependency generation if multiple architectures are set)
|
||||
DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD)
|
||||
|
||||
ifndef CONFIG
|
||||
CONFIG=Debug
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG),Debug)
|
||||
BINDIR := build
|
||||
LIBDIR := build
|
||||
OBJDIR := build/intermediate/Debug
|
||||
OUTDIR := build
|
||||
|
||||
ifeq ($(TARGET_ARCH),)
|
||||
TARGET_ARCH := -march=native
|
||||
endif
|
||||
|
||||
CPPFLAGS := $(DEPFLAGS) -std=c++11 -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules
|
||||
CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0
|
||||
CXXFLAGS += $(CFLAGS)
|
||||
LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt
|
||||
LDDEPS :=
|
||||
RESFLAGS := -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules
|
||||
TARGET := WavetableBouncingEditor
|
||||
BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)
|
||||
CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG),Release)
|
||||
BINDIR := build
|
||||
LIBDIR := build
|
||||
OBJDIR := build/intermediate/Release
|
||||
OUTDIR := build
|
||||
|
||||
ifeq ($(TARGET_ARCH),)
|
||||
TARGET_ARCH := -march=native
|
||||
endif
|
||||
|
||||
CPPFLAGS := $(DEPFLAGS) -std=c++11 -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules
|
||||
CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -Os
|
||||
CXXFLAGS += $(CFLAGS)
|
||||
LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt
|
||||
LDDEPS :=
|
||||
RESFLAGS := -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules
|
||||
TARGET := WavetableBouncingEditor
|
||||
BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)
|
||||
CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)
|
||||
endif
|
||||
|
||||
OBJECTS := \
|
||||
$(OBJDIR)/MainComponent_a6ffb4a5.o \
|
||||
$(OBJDIR)/Main_90ebc5c2.o \
|
||||
$(OBJDIR)/juce_audio_basics_399a455e.o \
|
||||
$(OBJDIR)/juce_audio_devices_c1c9ba9c.o \
|
||||
$(OBJDIR)/juce_audio_formats_f04b043c.o \
|
||||
$(OBJDIR)/juce_audio_processors_eb9ae116.o \
|
||||
$(OBJDIR)/juce_audio_utils_cf18005c.o \
|
||||
$(OBJDIR)/juce_core_1ee54a40.o \
|
||||
$(OBJDIR)/juce_cryptography_3b1f489a.o \
|
||||
$(OBJDIR)/juce_data_structures_84790dfc.o \
|
||||
$(OBJDIR)/juce_events_584896b4.o \
|
||||
$(OBJDIR)/juce_graphics_f9afc18.o \
|
||||
$(OBJDIR)/juce_gui_basics_90929794.o \
|
||||
$(OBJDIR)/juce_gui_extra_b81d9e1c.o \
|
||||
$(OBJDIR)/juce_video_86a19d3c.o \
|
||||
|
||||
.PHONY: clean
|
||||
|
||||
$(OUTDIR)/$(TARGET): $(OBJECTS) $(LDDEPS) $(RESOURCES)
|
||||
@echo Linking BouncingBallWavetableDemo
|
||||
-@mkdir -p $(BINDIR)
|
||||
-@mkdir -p $(LIBDIR)
|
||||
-@mkdir -p $(OUTDIR)
|
||||
@$(BLDCMD)
|
||||
|
||||
clean:
|
||||
@echo Cleaning BouncingBallWavetableDemo
|
||||
@$(CLEANCMD)
|
||||
|
||||
strip:
|
||||
@echo Stripping BouncingBallWavetableDemo
|
||||
-@strip --strip-unneeded $(OUTDIR)/$(TARGET)
|
||||
|
||||
$(OBJDIR)/MainComponent_a6ffb4a5.o: ../../Source/MainComponent.cpp
|
||||
-@mkdir -p $(OBJDIR)
|
||||
@echo "Compiling MainComponent.cpp"
|
||||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
|
||||
|
||||
$(OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp
|
||||
-@mkdir -p $(OBJDIR)
|
||||
@echo "Compiling Main.cpp"
|
||||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
|
||||
|
||||
$(OBJDIR)/juce_audio_basics_399a455e.o: ../../../../modules/juce_audio_basics/juce_audio_basics.cpp
|
||||
-@mkdir -p $(OBJDIR)
|
||||
@echo "Compiling juce_audio_basics.cpp"
|
||||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
|
||||
|
||||
$(OBJDIR)/juce_audio_devices_c1c9ba9c.o: ../../../../modules/juce_audio_devices/juce_audio_devices.cpp
|
||||
-@mkdir -p $(OBJDIR)
|
||||
@echo "Compiling juce_audio_devices.cpp"
|
||||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
|
||||
|
||||
$(OBJDIR)/juce_audio_formats_f04b043c.o: ../../../../modules/juce_audio_formats/juce_audio_formats.cpp
|
||||
-@mkdir -p $(OBJDIR)
|
||||
@echo "Compiling juce_audio_formats.cpp"
|
||||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
|
||||
|
||||
$(OBJDIR)/juce_audio_processors_eb9ae116.o: ../../../../modules/juce_audio_processors/juce_audio_processors.cpp
|
||||
-@mkdir -p $(OBJDIR)
|
||||
@echo "Compiling juce_audio_processors.cpp"
|
||||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
|
||||
|
||||
$(OBJDIR)/juce_audio_utils_cf18005c.o: ../../../../modules/juce_audio_utils/juce_audio_utils.cpp
|
||||
-@mkdir -p $(OBJDIR)
|
||||
@echo "Compiling juce_audio_utils.cpp"
|
||||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
|
||||
|
||||
$(OBJDIR)/juce_core_1ee54a40.o: ../../../../modules/juce_core/juce_core.cpp
|
||||
-@mkdir -p $(OBJDIR)
|
||||
@echo "Compiling juce_core.cpp"
|
||||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
|
||||
|
||||
$(OBJDIR)/juce_cryptography_3b1f489a.o: ../../../../modules/juce_cryptography/juce_cryptography.cpp
|
||||
-@mkdir -p $(OBJDIR)
|
||||
@echo "Compiling juce_cryptography.cpp"
|
||||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
|
||||
|
||||
$(OBJDIR)/juce_data_structures_84790dfc.o: ../../../../modules/juce_data_structures/juce_data_structures.cpp
|
||||
-@mkdir -p $(OBJDIR)
|
||||
@echo "Compiling juce_data_structures.cpp"
|
||||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
|
||||
|
||||
$(OBJDIR)/juce_events_584896b4.o: ../../../../modules/juce_events/juce_events.cpp
|
||||
-@mkdir -p $(OBJDIR)
|
||||
@echo "Compiling juce_events.cpp"
|
||||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
|
||||
|
||||
$(OBJDIR)/juce_graphics_f9afc18.o: ../../../../modules/juce_graphics/juce_graphics.cpp
|
||||
-@mkdir -p $(OBJDIR)
|
||||
@echo "Compiling juce_graphics.cpp"
|
||||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
|
||||
|
||||
$(OBJDIR)/juce_gui_basics_90929794.o: ../../../../modules/juce_gui_basics/juce_gui_basics.cpp
|
||||
-@mkdir -p $(OBJDIR)
|
||||
@echo "Compiling juce_gui_basics.cpp"
|
||||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
|
||||
|
||||
$(OBJDIR)/juce_gui_extra_b81d9e1c.o: ../../../../modules/juce_gui_extra/juce_gui_extra.cpp
|
||||
-@mkdir -p $(OBJDIR)
|
||||
@echo "Compiling juce_gui_extra.cpp"
|
||||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
|
||||
|
||||
$(OBJDIR)/juce_video_86a19d3c.o: ../../../../modules/juce_video/juce_video.cpp
|
||||
-@mkdir -p $(OBJDIR)
|
||||
@echo "Compiling juce_video.cpp"
|
||||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
|
||||
|
||||
-include $(OBJECTS:%.o=%.d)
|
||||
File diff suppressed because it is too large
Load diff
27
examples/BouncingBallWavetableDemo/Builds/MacOSX/Info.plist
Normal file
27
examples/BouncingBallWavetableDemo/Builds/MacOSX/Info.plist
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist>
|
||||
<dict>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>${EXECUTABLE_NAME}</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string></string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.juce.BouncingBallWavetableDemo</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>BouncingBallWavetableDemo</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1.0.0</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string></string>
|
||||
<key>NSHighResolutionCapable</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
BIN
examples/BouncingBallWavetableDemo/Builds/MacOSX/RecentFilesMenuTemplate.nib
generated
Normal file
BIN
examples/BouncingBallWavetableDemo/Builds/MacOSX/RecentFilesMenuTemplate.nib
generated
Normal file
Binary file not shown.
|
|
@ -0,0 +1,19 @@
|
|||
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||
# Visual Studio 2013
|
||||
Project("{34BC6CF1-F68B-C2A7-E05D-EAE7A053845F}") = "BouncingBallWavetableDemo", "BouncingBallWavetableDemo.vcxproj", "{17F0D07B-CE9C-EDE0-6BD7-482BB1AE995E}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Release|Win32 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{17F0D07B-CE9C-EDE0-6BD7-482BB1AE995E}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{17F0D07B-CE9C-EDE0-6BD7-482BB1AE995E}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{17F0D07B-CE9C-EDE0-6BD7-482BB1AE995E}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{17F0D07B-CE9C-EDE0-6BD7-482BB1AE995E}.Release|Win32.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -0,0 +1,29 @@
|
|||
#ifdef JUCE_USER_DEFINED_RC_FILE
|
||||
#include JUCE_USER_DEFINED_RC_FILE
|
||||
#else
|
||||
|
||||
#undef WIN32_LEAN_AND_MEAN
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 1,0,0,0
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904E4"
|
||||
BEGIN
|
||||
VALUE "FileDescription", "BouncingBallWavetableDemo\0"
|
||||
VALUE "FileVersion", "1.0.0\0"
|
||||
VALUE "ProductName", "BouncingBallWavetableDemo\0"
|
||||
VALUE "ProductVersion", "1.0.0\0"
|
||||
END
|
||||
END
|
||||
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x409, 65001
|
||||
END
|
||||
END
|
||||
|
||||
#endif
|
||||
196
examples/BouncingBallWavetableDemo/JuceLibraryCode/AppConfig.h
Normal file
196
examples/BouncingBallWavetableDemo/JuceLibraryCode/AppConfig.h
Normal file
|
|
@ -0,0 +1,196 @@
|
|||
/*
|
||||
|
||||
IMPORTANT! This file is auto-generated each time you save your
|
||||
project - if you alter its contents, your changes may be overwritten!
|
||||
|
||||
There's a section below where you can add your own custom code safely, and the
|
||||
Introjucer will preserve the contents of that block, but the best way to change
|
||||
any of these definitions is by using the Introjucer's project settings.
|
||||
|
||||
Any commented-out settings will assume their default values.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __JUCE_APPCONFIG_FYURFS__
|
||||
#define __JUCE_APPCONFIG_FYURFS__
|
||||
|
||||
//==============================================================================
|
||||
// [BEGIN_USER_CODE_SECTION]
|
||||
|
||||
// (You can add your own code in this section, and the Introjucer will not overwrite it)
|
||||
|
||||
// [END_USER_CODE_SECTION]
|
||||
|
||||
//==============================================================================
|
||||
#define JUCE_MODULE_AVAILABLE_juce_audio_basics 1
|
||||
#define JUCE_MODULE_AVAILABLE_juce_audio_devices 1
|
||||
#define JUCE_MODULE_AVAILABLE_juce_audio_formats 1
|
||||
#define JUCE_MODULE_AVAILABLE_juce_audio_processors 1
|
||||
#define JUCE_MODULE_AVAILABLE_juce_audio_utils 1
|
||||
#define JUCE_MODULE_AVAILABLE_juce_core 1
|
||||
#define JUCE_MODULE_AVAILABLE_juce_cryptography 1
|
||||
#define JUCE_MODULE_AVAILABLE_juce_data_structures 1
|
||||
#define JUCE_MODULE_AVAILABLE_juce_events 1
|
||||
#define JUCE_MODULE_AVAILABLE_juce_graphics 1
|
||||
#define JUCE_MODULE_AVAILABLE_juce_gui_basics 1
|
||||
#define JUCE_MODULE_AVAILABLE_juce_gui_extra 1
|
||||
#define JUCE_MODULE_AVAILABLE_juce_video 1
|
||||
|
||||
//==============================================================================
|
||||
// juce_audio_devices flags:
|
||||
|
||||
#ifndef JUCE_ASIO
|
||||
//#define JUCE_ASIO
|
||||
#endif
|
||||
|
||||
#ifndef JUCE_WASAPI
|
||||
//#define JUCE_WASAPI
|
||||
#endif
|
||||
|
||||
#ifndef JUCE_DIRECTSOUND
|
||||
//#define JUCE_DIRECTSOUND
|
||||
#endif
|
||||
|
||||
#ifndef JUCE_ALSA
|
||||
//#define JUCE_ALSA
|
||||
#endif
|
||||
|
||||
#ifndef JUCE_JACK
|
||||
//#define JUCE_JACK
|
||||
#endif
|
||||
|
||||
#ifndef JUCE_USE_ANDROID_OPENSLES
|
||||
//#define JUCE_USE_ANDROID_OPENSLES
|
||||
#endif
|
||||
|
||||
#ifndef JUCE_USE_CDREADER
|
||||
//#define JUCE_USE_CDREADER
|
||||
#endif
|
||||
|
||||
#ifndef JUCE_USE_CDBURNER
|
||||
//#define JUCE_USE_CDBURNER
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
// juce_audio_formats flags:
|
||||
|
||||
#ifndef JUCE_USE_FLAC
|
||||
//#define JUCE_USE_FLAC
|
||||
#endif
|
||||
|
||||
#ifndef JUCE_USE_OGGVORBIS
|
||||
//#define JUCE_USE_OGGVORBIS
|
||||
#endif
|
||||
|
||||
#ifndef JUCE_USE_MP3AUDIOFORMAT
|
||||
//#define JUCE_USE_MP3AUDIOFORMAT
|
||||
#endif
|
||||
|
||||
#ifndef JUCE_USE_LAME_AUDIO_FORMAT
|
||||
//#define JUCE_USE_LAME_AUDIO_FORMAT
|
||||
#endif
|
||||
|
||||
#ifndef JUCE_USE_WINDOWS_MEDIA_FORMAT
|
||||
//#define JUCE_USE_WINDOWS_MEDIA_FORMAT
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
// juce_audio_processors flags:
|
||||
|
||||
#ifndef JUCE_PLUGINHOST_VST
|
||||
//#define JUCE_PLUGINHOST_VST
|
||||
#endif
|
||||
|
||||
#ifndef JUCE_PLUGINHOST_VST3
|
||||
//#define JUCE_PLUGINHOST_VST3
|
||||
#endif
|
||||
|
||||
#ifndef JUCE_PLUGINHOST_AU
|
||||
//#define JUCE_PLUGINHOST_AU
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
// juce_core flags:
|
||||
|
||||
#ifndef JUCE_FORCE_DEBUG
|
||||
//#define JUCE_FORCE_DEBUG
|
||||
#endif
|
||||
|
||||
#ifndef JUCE_LOG_ASSERTIONS
|
||||
//#define JUCE_LOG_ASSERTIONS
|
||||
#endif
|
||||
|
||||
#ifndef JUCE_CHECK_MEMORY_LEAKS
|
||||
//#define JUCE_CHECK_MEMORY_LEAKS
|
||||
#endif
|
||||
|
||||
#ifndef JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES
|
||||
//#define JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES
|
||||
#endif
|
||||
|
||||
#ifndef JUCE_INCLUDE_ZLIB_CODE
|
||||
//#define JUCE_INCLUDE_ZLIB_CODE
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
// juce_graphics flags:
|
||||
|
||||
#ifndef JUCE_USE_COREIMAGE_LOADER
|
||||
//#define JUCE_USE_COREIMAGE_LOADER
|
||||
#endif
|
||||
|
||||
#ifndef JUCE_USE_DIRECTWRITE
|
||||
//#define JUCE_USE_DIRECTWRITE
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
// juce_gui_basics flags:
|
||||
|
||||
#ifndef JUCE_ENABLE_REPAINT_DEBUGGING
|
||||
//#define JUCE_ENABLE_REPAINT_DEBUGGING
|
||||
#endif
|
||||
|
||||
#ifndef JUCE_USE_XSHM
|
||||
//#define JUCE_USE_XSHM
|
||||
#endif
|
||||
|
||||
#ifndef JUCE_USE_XRENDER
|
||||
//#define JUCE_USE_XRENDER
|
||||
#endif
|
||||
|
||||
#ifndef JUCE_USE_XCURSOR
|
||||
//#define JUCE_USE_XCURSOR
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
// juce_gui_extra flags:
|
||||
|
||||
#ifndef JUCE_WEB_BROWSER
|
||||
//#define JUCE_WEB_BROWSER
|
||||
#endif
|
||||
|
||||
#ifndef JUCE_ENABLE_LIVE_CONSTANT_EDITOR
|
||||
//#define JUCE_ENABLE_LIVE_CONSTANT_EDITOR
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
// juce_video flags:
|
||||
|
||||
#ifndef JUCE_DIRECTSHOW
|
||||
//#define JUCE_DIRECTSHOW
|
||||
#endif
|
||||
|
||||
#ifndef JUCE_MEDIAFOUNDATION
|
||||
//#define JUCE_MEDIAFOUNDATION
|
||||
#endif
|
||||
|
||||
#ifndef JUCE_QUICKTIME
|
||||
//#define JUCE_QUICKTIME
|
||||
#endif
|
||||
|
||||
#ifndef JUCE_USE_CAMERA
|
||||
//#define JUCE_USE_CAMERA
|
||||
#endif
|
||||
|
||||
|
||||
#endif // __JUCE_APPCONFIG_FYURFS__
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
|
||||
IMPORTANT! This file is auto-generated each time you save your
|
||||
project - if you alter its contents, your changes may be overwritten!
|
||||
|
||||
This is the header file that your files should include in order to get all the
|
||||
JUCE library headers. You should avoid including the JUCE headers directly in
|
||||
your own source files, because that wouldn't pick up the correct configuration
|
||||
options for your app.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __APPHEADERFILE_FYURFS__
|
||||
#define __APPHEADERFILE_FYURFS__
|
||||
|
||||
#include "AppConfig.h"
|
||||
#include "modules/juce_audio_basics/juce_audio_basics.h"
|
||||
#include "modules/juce_audio_devices/juce_audio_devices.h"
|
||||
#include "modules/juce_audio_formats/juce_audio_formats.h"
|
||||
#include "modules/juce_audio_processors/juce_audio_processors.h"
|
||||
#include "modules/juce_audio_utils/juce_audio_utils.h"
|
||||
#include "modules/juce_core/juce_core.h"
|
||||
#include "modules/juce_cryptography/juce_cryptography.h"
|
||||
#include "modules/juce_data_structures/juce_data_structures.h"
|
||||
#include "modules/juce_events/juce_events.h"
|
||||
#include "modules/juce_graphics/juce_graphics.h"
|
||||
#include "modules/juce_gui_basics/juce_gui_basics.h"
|
||||
#include "modules/juce_gui_extra/juce_gui_extra.h"
|
||||
#include "modules/juce_video/juce_video.h"
|
||||
|
||||
#if ! DONT_SET_USING_JUCE_NAMESPACE
|
||||
// If your code uses a lot of JUCE classes, then this will obviously save you
|
||||
// a lot of typing, but can be disabled by setting DONT_SET_USING_JUCE_NAMESPACE.
|
||||
using namespace juce;
|
||||
#endif
|
||||
|
||||
#if ! JUCE_DONT_DECLARE_PROJECTINFO
|
||||
namespace ProjectInfo
|
||||
{
|
||||
const char* const projectName = "BouncingBallWavetableDemo";
|
||||
const char* const versionString = "1.0.0";
|
||||
const int versionNumber = 0x10000;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // __APPHEADERFILE_FYURFS__
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
|
||||
Important Note!!
|
||||
================
|
||||
|
||||
The purpose of this folder is to contain files that are auto-generated by the Introjucer,
|
||||
and ALL files in this folder will be mercilessly DELETED and completely re-written whenever
|
||||
the Introjucer saves your project.
|
||||
|
||||
Therefore, it's a bad idea to make any manual changes to the files in here, or to
|
||||
put any of your own files in here if you don't want to lose them. (Of course you may choose
|
||||
to add the folder's contents to your version-control system so that you can re-merge your own
|
||||
modifications after the Introjucer has saved its changes).
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
// This is an auto-generated file to redirect any included
|
||||
// module headers to the correct external folder.
|
||||
|
||||
#include "../../../../../modules/juce_audio_basics/juce_audio_basics.h"
|
||||
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
// This is an auto-generated file to redirect any included
|
||||
// module headers to the correct external folder.
|
||||
|
||||
#include "../../../../../modules/juce_audio_devices/juce_audio_devices.h"
|
||||
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
// This is an auto-generated file to redirect any included
|
||||
// module headers to the correct external folder.
|
||||
|
||||
#include "../../../../../modules/juce_audio_formats/juce_audio_formats.h"
|
||||
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
// This is an auto-generated file to redirect any included
|
||||
// module headers to the correct external folder.
|
||||
|
||||
#include "../../../../../modules/juce_audio_processors/juce_audio_processors.h"
|
||||
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
// This is an auto-generated file to redirect any included
|
||||
// module headers to the correct external folder.
|
||||
|
||||
#include "../../../../../modules/juce_audio_utils/juce_audio_utils.h"
|
||||
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
// This is an auto-generated file to redirect any included
|
||||
// module headers to the correct external folder.
|
||||
|
||||
#include "../../../../../modules/juce_core/juce_core.h"
|
||||
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
// This is an auto-generated file to redirect any included
|
||||
// module headers to the correct external folder.
|
||||
|
||||
#include "../../../../../modules/juce_cryptography/juce_cryptography.h"
|
||||
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
// This is an auto-generated file to redirect any included
|
||||
// module headers to the correct external folder.
|
||||
|
||||
#include "../../../../../modules/juce_data_structures/juce_data_structures.h"
|
||||
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
// This is an auto-generated file to redirect any included
|
||||
// module headers to the correct external folder.
|
||||
|
||||
#include "../../../../../modules/juce_events/juce_events.h"
|
||||
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
// This is an auto-generated file to redirect any included
|
||||
// module headers to the correct external folder.
|
||||
|
||||
#include "../../../../../modules/juce_graphics/juce_graphics.h"
|
||||
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
// This is an auto-generated file to redirect any included
|
||||
// module headers to the correct external folder.
|
||||
|
||||
#include "../../../../../modules/juce_gui_basics/juce_gui_basics.h"
|
||||
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
// This is an auto-generated file to redirect any included
|
||||
// module headers to the correct external folder.
|
||||
|
||||
#include "../../../../../modules/juce_gui_extra/juce_gui_extra.h"
|
||||
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
// This is an auto-generated file to redirect any included
|
||||
// module headers to the correct external folder.
|
||||
|
||||
#include "../../../../../modules/juce_video/juce_video.h"
|
||||
|
||||
98
examples/BouncingBallWavetableDemo/Source/Main.cpp
Normal file
98
examples/BouncingBallWavetableDemo/Source/Main.cpp
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file was auto-generated by the Introjucer!
|
||||
|
||||
It contains the basic startup code for a Juce application.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#include "../JuceLibraryCode/JuceHeader.h"
|
||||
|
||||
Component* createMainContentComponent();
|
||||
|
||||
//==============================================================================
|
||||
class WavetableBouncingEditorAppExampleApplication : public JUCEApplication
|
||||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
WavetableBouncingEditorAppExampleApplication() {}
|
||||
|
||||
const String getApplicationName() override { return ProjectInfo::projectName; }
|
||||
const String getApplicationVersion() override { return ProjectInfo::versionString; }
|
||||
bool moreThanOneInstanceAllowed() override { return true; }
|
||||
|
||||
//==============================================================================
|
||||
void initialise (const String& /*commandLine*/) override
|
||||
{
|
||||
mainWindow = new MainWindow (getApplicationName());
|
||||
}
|
||||
|
||||
void shutdown() override
|
||||
{
|
||||
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 String& /*commandLine*/) 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 MainContentComponent class.
|
||||
*/
|
||||
class MainWindow : public DocumentWindow
|
||||
{
|
||||
public:
|
||||
MainWindow (const String& name)
|
||||
: DocumentWindow (name, Colours::lightgrey, DocumentWindow::allButtons)
|
||||
{
|
||||
setUsingNativeTitleBar (true);
|
||||
setContentOwned (createMainContentComponent(), true);
|
||||
setResizable (true, true);
|
||||
|
||||
centreWithSize (getWidth(), getHeight());
|
||||
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.
|
||||
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:
|
||||
ScopedPointer<MainWindow> mainWindow;
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (WavetableBouncingEditorAppExampleApplication)
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
// This macro generates the main() routine that launches the app.
|
||||
START_JUCE_APPLICATION (WavetableBouncingEditorAppExampleApplication)
|
||||
246
examples/BouncingBallWavetableDemo/Source/MainComponent.cpp
Normal file
246
examples/BouncingBallWavetableDemo/Source/MainComponent.cpp
Normal file
|
|
@ -0,0 +1,246 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file was auto-generated!
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#ifndef MAINCOMPONENT_H_INCLUDED
|
||||
#define MAINCOMPONENT_H_INCLUDED
|
||||
|
||||
#include "../JuceLibraryCode/JuceHeader.h"
|
||||
|
||||
|
||||
//==============================================================================
|
||||
class MainContentComponent : public AudioAppComponent,
|
||||
private Timer
|
||||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
MainContentComponent()
|
||||
: pos (299, 299),
|
||||
waveTableIndex (0),
|
||||
bufferIndex (0),
|
||||
sampleRate (0.0),
|
||||
expectedSamplesPerBlock (0),
|
||||
dragging (false)
|
||||
{
|
||||
setSize (600, 600);
|
||||
|
||||
for (int i = 0; i < numElementsInArray (waveValues); ++i)
|
||||
zeromem (waveValues[i], sizeof (waveValues[i]));
|
||||
|
||||
// specify the number of input and output channels that we want to open
|
||||
setAudioChannels (2, 2);
|
||||
startTimer (50);
|
||||
}
|
||||
|
||||
~MainContentComponent()
|
||||
{
|
||||
shutdownAudio();
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
void prepareToPlay (int samplesPerBlockExpected, double newSampleRate) override
|
||||
{
|
||||
sampleRate = newSampleRate;
|
||||
expectedSamplesPerBlock = samplesPerBlockExpected;
|
||||
}
|
||||
|
||||
/* This method generates the actual audio samples.
|
||||
In this example the buffer is filled with a sine wave whose frequency and
|
||||
amplitude are controlled by the mouse position.
|
||||
*/
|
||||
void getNextAudioBlock (const AudioSourceChannelInfo& bufferToFill) override
|
||||
{
|
||||
bufferToFill.clearActiveBufferRegion();
|
||||
|
||||
for (int chan = 0; chan < bufferToFill.buffer->getNumChannels(); ++chan)
|
||||
{
|
||||
int ind = waveTableIndex;
|
||||
|
||||
float* const channelData = bufferToFill.buffer->getWritePointer (chan, bufferToFill.startSample);
|
||||
|
||||
for (int i = 0; i < bufferToFill.numSamples; ++i)
|
||||
{
|
||||
if (isPositiveAndBelow (chan, numElementsInArray (waveValues)))
|
||||
{
|
||||
channelData[i] = waveValues[chan][ind % wavetableSize];
|
||||
++ind;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
waveTableIndex = (int) (waveTableIndex + bufferToFill.numSamples) % wavetableSize;
|
||||
}
|
||||
|
||||
void releaseResources() override
|
||||
{
|
||||
// This gets automatically called when audio device paramters change
|
||||
// or device is restarted.
|
||||
stopTimer();
|
||||
}
|
||||
|
||||
|
||||
//=======================================================================
|
||||
void paint (Graphics& g) override
|
||||
{
|
||||
// (Our component is opaque, so we must completely fill the background with a solid colour)
|
||||
g.fillAll (Colours::black);
|
||||
|
||||
Point<float> nextPos = pos + delta;
|
||||
|
||||
if (nextPos.x < 10 || nextPos.x + 10 > getWidth())
|
||||
{
|
||||
delta.x = -delta.x;
|
||||
nextPos.x = pos.x + delta.x;
|
||||
}
|
||||
|
||||
if (nextPos.y < 50 || nextPos.y + 10 > getHeight())
|
||||
{
|
||||
delta.y = -delta.y;
|
||||
nextPos.y = pos.y + delta.y;
|
||||
}
|
||||
|
||||
if (! dragging)
|
||||
{
|
||||
writeInterpolatedValue (pos, nextPos);
|
||||
pos = nextPos;
|
||||
}
|
||||
else
|
||||
{
|
||||
pos = lastMousePosition;
|
||||
}
|
||||
|
||||
// draw a circle
|
||||
g.setColour (Colours::grey);
|
||||
g.fillEllipse (pos.x, pos.y, 20, 20);
|
||||
|
||||
drawWaveform (g, 20.0f, 0);
|
||||
drawWaveform (g, 40.0f, 1);
|
||||
}
|
||||
|
||||
void drawWaveform (Graphics& g, float y, int channel) const
|
||||
{
|
||||
const int pathWidth = 2000;
|
||||
|
||||
Path wavePath;
|
||||
wavePath.startNewSubPath (0.0f, y);
|
||||
|
||||
for (int i = 1; i < pathWidth; ++i)
|
||||
wavePath.lineTo (i, (1 + waveValues[channel][i * numElementsInArray (waveValues[0]) / pathWidth]) * 10.0f);
|
||||
|
||||
g.strokePath (wavePath, PathStrokeType (1.0f),
|
||||
wavePath.getTransformToScaleToFit (Rectangle<float> (0.0f, y, (float) getWidth(), 20.0f), false));
|
||||
}
|
||||
|
||||
// Mouse handling..
|
||||
void mouseDown (const MouseEvent& e) override
|
||||
{
|
||||
lastMousePosition = e.position;
|
||||
mouseDrag (e);
|
||||
dragging = true;
|
||||
}
|
||||
|
||||
void mouseDrag (const MouseEvent& e) override
|
||||
{
|
||||
dragging = true;
|
||||
|
||||
if (e.position != lastMousePosition)
|
||||
{
|
||||
// calculate movement vector
|
||||
delta = e.position - lastMousePosition;
|
||||
|
||||
waveValues[0][bufferIndex % wavetableSize] = xToAmplitude (e.position.x);
|
||||
waveValues[1][bufferIndex % wavetableSize] = yToAmplitude (e.position.y);
|
||||
|
||||
++bufferIndex;
|
||||
lastMousePosition = e.position;
|
||||
}
|
||||
}
|
||||
|
||||
void mouseUp (const MouseEvent&) override
|
||||
{
|
||||
dragging = false;
|
||||
}
|
||||
|
||||
void writeInterpolatedValue (Point<float> lastPosition,
|
||||
Point<float> currentPosition)
|
||||
{
|
||||
Point<float> start, finish;
|
||||
|
||||
if (lastPosition.getX() > currentPosition.getX())
|
||||
{
|
||||
finish = lastPosition;
|
||||
start = currentPosition;
|
||||
}
|
||||
else
|
||||
{
|
||||
start = lastPosition;
|
||||
finish = currentPosition;
|
||||
}
|
||||
|
||||
for (int i = 0; i < steps; ++i)
|
||||
{
|
||||
Point<float> p = start + ((finish - start) * i) / steps;
|
||||
|
||||
const int index = (bufferIndex + i) % wavetableSize;
|
||||
waveValues[1][index] = yToAmplitude (p.y);
|
||||
waveValues[0][index] = xToAmplitude (p.x);
|
||||
}
|
||||
|
||||
bufferIndex = (bufferIndex + steps) % wavetableSize;
|
||||
}
|
||||
|
||||
float indexToX (int indexValue) const noexcept
|
||||
{
|
||||
return (float) indexValue;
|
||||
}
|
||||
|
||||
int amplitudeToY (float amp) const noexcept
|
||||
{
|
||||
return getHeight() - (amp + 1.0f) * getHeight() / 2.0f;
|
||||
}
|
||||
|
||||
float xToAmplitude (float x) const noexcept
|
||||
{
|
||||
return jlimit (-1.0f, 1.0f, 2.0f * (getWidth() - x) / getWidth() - 1.0f);
|
||||
}
|
||||
|
||||
float yToAmplitude (float y) const noexcept
|
||||
{
|
||||
return jlimit (-1.0f, 1.0f, 2.0f * (getHeight() - y) / getHeight() - 1.0f);
|
||||
}
|
||||
|
||||
void timerCallback() override
|
||||
{
|
||||
repaint();
|
||||
}
|
||||
|
||||
private:
|
||||
//==============================================================================
|
||||
enum
|
||||
{
|
||||
wavetableSize = 36000,
|
||||
steps = 10
|
||||
};
|
||||
|
||||
Point<float> pos, delta;
|
||||
int waveTableIndex;
|
||||
int bufferIndex;
|
||||
double sampleRate;
|
||||
int expectedSamplesPerBlock;
|
||||
Point<float> lastMousePosition;
|
||||
float waveValues[2][wavetableSize];
|
||||
bool dragging;
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainContentComponent)
|
||||
};
|
||||
|
||||
|
||||
// (This is called from Main.cpp)
|
||||
Component* createMainContentComponent() { return new MainContentComponent(); };
|
||||
|
||||
|
||||
#endif // MAINCOMPONENT_H_INCLUDED
|
||||
Loading…
Add table
Add a link
Reference in a new issue