| @@ -0,0 +1,139 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <JUCERPROJECT id="AKfc5m" name="AudioPerformanceTest" projectType="guiapp" | |||
| version="1.0.0" bundleIdentifier="com.juce.AudioPerformanceTest" | |||
| includeBinaryInAppConfig="1" jucerVersion="4.1.0"> | |||
| <MAINGROUP id="b1eVTe" name="AudioPerformanceTest"> | |||
| <GROUP id="{AB66118C-9D88-1C3A-D95C-42892D828E4B}" name="Source"> | |||
| <FILE id="SqGU9p" name="Main.cpp" compile="1" resource="0" file="Source/Main.cpp"/> | |||
| <FILE id="A0IkQJ" name="MainComponent.h" compile="0" resource="0" file="Source/MainComponent.h"/> | |||
| </GROUP> | |||
| </MAINGROUP> | |||
| <EXPORTFORMATS> | |||
| <XCODE_MAC targetFolder="Builds/MacOSX" extraCompilerFlags=""> | |||
| <CONFIGURATIONS> | |||
| <CONFIGURATION name="Debug" osxSDK="default" osxCompatibility="default" osxArchitecture="default" | |||
| isDebug="1" optimisation="1" targetName="AudioPerformanceTest"/> | |||
| <CONFIGURATION name="Release" osxSDK="default" osxCompatibility="default" osxArchitecture="default" | |||
| isDebug="0" optimisation="3" targetName="AudioPerformanceTest"/> | |||
| </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_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> | |||
| <XCODE_IPHONE targetFolder="Builds/iOS" extraCompilerFlags=""> | |||
| <CONFIGURATIONS> | |||
| <CONFIGURATION name="Debug" iosCompatibility="default" isDebug="1" optimisation="1" | |||
| targetName="AudioPerformanceTest"/> | |||
| <CONFIGURATION name="Release" iosCompatibility="default" isDebug="0" optimisation="3" | |||
| targetName="AudioPerformanceTest"/> | |||
| </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_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_IPHONE> | |||
| <VS2015 targetFolder="Builds/VisualStudio2015" extraCompilerFlags=""> | |||
| <CONFIGURATIONS> | |||
| <CONFIGURATION name="Debug" winWarningLevel="4" generateManifest="1" winArchitecture="32-bit" | |||
| isDebug="1" optimisation="1" targetName="AudioPerformanceTest"/> | |||
| <CONFIGURATION name="Release" winWarningLevel="4" generateManifest="1" winArchitecture="32-bit" | |||
| isDebug="0" optimisation="3" targetName="AudioPerformanceTest"/> | |||
| </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_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> | |||
| </VS2015> | |||
| <LINUX_MAKE targetFolder="Builds/LinuxMakefile" extraCompilerFlags=""> | |||
| <CONFIGURATIONS> | |||
| <CONFIGURATION name="Debug" libraryPath="/usr/X11R6/lib/" isDebug="1" optimisation="1" | |||
| targetName="AudioPerformanceTest"/> | |||
| <CONFIGURATION name="Release" libraryPath="/usr/X11R6/lib/" isDebug="0" optimisation="3" | |||
| targetName="AudioPerformanceTest"/> | |||
| </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_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> | |||
| <ANDROIDSTUDIO androidVersionCode="1" androidActivityClass="com.juce.audioperformancetest.AudioPerformanceTest" | |||
| androidMinimumSDK="23" androidInternetNeeded="1" androidBluetoothNeeded="1" | |||
| androidKeyStore="${user.home}/.android/debug.keystore" androidKeyStorePass="android" | |||
| androidKeyAlias="androiddebugkey" androidKeyAliasPass="android" | |||
| androidCpp11="1" androidScreenOrientation="unspecified" targetFolder="Builds/AndroidStudio" | |||
| androidSDKPath="" androidNDKPath="" extraCompilerFlags="-mfpu=neon -mfloat-abi=hard -ffast-math -funroll-loops --param max-unroll-times=8 -mhard-float -D_NDK_MATH_NO_SOFTFP=1 -DJUCE_DISABLE_ASSERTIONS=1" | |||
| extraDefs="" extraLinkerFlags="" externalLibraries=""> | |||
| <CONFIGURATIONS> | |||
| <CONFIGURATION name="Debug" androidArchitectures="arm64-v8a" isDebug="1" optimisation="1" | |||
| targetName="AudioPerformanceTest"/> | |||
| <CONFIGURATION name="Release" androidArchitectures="arm64-v8a" isDebug="0" optimisation="6" | |||
| targetName="AudioPerformanceTest"/> | |||
| </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_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> | |||
| </ANDROIDSTUDIO> | |||
| </EXPORTFORMATS> | |||
| <MODULES> | |||
| <MODULE id="juce_audio_basics" showAllCode="1" useLocalCopy="0"/> | |||
| <MODULE id="juce_audio_devices" showAllCode="1" useLocalCopy="0"/> | |||
| <MODULE id="juce_audio_formats" showAllCode="1" useLocalCopy="0"/> | |||
| <MODULE id="juce_audio_processors" showAllCode="1" useLocalCopy="0"/> | |||
| <MODULE id="juce_audio_utils" showAllCode="1" useLocalCopy="0"/> | |||
| <MODULE id="juce_core" showAllCode="1" useLocalCopy="0"/> | |||
| <MODULE id="juce_data_structures" showAllCode="1" useLocalCopy="0"/> | |||
| <MODULE id="juce_events" showAllCode="1" useLocalCopy="0"/> | |||
| <MODULE id="juce_graphics" showAllCode="1" useLocalCopy="0"/> | |||
| <MODULE id="juce_gui_basics" showAllCode="1" useLocalCopy="0"/> | |||
| <MODULE id="juce_gui_extra" showAllCode="1" useLocalCopy="0"/> | |||
| </MODULES> | |||
| <JUCEOPTIONS/> | |||
| </JUCERPROJECT> | |||
| @@ -0,0 +1,142 @@ | |||
| # Automatically generated makefile, created by the Introjucer | |||
| # Don't edit this file! Your changes will be overwritten when you re-save the Introjucer project! | |||
| # (this disables dependency generation if multiple architectures are set) | |||
| DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD) | |||
| ifndef CONFIG | |||
| CONFIG=Debug | |||
| endif | |||
| ifeq ($(CONFIG),Debug) | |||
| BINDIR := build | |||
| LIBDIR := build | |||
| OBJDIR := build/intermediate/Debug | |||
| OUTDIR := build | |||
| ifeq ($(TARGET_ARCH),) | |||
| TARGET_ARCH := -march=native | |||
| endif | |||
| CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_6D53C8B4=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) -std=c++11 | |||
| LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt | |||
| TARGET := AudioPerformanceTest | |||
| 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) -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_6D53C8B4=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) -O3 | |||
| CXXFLAGS += $(CFLAGS) -std=c++11 | |||
| LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt | |||
| TARGET := AudioPerformanceTest | |||
| BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) | |||
| CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) | |||
| endif | |||
| OBJECTS := \ | |||
| $(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_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 \ | |||
| .PHONY: clean | |||
| $(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES) | |||
| @echo Linking AudioPerformanceTest | |||
| -@mkdir -p $(BINDIR) | |||
| -@mkdir -p $(LIBDIR) | |||
| -@mkdir -p $(OUTDIR) | |||
| @$(BLDCMD) | |||
| clean: | |||
| @echo Cleaning AudioPerformanceTest | |||
| @$(CLEANCMD) | |||
| strip: | |||
| @echo Stripping AudioPerformanceTest | |||
| -@strip --strip-unneeded $(OUTDIR)/$(TARGET) | |||
| $(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_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 "$<" | |||
| -include $(OBJECTS:%.o=%.d) | |||
| @@ -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>$(PRODUCT_BUNDLE_IDENTIFIER)</string> | |||
| <key>CFBundleName</key> | |||
| <string>AudioPerformanceTest</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> | |||
| @@ -0,0 +1,19 @@ | |||
| Microsoft Visual Studio Solution File, Format Version 11.00 | |||
| # Visual Studio 2015 | |||
| Project("{8F15A9F5-4FD4-7BCA-941E-83FD72FB9668}") = "AudioPerformanceTest", "AudioPerformanceTest.vcxproj", "{DD9D09AA-8915-4497-3B88-5D337FA5B703}" | |||
| EndProject | |||
| Global | |||
| GlobalSection(SolutionConfigurationPlatforms) = preSolution | |||
| Debug|Win32 = Debug|Win32 | |||
| Release|Win32 = Release|Win32 | |||
| EndGlobalSection | |||
| GlobalSection(ProjectConfigurationPlatforms) = postSolution | |||
| {DD9D09AA-8915-4497-3B88-5D337FA5B703}.Debug|Win32.ActiveCfg = Debug|Win32 | |||
| {DD9D09AA-8915-4497-3B88-5D337FA5B703}.Debug|Win32.Build.0 = Debug|Win32 | |||
| {DD9D09AA-8915-4497-3B88-5D337FA5B703}.Release|Win32.ActiveCfg = Release|Win32 | |||
| {DD9D09AA-8915-4497-3B88-5D337FA5B703}.Release|Win32.Build.0 = Release|Win32 | |||
| EndGlobalSection | |||
| GlobalSection(SolutionProperties) = preSolution | |||
| HideSolutionNode = FALSE | |||
| EndGlobalSection | |||
| EndGlobal | |||
| @@ -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", "AudioPerformanceTest\0" | |||
| VALUE "FileVersion", "1.0.0\0" | |||
| VALUE "ProductName", "AudioPerformanceTest\0" | |||
| VALUE "ProductVersion", "1.0.0\0" | |||
| END | |||
| END | |||
| BLOCK "VarFileInfo" | |||
| BEGIN | |||
| VALUE "Translation", 0x409, 1252 | |||
| END | |||
| END | |||
| #endif | |||
| @@ -0,0 +1,128 @@ | |||
| { | |||
| "images": [ | |||
| { | |||
| "idiom": "iphone", | |||
| "size": "29x29", | |||
| "filename": "Icon-29.png", | |||
| "scale": "1x" | |||
| }, | |||
| { | |||
| "idiom": "iphone", | |||
| "size": "29x29", | |||
| "filename": "Icon-29@2x.png", | |||
| "scale": "2x" | |||
| }, | |||
| { | |||
| "idiom": "iphone", | |||
| "size": "29x29", | |||
| "filename": "Icon-29@3x.png", | |||
| "scale": "3x" | |||
| }, | |||
| { | |||
| "idiom": "iphone", | |||
| "size": "40x40", | |||
| "filename": "Icon-Spotlight-40@2x.png", | |||
| "scale": "2x" | |||
| }, | |||
| { | |||
| "idiom": "iphone", | |||
| "size": "40x40", | |||
| "filename": "Icon-Spotlight-40@3x.png", | |||
| "scale": "3x" | |||
| }, | |||
| { | |||
| "idiom": "iphone", | |||
| "size": "57x57", | |||
| "filename": "Icon.png", | |||
| "scale": "1x" | |||
| }, | |||
| { | |||
| "idiom": "iphone", | |||
| "size": "57x57", | |||
| "filename": "Icon@2x.png", | |||
| "scale": "2x" | |||
| }, | |||
| { | |||
| "idiom": "iphone", | |||
| "size": "60x60", | |||
| "filename": "Icon-60@2x.png", | |||
| "scale": "2x" | |||
| }, | |||
| { | |||
| "idiom": "iphone", | |||
| "size": "60x60", | |||
| "filename": "Icon-@3x.png", | |||
| "scale": "3x" | |||
| }, | |||
| { | |||
| "idiom": "ipad", | |||
| "size": "29x29", | |||
| "filename": "Icon-Small-1.png", | |||
| "scale": "1x" | |||
| }, | |||
| { | |||
| "idiom": "ipad", | |||
| "size": "29x29", | |||
| "filename": "Icon-Small@2x-1.png", | |||
| "scale": "2x" | |||
| }, | |||
| { | |||
| "idiom": "ipad", | |||
| "size": "40x40", | |||
| "filename": "Icon-Spotlight-40.png", | |||
| "scale": "1x" | |||
| }, | |||
| { | |||
| "idiom": "ipad", | |||
| "size": "40x40", | |||
| "filename": "Icon-Spotlight-40@2x-1.png", | |||
| "scale": "2x" | |||
| }, | |||
| { | |||
| "idiom": "ipad", | |||
| "size": "50x50", | |||
| "filename": "Icon-Small-50.png", | |||
| "scale": "1x" | |||
| }, | |||
| { | |||
| "idiom": "ipad", | |||
| "size": "50x50", | |||
| "filename": "Icon-Small-50@2x.png", | |||
| "scale": "2x" | |||
| }, | |||
| { | |||
| "idiom": "ipad", | |||
| "size": "72x72", | |||
| "filename": "Icon-72.png", | |||
| "scale": "1x" | |||
| }, | |||
| { | |||
| "idiom": "ipad", | |||
| "size": "72x72", | |||
| "filename": "Icon-72@2x.png", | |||
| "scale": "2x" | |||
| }, | |||
| { | |||
| "idiom": "ipad", | |||
| "size": "76x76", | |||
| "filename": "Icon-76.png", | |||
| "scale": "1x" | |||
| }, | |||
| { | |||
| "idiom": "ipad", | |||
| "size": "76x76", | |||
| "filename": "Icon-76@2x.png", | |||
| "scale": "2x" | |||
| }, | |||
| { | |||
| "idiom": "ipad", | |||
| "size": "83.5x83.5", | |||
| "filename": "Icon-83.5@2x.png", | |||
| "scale": "2x" | |||
| } | |||
| ], | |||
| "info": { | |||
| "version": 1, | |||
| "author": "xcode" | |||
| } | |||
| } | |||
| @@ -0,0 +1,57 @@ | |||
| { | |||
| "images": [ | |||
| { | |||
| "orientation": "portrait", | |||
| "idiom": "iphone", | |||
| "extent": "full-screen", | |||
| "minimum-system-version": "7.0", | |||
| "scale": "2x", | |||
| "filename": "LaunchImage-iphone-2x.png" | |||
| }, | |||
| { | |||
| "orientation": "portrait", | |||
| "idiom": "iphone", | |||
| "extent": "full-screen", | |||
| "minimum-system-version": "7.0", | |||
| "scale": "2x", | |||
| "filename": "LaunchImage-iphone-retina4.png", | |||
| "subtype": "retina4" | |||
| }, | |||
| { | |||
| "orientation": "portrait", | |||
| "idiom": "ipad", | |||
| "extent": "full-screen", | |||
| "minimum-system-version": "7.0", | |||
| "scale": "1x", | |||
| "filename": "LaunchImage-ipad-portrait-1x.png" | |||
| }, | |||
| { | |||
| "orientation": "landscape", | |||
| "idiom": "ipad", | |||
| "extent": "full-screen", | |||
| "minimum-system-version": "7.0", | |||
| "scale": "1x", | |||
| "filename": "LaunchImage-ipad-landscape-1x.png" | |||
| }, | |||
| { | |||
| "orientation": "portrait", | |||
| "idiom": "ipad", | |||
| "extent": "full-screen", | |||
| "minimum-system-version": "7.0", | |||
| "scale": "2x", | |||
| "filename": "LaunchImage-ipad-portrait-2x.png" | |||
| }, | |||
| { | |||
| "orientation": "landscape", | |||
| "idiom": "ipad", | |||
| "extent": "full-screen", | |||
| "minimum-system-version": "7.0", | |||
| "scale": "2x", | |||
| "filename": "LaunchImage-ipad-landscape-2x.png" | |||
| } | |||
| ], | |||
| "info": { | |||
| "version": 1, | |||
| "author": "xcode" | |||
| } | |||
| } | |||
| @@ -0,0 +1,38 @@ | |||
| <?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>LSRequiresIPhoneOS</key> | |||
| <true/> | |||
| <key>UIViewControllerBasedStatusBarAppearance</key> | |||
| <false/> | |||
| <key>CFBundleExecutable</key> | |||
| <string>${EXECUTABLE_NAME}</string> | |||
| <key>CFBundleIdentifier</key> | |||
| <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> | |||
| <key>CFBundleName</key> | |||
| <string>AudioPerformanceTest</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/> | |||
| <key>UIRequiresFullScreen</key> | |||
| <true/> | |||
| <key>UISupportedInterfaceOrientations</key> | |||
| <array> | |||
| <string>UIInterfaceOrientationPortrait</string> | |||
| <string>UIInterfaceOrientationPortraitUpsideDown</string> | |||
| <string>UIInterfaceOrientationLandscapeLeft</string> | |||
| <string>UIInterfaceOrientationLandscapeRight</string> | |||
| </array> | |||
| </dict> | |||
| </plist> | |||
| @@ -0,0 +1,188 @@ | |||
| /* | |||
| 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_AKFC5M__ | |||
| #define __JUCE_APPCONFIG_AKFC5M__ | |||
| //============================================================================== | |||
| // [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_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 | |||
| //============================================================================== | |||
| #ifndef JUCE_STANDALONE_APPLICATION | |||
| #define JUCE_STANDALONE_APPLICATION 1 | |||
| #endif | |||
| //============================================================================== | |||
| // juce_audio_devices flags: | |||
| #ifndef JUCE_ASIO | |||
| //#define JUCE_ASIO | |||
| #endif | |||
| #ifndef JUCE_WASAPI | |||
| //#define JUCE_WASAPI | |||
| #endif | |||
| #ifndef JUCE_WASAPI_EXCLUSIVE | |||
| //#define JUCE_WASAPI_EXCLUSIVE | |||
| #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 | |||
| #ifndef JUCE_USE_CURL | |||
| //#define JUCE_USE_CURL | |||
| #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 | |||
| #endif // __JUCE_APPCONFIG_AKFC5M__ | |||
| @@ -0,0 +1,44 @@ | |||
| /* | |||
| 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_AKFC5M__ | |||
| #define __APPHEADERFILE_AKFC5M__ | |||
| #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_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" | |||
| #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 = "AudioPerformanceTest"; | |||
| const char* const versionString = "1.0.0"; | |||
| const int versionNumber = 0x10000; | |||
| } | |||
| #endif | |||
| #endif // __APPHEADERFILE_AKFC5M__ | |||
| @@ -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,4 @@ | |||
| // 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,4 @@ | |||
| // 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,4 @@ | |||
| // 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,4 @@ | |||
| // 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,4 @@ | |||
| // 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,4 @@ | |||
| // 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,4 @@ | |||
| // 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,4 @@ | |||
| // 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,4 @@ | |||
| // 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,4 @@ | |||
| // 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,4 @@ | |||
| // 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,97 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the juce_core module of the JUCE library. | |||
| Copyright (c) 2016 - ROLI Ltd. | |||
| Permission to use, copy, modify, and/or distribute this software for any purpose with | |||
| or without fee is hereby granted, provided that the above copyright notice and this | |||
| permission notice appear in all copies. | |||
| THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD | |||
| TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN | |||
| NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL | |||
| DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER | |||
| IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | |||
| CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||
| ------------------------------------------------------------------------------ | |||
| NOTE! This permissive ISC license applies ONLY to files within the juce_core module! | |||
| All other JUCE modules are covered by a dual GPL/commercial license, so if you are | |||
| using any other modules, be sure to check that you also comply with their license. | |||
| For more details, visit www.juce.com | |||
| ============================================================================== | |||
| */ | |||
| #include "../JuceLibraryCode/JuceHeader.h" | |||
| #include "MainComponent.h" | |||
| Component* createMainContentComponent(); | |||
| //============================================================================== | |||
| class AudioPerformanceTestApplication : public JUCEApplication | |||
| { | |||
| public: | |||
| //============================================================================== | |||
| AudioPerformanceTestApplication() {} | |||
| 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 | |||
| { | |||
| quit(); | |||
| } | |||
| //============================================================================== | |||
| class MainWindow : public DocumentWindow | |||
| { | |||
| public: | |||
| MainWindow (String name) : DocumentWindow (name, | |||
| Colours::lightgrey, | |||
| DocumentWindow::allButtons) | |||
| { | |||
| setUsingNativeTitleBar (true); | |||
| setContentOwned (createMainContentComponent(), true); | |||
| setResizable (false, false); | |||
| #if JUCE_IOS || JUCE_ANDROID | |||
| setFullScreen (true); | |||
| #else | |||
| centreWithSize (getWidth(), getHeight()); | |||
| #endif | |||
| setVisible (true); | |||
| } | |||
| void closeButtonPressed() override | |||
| { | |||
| JUCEApplication::getInstance()->systemRequestedQuit(); | |||
| } | |||
| private: | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainWindow) | |||
| }; | |||
| private: | |||
| ScopedPointer<MainWindow> mainWindow; | |||
| }; | |||
| //============================================================================== | |||
| START_JUCE_APPLICATION (AudioPerformanceTestApplication) | |||
| @@ -0,0 +1,284 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the juce_core module of the JUCE library. | |||
| Copyright (c) 2016 - ROLI Ltd. | |||
| Permission to use, copy, modify, and/or distribute this software for any purpose with | |||
| or without fee is hereby granted, provided that the above copyright notice and this | |||
| permission notice appear in all copies. | |||
| THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD | |||
| TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN | |||
| NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL | |||
| DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER | |||
| IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | |||
| CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||
| ------------------------------------------------------------------------------ | |||
| NOTE! This permissive ISC license applies ONLY to files within the juce_core module! | |||
| All other JUCE modules are covered by a dual GPL/commercial license, so if you are | |||
| using any other modules, be sure to check that you also comply with their license. | |||
| For more details, visit www.juce.com | |||
| ============================================================================== | |||
| */ | |||
| #ifndef MAINCOMPONENT_H_INCLUDED | |||
| #define MAINCOMPONENT_H_INCLUDED | |||
| #include "../JuceLibraryCode/JuceHeader.h" | |||
| //============================================================================== | |||
| class MainContentComponent : public AudioAppComponent, | |||
| private Timer | |||
| { | |||
| public: | |||
| //========================================================================== | |||
| MainContentComponent() | |||
| { | |||
| setSize (400, 400); | |||
| setAudioChannels (0, 2); | |||
| initGui(); | |||
| Desktop::getInstance().setScreenSaverEnabled (false); | |||
| startTimer (1000); | |||
| } | |||
| ~MainContentComponent() | |||
| { | |||
| shutdownAudio(); | |||
| } | |||
| //========================================================================== | |||
| void prepareToPlay (int bufferSize, double sampleRate) override | |||
| { | |||
| currentSampleRate = sampleRate; | |||
| allocateBuffers (bufferSize); | |||
| printHeader(); | |||
| } | |||
| void releaseResources() override | |||
| { | |||
| a.clear(); | |||
| b.clear(); | |||
| c.clear(); | |||
| currentSampleRate = 0.0; | |||
| } | |||
| //========================================================================== | |||
| void getNextAudioBlock (const AudioSourceChannelInfo& bufferToFill) override | |||
| { | |||
| const double startTimeMs = getPreciseTimeMs(); | |||
| AudioBuffer<float>& outputAudio = *bufferToFill.buffer; | |||
| int bufferSize = outputAudio.getNumSamples(); | |||
| initialiseBuffers (bufferToFill, bufferSize); | |||
| for (int ch = 0; ch < outputAudio.getNumChannels(); ++ch) | |||
| crunchSomeNumbers (outputAudio.getWritePointer (ch), bufferSize, numLoopIterationsPerCallback); | |||
| std::lock_guard<std::mutex> lock (metricMutex); | |||
| double endTimeMs = getPreciseTimeMs(); | |||
| addCallbackMetrics (startTimeMs, endTimeMs); | |||
| } | |||
| //========================================================================== | |||
| void addCallbackMetrics (double startTimeMs, double endTimeMs) | |||
| { | |||
| double runtimeMs = endTimeMs - startTimeMs; | |||
| audioCallbackRuntimeMs.addValue (runtimeMs); | |||
| if (runtimeMs > getPhysicalTimeLimitMs()) | |||
| numCallbacksOverPhysicalTimeLimit++; | |||
| if (lastCallbackStartTimeMs > 0.0) | |||
| { | |||
| double gapMs = startTimeMs - lastCallbackStartTimeMs; | |||
| audioCallbackGapMs.addValue (gapMs); | |||
| if (gapMs > 1.5 * getPhysicalTimeLimitMs()) | |||
| numLateCallbacks++; | |||
| } | |||
| lastCallbackStartTimeMs = startTimeMs; | |||
| } | |||
| //========================================================================== | |||
| void paint (Graphics& g) override | |||
| { | |||
| g.fillAll (Colours::black); | |||
| g.setFont (Font (16.0f)); | |||
| g.setColour (Colours::white); | |||
| g.drawText ("loop iterations / audio callback", | |||
| getLocalBounds().withY (loopIterationsSlider.getHeight()), Justification::centred, true); | |||
| } | |||
| //========================================================================== | |||
| void resized() override | |||
| { | |||
| loopIterationsSlider.setBounds (getLocalBounds().withSizeKeepingCentre (proportionOfWidth (0.9), 50)); | |||
| } | |||
| private: | |||
| //========================================================================== | |||
| void initGui() | |||
| { | |||
| loopIterationsSlider.setSliderStyle (Slider::LinearBar); | |||
| loopIterationsSlider.setRange (0, 30000, 1000); | |||
| loopIterationsSlider.setValue (15000); | |||
| loopIterationsSlider.setColour (Slider::thumbColourId, Colours::white); | |||
| loopIterationsSlider.setColour (Slider::textBoxTextColourId, Colours::grey); | |||
| updateNumLoopIterationsPerCallback(); | |||
| addAndMakeVisible (loopIterationsSlider); | |||
| } | |||
| //========================================================================== | |||
| void allocateBuffers (int bufferSize) | |||
| { | |||
| a.resize (bufferSize); | |||
| b.resize (bufferSize); | |||
| c.resize (bufferSize); | |||
| } | |||
| //========================================================================== | |||
| void initialiseBuffers (const AudioSourceChannelInfo& bufferToFill, int bufferSize) | |||
| { | |||
| if (bufferSize != a.size()) | |||
| { | |||
| jassertfalse; | |||
| Logger::writeToLog ("WARNING: Unexpected buffer size received." | |||
| "expected: " + String (a.size()) + | |||
| ", actual: " + String (bufferSize)); | |||
| if (bufferSize > a.size()) | |||
| Logger::writeToLog ("WARNING: Need to allocate larger buffers on audio thread!"); | |||
| allocateBuffers (bufferSize); | |||
| } | |||
| bufferToFill.clearActiveBufferRegion(); | |||
| std::fill (a.begin(), a.end(), 0.09f); | |||
| std::fill (b.begin(), b.end(), 0.1f ); | |||
| std::fill (c.begin(), c.end(), 0.11f); | |||
| } | |||
| //========================================================================== | |||
| void crunchSomeNumbers (float* outBuffer, int bufferSize, int numIterations) noexcept | |||
| { | |||
| jassert (a.size() == bufferSize && b.size() == bufferSize && c.size() == bufferSize); | |||
| for (int i = 0; i < numIterations; ++i) | |||
| { | |||
| FloatVectorOperations::multiply (c.data(), a.data(), b.data(), bufferSize); | |||
| FloatVectorOperations::addWithMultiply (outBuffer, b.data(), c.data(), bufferSize); | |||
| } | |||
| } | |||
| //========================================================================== | |||
| void timerCallback() override | |||
| { | |||
| printAndResetPerformanceMetrics(); | |||
| } | |||
| //========================================================================== | |||
| void printHeader() const | |||
| { | |||
| Logger::writeToLog ("buffer size = " + String (a.size()) + " samples"); | |||
| Logger::writeToLog ("sample rate = " + String (currentSampleRate) + " Hz"); | |||
| Logger::writeToLog ("physical time limit / callback = " + String (getPhysicalTimeLimitMs() )+ " ms"); | |||
| Logger::writeToLog (""); | |||
| Logger::writeToLog (" | callback exec time / physLimit | callback time gap / physLimit | callback counters "); | |||
| Logger::writeToLog ("numLoops | avg min max stddev | avg min max stddev | called late >limit "); | |||
| Logger::writeToLog ("----- | ----- ----- ----- ----- | ----- ----- ----- ----- | --- --- --- "); | |||
| } | |||
| //========================================================================== | |||
| void printAndResetPerformanceMetrics() | |||
| { | |||
| std::unique_lock<std::mutex> lock (metricMutex); | |||
| auto runtimeMetric = audioCallbackRuntimeMs; | |||
| auto gapMetric = audioCallbackGapMs; | |||
| auto late = numLateCallbacks; | |||
| auto overLimit = numCallbacksOverPhysicalTimeLimit; | |||
| resetPerformanceMetrics(); | |||
| updateNumLoopIterationsPerCallback(); | |||
| lock.unlock(); | |||
| Logger::writeToLog (String (numLoopIterationsPerCallback).paddedRight (' ', 8) + " | " | |||
| + getPercentFormattedMetricString (runtimeMetric) + " | " | |||
| + getPercentFormattedMetricString (gapMetric) + " | " | |||
| + String (runtimeMetric.getCount()).paddedRight (' ', 8) | |||
| + String (late).paddedRight (' ', 8) | |||
| + String (overLimit).paddedRight (' ', 8) + " | "); | |||
| } | |||
| //========================================================================== | |||
| String getPercentFormattedMetricString (const StatisticsAccumulator<double> metric) const | |||
| { | |||
| auto physTimeLimit = getPhysicalTimeLimitMs(); | |||
| return (String (100.0 * metric.getAverage() / physTimeLimit, 1) + "%").paddedRight (' ', 8) | |||
| + (String (100.0 * metric.getMinValue() / physTimeLimit, 1) + "%").paddedRight (' ', 8) | |||
| + (String (100.0 * metric.getMaxValue() / physTimeLimit, 1) + "%").paddedRight (' ', 8) | |||
| + String (metric.getStandardDeviation(), 3).paddedRight (' ', 8); | |||
| } | |||
| //========================================================================== | |||
| void resetPerformanceMetrics() | |||
| { | |||
| audioCallbackRuntimeMs.reset(); | |||
| audioCallbackGapMs.reset(); | |||
| numLateCallbacks = 0; | |||
| numCallbacksOverPhysicalTimeLimit = 0; | |||
| } | |||
| //========================================================================== | |||
| void updateNumLoopIterationsPerCallback() | |||
| { | |||
| numLoopIterationsPerCallback = loopIterationsSlider.getValue(); | |||
| } | |||
| //========================================================================== | |||
| static double getPreciseTimeMs() noexcept | |||
| { | |||
| return 1000.0 * Time::getHighResolutionTicks() / (double) Time::getHighResolutionTicksPerSecond(); | |||
| } | |||
| //========================================================================== | |||
| double getPhysicalTimeLimitMs() const noexcept | |||
| { | |||
| return 1000.0 * a.size() / currentSampleRate; | |||
| } | |||
| //========================================================================== | |||
| std::vector<float> a, b, c; // must always be of size == current bufferSize | |||
| double currentSampleRate = 0.0; | |||
| StatisticsAccumulator<double> audioCallbackRuntimeMs; | |||
| StatisticsAccumulator<double> audioCallbackGapMs; | |||
| double lastCallbackStartTimeMs = 0.0; | |||
| int numLateCallbacks = 0; | |||
| int numCallbacksOverPhysicalTimeLimit = 0; | |||
| int numLoopIterationsPerCallback; | |||
| Slider loopIterationsSlider; | |||
| std::mutex metricMutex; | |||
| //========================================================================== | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainContentComponent) | |||
| }; | |||
| // (This function is called by the app startup code to create our main component) | |||
| Component* createMainContentComponent() { return new MainContentComponent(); } | |||
| #endif // MAINCOMPONENT_H_INCLUDED | |||