NeuralPi

Raspberry Pi guitar pedal using neural networks to emulate real amps and effects
Log | Files | Refs | Submodules | README

commit a97558671cd539977dbe4d0328aaeae0f2215b60
parent 6d4121474993d6130afb9b12b582bd76fa56f3bc
Author: keith <[email protected]>
Date:   Fri, 18 Jun 2021 19:07:55 -0500

Added cmake and win/mac installers

Diffstat:
M.gitmodules | 9+++++++++
ACMakeLists.txt | 52++++++++++++++++++++++++++++++++++++++++++++++++++++
ASource/CMakeLists.txt | 15+++++++++++++++
DSource/ModelLoader.h | 32--------------------------------
Ainstallers/mac/Intro.txt | 1+
Ainstallers/mac/NeuralPi.pkgproj | 1999+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ainstallers/mac/build_mac_installer.sh | 38++++++++++++++++++++++++++++++++++++++
Ainstallers/windows/NeuralPi_Install_Script.iss | 221+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ainstallers/windows/build_win_installer.sh | 20++++++++++++++++++++
Amac_builds.sh | 66++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Amodules/CMakeLists.txt | 57+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Amodules/DISTRHO-JUCE | 1+
Amodules/JUCE | 1+
Amodules/cmake/SubprojectVersion.cmake | 20++++++++++++++++++++
Amodules/cmake/WarningFlags.cmake | 49+++++++++++++++++++++++++++++++++++++++++++++++++
Amodules/json | 1+
Aresources/CMakeLists.txt | 9+++++++++
Aresources/logo.png | 0
Aresources/neuralpi.ico | 0
Avalidate.sh | 41+++++++++++++++++++++++++++++++++++++++++
Awin_builds.sh | 63+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
21 files changed, 2663 insertions(+), 32 deletions(-)

diff --git a/.gitmodules b/.gitmodules @@ -1,3 +1,12 @@ [submodule "modules/RTNeural"] path = modules/RTNeural url = https://github.com/jatinchowdhury18/RTNeural +[submodule "modules/JUCE"] + path = modules/JUCE + url = https://github.com/juce-framework/JUCE.git +[submodule "modules/DISTRHO-JUCE"] + path = modules/DISTRHO-JUCE + url = https://github.com/Chowdhury-DSP/DISTRHO-JUCE.git +[submodule "modules/json"] + path = modules/json + url = https://github.com/nlohmann/json.git diff --git a/CMakeLists.txt b/CMakeLists.txt @@ -0,0 +1,52 @@ +cmake_minimum_required(VERSION 3.15) +set(CMAKE_OSX_DEPLOYMENT_TARGET "10.12" CACHE STRING "Minimum OS X deployment target") +project(NeuralPi VERSION 1.0.0) + +set(CMAKE_CXX_STANDARD 17) + +set(RTNEURAL_XSIMD ON CACHE BOOL "Use RTNeural with this backend" FORCE) +add_subdirectory(modules/RTNeural) + +add_subdirectory(modules) +include_directories(modules) + + +juce_add_plugin(NeuralPi + COMPANY_NAME GuitarML + PLUGIN_MANUFACTURER_CODE GtML + PLUGIN_CODE Npi3 + FORMATS AU VST3 Standalone LV2 + ProductName "NeuralPi" + LV2_URI https://github.com/GuitarML/NeuralPi + ICON_BIG resources/logo.png + MICROPHONE_PERMISSION_ENABLED TRUE +) + +# create JUCE header +juce_generate_juce_header(NeuralPi) + +# add sources +add_subdirectory(Source) +include_directories(Source) +add_subdirectory(resources) + +target_compile_definitions(NeuralPi + PUBLIC + JUCE_DISPLAY_SPLASH_SCREEN=0 + JUCE_REPORT_APP_USAGE=0 + JUCE_WEB_BROWSER=0 + JUCE_USE_CURL=0 + JUCE_VST3_CAN_REPLACE_VST2=0 +) + +target_link_libraries(NeuralPi PUBLIC + juce_plugin_modules +) + +# we need these flags for notarization on MacOS +option(MACOS_RELEASE "Set build flags for MacOS Release" OFF) +if(MACOS_RELEASE) + message(STATUS "Setting MacOS release flags...") + set_target_properties(NeuralPi_Standalone PROPERTIES + XCODE_ATTRIBUTE_ENABLE_HARDENED_RUNTIME YES) +endif() diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt @@ -0,0 +1,15 @@ +#add_subdirectory(headless) + +target_sources(NeuralPi PRIVATE + AmpOSCReceiver.h + Eq4Band.cpp + Eq4Band.h + PluginEditor.cpp + PluginEditor.h + PluginProcessor.cpp + PluginProcessor.h + RTNeuralLSTM.cpp + RTNeuralLSTM.h +) + +#target_precompile_headers(NeuralPi PRIVATE pch.h) diff --git a/Source/ModelLoader.h b/Source/ModelLoader.h @@ -1,31 +0,0 @@ -#include <iostream> -#include <nlohmann/json.hpp> -#include "NumCpp.hpp" -#include <string> - -class ModelLoader -{ - -public: - ModelLoader(); - nc::NdArray<float> vector_to_nc(std::vector<float> in_vec); - nc::NdArray<float> matrix_to_nc(std::vector<std::vector<float>> in_mat); - - void load_json(const char *filename); - - int hidden_size = 32; - - nc::NdArray<float> lstm_bias_ih_nc; - nc::NdArray<float> lstm_weights_ih_nc; - - nc::NdArray<float> lstm_bias_hh_nc; - nc::NdArray<float> lstm_weights_hh_nc; - - nc::NdArray<float> lstm_bias_nc; - - nc::NdArray<float> dense_bias_nc; - nc::NdArray<float> dense_weights_nc; - -private: - -}; -\ No newline at end of file diff --git a/installers/mac/Intro.txt b/installers/mac/Intro.txt @@ -0,0 +1 @@ +This application will install the NeuralPi audio plugin version ##APPVERSION## to your computer. diff --git a/installers/mac/NeuralPi.pkgproj b/installers/mac/NeuralPi.pkgproj @@ -0,0 +1,1999 @@ +<?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 version="1.0"> +<dict> + <key>PACKAGES</key> + <array> + <dict> + <key>MUST-CLOSE-APPLICATION-ITEMS</key> + <array/> + <key>MUST-CLOSE-APPLICATIONS</key> + <false/> + <key>PACKAGE_FILES</key> + <dict> + <key>DEFAULT_INSTALL_LOCATION</key> + <string>/</string> + <key>HIERARCHY</key> + <dict> + <key>CHILDREN</key> + <array> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>80</integer> + <key>PATH</key> + <string>Applications</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>509</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>80</integer> + <key>PATH</key> + <string>Application Support</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array> + <dict> + <key>CHILDREN</key> + <array> + <dict> + <key>CHILDREN</key> + <array> + <dict> + <key>BUNDLE_CAN_DOWNGRADE</key> + <false/> + <key>BUNDLE_POSTINSTALL_PATH</key> + <dict> + <key>PATH_TYPE</key> + <integer>0</integer> + </dict> + <key>BUNDLE_PREINSTALL_PATH</key> + <dict> + <key>PATH_TYPE</key> + <integer>0</integer> + </dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>../../bin/Mac/NeuralPi.component</string> + <key>PATH_TYPE</key> + <integer>1</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>3</integer> + <key>UID</key> + <integer>0</integer> + </dict> + </array> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Components</string> + <key>PATH_TYPE</key> + <integer>2</integer> + <key>PERMISSIONS</key> + <integer>509</integer> + <key>TYPE</key> + <integer>2</integer> + <key>UID</key> + <integer>0</integer> + </dict> + </array> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Plug-Ins</string> + <key>PATH_TYPE</key> + <integer>2</integer> + <key>PERMISSIONS</key> + <integer>509</integer> + <key>TYPE</key> + <integer>2</integer> + <key>UID</key> + <integer>0</integer> + </dict> + </array> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Audio</string> + <key>PATH_TYPE</key> + <integer>2</integer> + <key>PERMISSIONS</key> + <integer>509</integer> + <key>TYPE</key> + <integer>2</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Automator</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Documentation</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Extensions</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Filesystems</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Frameworks</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Input Methods</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Internet Plug-Ins</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>LaunchAgents</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>LaunchDaemons</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>PreferencePanes</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Preferences</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>80</integer> + <key>PATH</key> + <string>Printers</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>PrivilegedHelperTools</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>1005</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>QuickLook</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>QuickTime</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Screen Savers</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Scripts</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Services</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Widgets</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + </array> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Library</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Shared</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>1023</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + </array> + <key>GID</key> + <integer>80</integer> + <key>PATH</key> + <string>Users</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + </array> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>/</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <key>PAYLOAD_TYPE</key> + <integer>0</integer> + <key>PRESERVE_EXTENDED_ATTRIBUTES</key> + <false/> + <key>SHOW_INVISIBLE</key> + <false/> + <key>SPLIT_FORKS</key> + <true/> + <key>TREAT_MISSING_FILES_AS_WARNING</key> + <false/> + <key>VERSION</key> + <integer>5</integer> + </dict> + <key>PACKAGE_SCRIPTS</key> + <dict> + <key>POSTINSTALL_PATH</key> + <dict> + <key>PATH_TYPE</key> + <integer>0</integer> + </dict> + <key>PREINSTALL_PATH</key> + <dict> + <key>PATH_TYPE</key> + <integer>0</integer> + </dict> + <key>RESOURCES</key> + <array/> + </dict> + <key>PACKAGE_SETTINGS</key> + <dict> + <key>AUTHENTICATION</key> + <integer>1</integer> + <key>CONCLUSION_ACTION</key> + <integer>0</integer> + <key>FOLLOW_SYMBOLIC_LINKS</key> + <false/> + <key>IDENTIFIER</key> + <string>com.GuitarML.NeuralPi.NeuralPiAU</string> + <key>LOCATION</key> + <integer>0</integer> + <key>NAME</key> + <string>AU</string> + <key>OVERWRITE_PERMISSIONS</key> + <false/> + <key>PAYLOAD_SIZE</key> + <integer>-1</integer> + <key>REFERENCE_PATH</key> + <string></string> + <key>RELOCATABLE</key> + <false/> + <key>USE_HFS+_COMPRESSION</key> + <false/> + <key>VERSION</key> + <string>##APPVERSION##</string> + </dict> + <key>TYPE</key> + <integer>0</integer> + <key>UUID</key> + <string>69EED16E-B119-4D35-B464-12717823DE0E</string> + </dict> + <dict> + <key>MUST-CLOSE-APPLICATION-ITEMS</key> + <array/> + <key>MUST-CLOSE-APPLICATIONS</key> + <false/> + <key>PACKAGE_FILES</key> + <dict> + <key>DEFAULT_INSTALL_LOCATION</key> + <string>/</string> + <key>HIERARCHY</key> + <dict> + <key>CHILDREN</key> + <array> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>80</integer> + <key>PATH</key> + <string>Applications</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>509</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>80</integer> + <key>PATH</key> + <string>Application Support</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array> + <dict> + <key>CHILDREN</key> + <array> + <dict> + <key>CHILDREN</key> + <array> + <dict> + <key>BUNDLE_CAN_DOWNGRADE</key> + <false/> + <key>BUNDLE_POSTINSTALL_PATH</key> + <dict> + <key>PATH_TYPE</key> + <integer>0</integer> + </dict> + <key>BUNDLE_PREINSTALL_PATH</key> + <dict> + <key>PATH_TYPE</key> + <integer>0</integer> + </dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>../../bin/Mac/NeuralPi.vst3</string> + <key>PATH_TYPE</key> + <integer>1</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>3</integer> + <key>UID</key> + <integer>0</integer> + </dict> + </array> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>VST3</string> + <key>PATH_TYPE</key> + <integer>2</integer> + <key>PERMISSIONS</key> + <integer>509</integer> + <key>TYPE</key> + <integer>2</integer> + <key>UID</key> + <integer>0</integer> + </dict> + </array> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Plug-Ins</string> + <key>PATH_TYPE</key> + <integer>2</integer> + <key>PERMISSIONS</key> + <integer>509</integer> + <key>TYPE</key> + <integer>2</integer> + <key>UID</key> + <integer>0</integer> + </dict> + </array> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Audio</string> + <key>PATH_TYPE</key> + <integer>2</integer> + <key>PERMISSIONS</key> + <integer>509</integer> + <key>TYPE</key> + <integer>2</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Automator</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Documentation</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Extensions</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Filesystems</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Frameworks</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Input Methods</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Internet Plug-Ins</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>LaunchAgents</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>LaunchDaemons</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>PreferencePanes</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Preferences</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>80</integer> + <key>PATH</key> + <string>Printers</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>PrivilegedHelperTools</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>1005</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>QuickLook</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>QuickTime</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Screen Savers</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Scripts</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Services</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Widgets</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + </array> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Library</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Shared</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>1023</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + </array> + <key>GID</key> + <integer>80</integer> + <key>PATH</key> + <string>Users</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + </array> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>/</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <key>PAYLOAD_TYPE</key> + <integer>0</integer> + <key>PRESERVE_EXTENDED_ATTRIBUTES</key> + <false/> + <key>SHOW_INVISIBLE</key> + <false/> + <key>SPLIT_FORKS</key> + <true/> + <key>TREAT_MISSING_FILES_AS_WARNING</key> + <false/> + <key>VERSION</key> + <integer>5</integer> + </dict> + <key>PACKAGE_SETTINGS</key> + <dict> + <key>AUTHENTICATION</key> + <integer>1</integer> + <key>CONCLUSION_ACTION</key> + <integer>0</integer> + <key>FOLLOW_SYMBOLIC_LINKS</key> + <false/> + <key>IDENTIFIER</key> + <string>com.GuitarML.NeuralPi.NeuralPiVST3</string> + <key>LOCATION</key> + <integer>0</integer> + <key>NAME</key> + <string>VST3</string> + <key>OVERWRITE_PERMISSIONS</key> + <false/> + <key>PAYLOAD_SIZE</key> + <integer>-1</integer> + <key>REFERENCE_PATH</key> + <string></string> + <key>RELOCATABLE</key> + <false/> + <key>USE_HFS+_COMPRESSION</key> + <false/> + <key>VERSION</key> + <string>##APPVERSION##</string> + </dict> + <key>TYPE</key> + <integer>0</integer> + <key>UUID</key> + <string>17D06D06-18AD-4175-AA45-047F4984BE1A</string> + </dict> + <dict> + <key>MUST-CLOSE-APPLICATION-ITEMS</key> + <array/> + <key>MUST-CLOSE-APPLICATIONS</key> + <false/> + <key>PACKAGE_FILES</key> + <dict> + <key>DEFAULT_INSTALL_LOCATION</key> + <string>/</string> + <key>HIERARCHY</key> + <dict> + <key>CHILDREN</key> + <array> + <dict> + <key>CHILDREN</key> + <array> + <dict> + <key>BUNDLE_CAN_DOWNGRADE</key> + <false/> + <key>BUNDLE_POSTINSTALL_PATH</key> + <dict> + <key>PATH_TYPE</key> + <integer>0</integer> + </dict> + <key>BUNDLE_PREINSTALL_PATH</key> + <dict> + <key>PATH_TYPE</key> + <integer>0</integer> + </dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>80</integer> + <key>PATH</key> + <string>../../bin/Mac/NeuralPi.app</string> + <key>PATH_TYPE</key> + <integer>1</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>3</integer> + <key>UID</key> + <integer>0</integer> + </dict> + </array> + <key>GID</key> + <integer>80</integer> + <key>PATH</key> + <string>Applications</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>509</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>80</integer> + <key>PATH</key> + <string>Application Support</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Automator</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Documentation</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Extensions</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Filesystems</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Frameworks</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Input Methods</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Internet Plug-Ins</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>LaunchAgents</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>LaunchDaemons</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>PreferencePanes</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Preferences</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>80</integer> + <key>PATH</key> + <string>Printers</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>PrivilegedHelperTools</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>1005</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>QuickLook</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>QuickTime</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Screen Savers</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Scripts</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Services</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Widgets</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + </array> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Library</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>CHILDREN</key> + <array> + <dict> + <key>CHILDREN</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>Shared</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>1023</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + </array> + <key>GID</key> + <integer>80</integer> + <key>PATH</key> + <string>Users</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + </array> + <key>GID</key> + <integer>0</integer> + <key>PATH</key> + <string>/</string> + <key>PATH_TYPE</key> + <integer>0</integer> + <key>PERMISSIONS</key> + <integer>493</integer> + <key>TYPE</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <key>PAYLOAD_TYPE</key> + <integer>0</integer> + <key>PRESERVE_EXTENDED_ATTRIBUTES</key> + <false/> + <key>SHOW_INVISIBLE</key> + <false/> + <key>SPLIT_FORKS</key> + <true/> + <key>TREAT_MISSING_FILES_AS_WARNING</key> + <false/> + <key>VERSION</key> + <integer>5</integer> + </dict> + <key>PACKAGE_SETTINGS</key> + <dict> + <key>AUTHENTICATION</key> + <integer>1</integer> + <key>CONCLUSION_ACTION</key> + <integer>0</integer> + <key>FOLLOW_SYMBOLIC_LINKS</key> + <false/> + <key>IDENTIFIER</key> + <string>com.GuitarML.NeuralPi</string> + <key>LOCATION</key> + <integer>0</integer> + <key>NAME</key> + <string>Standalone</string> + <key>OVERWRITE_PERMISSIONS</key> + <false/> + <key>PAYLOAD_SIZE</key> + <integer>-1</integer> + <key>REFERENCE_PATH</key> + <string></string> + <key>RELOCATABLE</key> + <false/> + <key>USE_HFS+_COMPRESSION</key> + <false/> + <key>VERSION</key> + <string>##APPVERSION##</string> + </dict> + <key>TYPE</key> + <integer>0</integer> + <key>UUID</key> + <string>54266BE4-CE88-4033-9C8D-248D3D38D1E1</string> + </dict> + </array> + <key>PROJECT</key> + <dict> + <key>PROJECT_COMMENTS</key> + <dict> + <key>NOTES</key> + <data> + </data> + </dict> + <key>PROJECT_PRESENTATION</key> + <dict> + <key>BACKGROUND</key> + <dict> + <key>APPAREANCES</key> + <dict> + <key>DARK_AQUA</key> + <dict/> + <key>LIGHT_AQUA</key> + <dict/> + </dict> + <key>SHARED_SETTINGS_FOR_ALL_APPAREANCES</key> + <true/> + </dict> + <key>INSTALLATION TYPE</key> + <dict> + <key>HIERARCHIES</key> + <dict> + <key>INSTALLER</key> + <dict> + <key>LIST</key> + <array> + <dict> + <key>CHILDREN</key> + <array/> + <key>DESCRIPTION</key> + <array/> + <key>OPTIONS</key> + <dict> + <key>HIDDEN</key> + <false/> + <key>STATE</key> + <integer>1</integer> + </dict> + <key>PACKAGE_UUID</key> + <string>69EED16E-B119-4D35-B464-12717823DE0E</string> + <key>TITLE</key> + <array/> + <key>TYPE</key> + <integer>0</integer> + <key>UUID</key> + <string>32A671B5-085A-4D25-9B73-CA9157DA33C8</string> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>DESCRIPTION</key> + <array/> + <key>OPTIONS</key> + <dict> + <key>HIDDEN</key> + <false/> + <key>STATE</key> + <integer>1</integer> + </dict> + <key>PACKAGE_UUID</key> + <string>17D06D06-18AD-4175-AA45-047F4984BE1A</string> + <key>TITLE</key> + <array/> + <key>TYPE</key> + <integer>0</integer> + <key>UUID</key> + <string>6B0DDE9A-47F8-4615-BC79-4C475F3E41F7</string> + </dict> + <dict> + <key>CHILDREN</key> + <array/> + <key>DESCRIPTION</key> + <array/> + <key>OPTIONS</key> + <dict> + <key>HIDDEN</key> + <false/> + <key>STATE</key> + <integer>1</integer> + </dict> + <key>PACKAGE_UUID</key> + <string>54266BE4-CE88-4033-9C8D-248D3D38D1E1</string> + <key>TITLE</key> + <array/> + <key>TYPE</key> + <integer>0</integer> + <key>UUID</key> + <string>7BA12230-EFE4-49DA-B02C-EAB67D03EF2D</string> + </dict> + </array> + <key>REMOVED</key> + <dict/> + </dict> + </dict> + <key>MODE</key> + <integer>2</integer> + </dict> + <key>INSTALLATION_STEPS</key> + <array> + <dict> + <key>ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS</key> + <string>ICPresentationViewIntroductionController</string> + <key>INSTALLER_PLUGIN</key> + <string>Introduction</string> + <key>LIST_TITLE_KEY</key> + <string>InstallerSectionTitle</string> + </dict> + <dict> + <key>ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS</key> + <string>ICPresentationViewReadMeController</string> + <key>INSTALLER_PLUGIN</key> + <string>ReadMe</string> + <key>LIST_TITLE_KEY</key> + <string>InstallerSectionTitle</string> + </dict> + <dict> + <key>ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS</key> + <string>ICPresentationViewLicenseController</string> + <key>INSTALLER_PLUGIN</key> + <string>License</string> + <key>LIST_TITLE_KEY</key> + <string>InstallerSectionTitle</string> + </dict> + <dict> + <key>ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS</key> + <string>ICPresentationViewDestinationSelectController</string> + <key>INSTALLER_PLUGIN</key> + <string>TargetSelect</string> + <key>LIST_TITLE_KEY</key> + <string>InstallerSectionTitle</string> + </dict> + <dict> + <key>ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS</key> + <string>ICPresentationViewInstallationTypeController</string> + <key>INSTALLER_PLUGIN</key> + <string>PackageSelection</string> + <key>LIST_TITLE_KEY</key> + <string>InstallerSectionTitle</string> + </dict> + <dict> + <key>ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS</key> + <string>ICPresentationViewInstallationController</string> + <key>INSTALLER_PLUGIN</key> + <string>Install</string> + <key>LIST_TITLE_KEY</key> + <string>InstallerSectionTitle</string> + </dict> + <dict> + <key>ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS</key> + <string>ICPresentationViewSummaryController</string> + <key>INSTALLER_PLUGIN</key> + <string>Summary</string> + <key>LIST_TITLE_KEY</key> + <string>InstallerSectionTitle</string> + </dict> + </array> + <key>INTRODUCTION</key> + <dict> + <key>LOCALIZATIONS</key> + <array> + <dict> + <key>LANGUAGE</key> + <string>English</string> + <key>VALUE</key> + <dict> + <key>PATH</key> + <string>Intro.txt</string> + <key>PATH_TYPE</key> + <integer>3</integer> + </dict> + </dict> + </array> + </dict> + <key>LICENSE</key> + <dict> + <key>LOCALIZATIONS</key> + <array> + <dict> + <key>LANGUAGE</key> + <string>English</string> + <key>VALUE</key> + <dict> + <key>PATH</key> + <string>LICENSE.txt</string> + <key>PATH_TYPE</key> + <integer>3</integer> + </dict> + </dict> + </array> + <key>MODE</key> + <integer>0</integer> + </dict> + <key>README</key> + <dict> + <key>LOCALIZATIONS</key> + <array/> + </dict> + <key>TITLE</key> + <dict> + <key>LOCALIZATIONS</key> + <array> + <dict> + <key>LANGUAGE</key> + <string>English</string> + <key>VALUE</key> + <string>NeuralPi</string> + </dict> + </array> + </dict> + </dict> + <key>PROJECT_REQUIREMENTS</key> + <dict> + <key>LIST</key> + <array/> + <key>RESOURCES</key> + <array/> + <key>ROOT_VOLUME_ONLY</key> + <true/> + </dict> + <key>PROJECT_SETTINGS</key> + <dict> + <key>BUILD_FORMAT</key> + <integer>0</integer> + <key>BUILD_PATH</key> + <dict> + <key>PATH</key> + <string>../../build</string> + <key>PATH_TYPE</key> + <integer>1</integer> + </dict> + <key>EXCLUDED_FILES</key> + <array> + <dict> + <key>PATTERNS_ARRAY</key> + <array> + <dict> + <key>REGULAR_EXPRESSION</key> + <false/> + <key>STRING</key> + <string>.DS_Store</string> + <key>TYPE</key> + <integer>0</integer> + </dict> + </array> + <key>PROTECTED</key> + <true/> + <key>PROXY_NAME</key> + <string>Remove .DS_Store files</string> + <key>PROXY_TOOLTIP</key> + <string>Remove ".DS_Store" files created by the Finder.</string> + <key>STATE</key> + <true/> + </dict> + <dict> + <key>PATTERNS_ARRAY</key> + <array> + <dict> + <key>REGULAR_EXPRESSION</key> + <false/> + <key>STRING</key> + <string>.pbdevelopment</string> + <key>TYPE</key> + <integer>0</integer> + </dict> + </array> + <key>PROTECTED</key> + <true/> + <key>PROXY_NAME</key> + <string>Remove .pbdevelopment files</string> + <key>PROXY_TOOLTIP</key> + <string>Remove ".pbdevelopment" files created by ProjectBuilder or Xcode.</string> + <key>STATE</key> + <true/> + </dict> + <dict> + <key>PATTERNS_ARRAY</key> + <array> + <dict> + <key>REGULAR_EXPRESSION</key> + <false/> + <key>STRING</key> + <string>CVS</string> + <key>TYPE</key> + <integer>1</integer> + </dict> + <dict> + <key>REGULAR_EXPRESSION</key> + <false/> + <key>STRING</key> + <string>.cvsignore</string> + <key>TYPE</key> + <integer>0</integer> + </dict> + <dict> + <key>REGULAR_EXPRESSION</key> + <false/> + <key>STRING</key> + <string>.cvspass</string> + <key>TYPE</key> + <integer>0</integer> + </dict> + <dict> + <key>REGULAR_EXPRESSION</key> + <false/> + <key>STRING</key> + <string>.svn</string> + <key>TYPE</key> + <integer>1</integer> + </dict> + <dict> + <key>REGULAR_EXPRESSION</key> + <false/> + <key>STRING</key> + <string>.git</string> + <key>TYPE</key> + <integer>1</integer> + </dict> + <dict> + <key>REGULAR_EXPRESSION</key> + <false/> + <key>STRING</key> + <string>.gitignore</string> + <key>TYPE</key> + <integer>0</integer> + </dict> + </array> + <key>PROTECTED</key> + <true/> + <key>PROXY_NAME</key> + <string>Remove SCM metadata</string> + <key>PROXY_TOOLTIP</key> + <string>Remove helper files and folders used by the CVS, SVN or Git Source Code Management systems.</string> + <key>STATE</key> + <true/> + </dict> + <dict> + <key>PATTERNS_ARRAY</key> + <array> + <dict> + <key>REGULAR_EXPRESSION</key> + <false/> + <key>STRING</key> + <string>classes.nib</string> + <key>TYPE</key> + <integer>0</integer> + </dict> + <dict> + <key>REGULAR_EXPRESSION</key> + <false/> + <key>STRING</key> + <string>designable.db</string> + <key>TYPE</key> + <integer>0</integer> + </dict> + <dict> + <key>REGULAR_EXPRESSION</key> + <false/> + <key>STRING</key> + <string>info.nib</string> + <key>TYPE</key> + <integer>0</integer> + </dict> + </array> + <key>PROTECTED</key> + <true/> + <key>PROXY_NAME</key> + <string>Optimize nib files</string> + <key>PROXY_TOOLTIP</key> + <string>Remove "classes.nib", "info.nib" and "designable.nib" files within .nib bundles.</string> + <key>STATE</key> + <true/> + </dict> + <dict> + <key>PATTERNS_ARRAY</key> + <array> + <dict> + <key>REGULAR_EXPRESSION</key> + <false/> + <key>STRING</key> + <string>Resources Disabled</string> + <key>TYPE</key> + <integer>1</integer> + </dict> + </array> + <key>PROTECTED</key> + <true/> + <key>PROXY_NAME</key> + <string>Remove Resources Disabled folders</string> + <key>PROXY_TOOLTIP</key> + <string>Remove "Resources Disabled" folders.</string> + <key>STATE</key> + <true/> + </dict> + <dict> + <key>SEPARATOR</key> + <true/> + </dict> + </array> + <key>NAME</key> + <string>NeuralPi</string> + <key>PAYLOAD_ONLY</key> + <false/> + <key>TREAT_MISSING_PRESENTATION_DOCUMENTS_AS_WARNING</key> + <false/> + </dict> + </dict> + <key>TYPE</key> + <integer>0</integer> + <key>VERSION</key> + <integer>2</integer> +</dict> +</plist> diff --git a/installers/mac/build_mac_installer.sh b/installers/mac/build_mac_installer.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +script_file=NeuralPi.pkgproj + +app_version=$(cut -f 2 -d '=' <<< "$(grep 'CMAKE_PROJECT_VERSION:STATIC' ../../build/CMakeCache.txt)") +echo "Setting app version: $app_version..." +sed -i '' "s/##APPVERSION##/${app_version}/g" $script_file +sed -i '' "s/##APPVERSION##/${app_version}/g" Intro.txt + +echo "Copying License..." +cp ../../LICENSE.txt LICENSE.txt + +# build installer +echo Building... +/usr/local/bin/packagesbuild $script_file + +# reset version number +sed -i '' "s/${app_version}/##APPVERSION##/g" $script_file +sed -i '' "s/${app_version}/##APPVERSION##/g" Intro.txt + +# clean up license file +rm LICENSE.txt + +# sign the installer package +echo "Signing installer package..." +TEAM_ID=$(more ~/Developer/mac_id) +pkg_dir=NeuralPi_Installer_Packaged +rm -Rf $pkg_dir +mkdir $pkg_dir +productsign -s "$TEAM_ID" ../../build/NeuralPi.pkg $pkg_dir/NeuralPi-signed.pkg + +echo "Notarizing installer package..." +INSTALLER_PASS=$(more ~/Developer/mac_installer_pass) +npx notarize-cli --file $pkg_dir/NeuralPi-signed.pkg --bundle-id com.GuitarML.NeuralPi --asc-provider "$TEAM_ID" --username [email protected] --password "$INSTALLER_PASS" + +echo "Building disk image..." +vol_name=Install_NeuralPi-$app_version +hdiutil create "$vol_name.dmg" -fs HFS+ -srcfolder $pkg_dir -format UDZO -volname "$vol_name" diff --git a/installers/windows/NeuralPi_Install_Script.iss b/installers/windows/NeuralPi_Install_Script.iss @@ -0,0 +1,221 @@ +[Setup] +AppName=NeuralPi +AppVersion=##APPVERSION## +DisableWelcomePage=no +DisableDirPage=yes +DefaultDirName={commoncf64} +DefaultGroupName=NeuralPi +OutputBaseFilename="NeuralPi-Win-##APPVERSION##" +OutputDir=. +LicenseFile=../../LICENSE.txt +SetupIconFile=../../resources/neuralpi.ico + +[Types] +Name: "full"; Description: "Full installation" +Name: "custom"; Description: "Custom installation"; Flags: iscustom + +[Tasks] +Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; \ + GroupDescription: "{cm:AdditionalIcons}" + +[Components] +Name: "VST3_64"; Description: "VST3 Plugin 64-bit"; Types: full +Name: "VST3_32"; Description: "VST3 Plugin 32-bit"; Types: full +Name: "STANDALONE_64"; Description: "Standalone 64-bit"; Types: full +Name: "STANDALONE_32"; Description: "Standalone 32-bit"; Types: full +; Name: "AAX"; Description: "AAX Plugin"; Types: full + +[Files] +Source: "../../bin/Win64/NeuralPi.vst3"; DestDir: "{code:GetDir|VST3_64}"; Components: VST3_64; Flags: ignoreversion recursesubdirs createallsubdirs +Source: "../../bin/Win32/NeuralPi.vst3"; DestDir: "{code:GetDir|VST3_32}"; Components: VST3_32; Flags: ignoreversion recursesubdirs createallsubdirs +Source: "../../bin/Win64/NeuralPi.exe"; DestDir: "{code:GetDir|STANDALONE_64}"; Components: STANDALONE_64; Flags: ignoreversion recursesubdirs createallsubdirs +Source: "../../bin/Win32/NeuralPi.exe"; DestDir: "{code:GetDir|STANDALONE_32}"; Components: STANDALONE_32; Flags: ignoreversion recursesubdirs createallsubdirs +Source: "../../resources/neuralpi.ico"; Components: STANDALONE_64; DestDir: "{pf64}\GuitarML" +Source: "../../resources/neuralpi.ico"; Components: STANDALONE_32; DestDir: "{pf32}\GuitarML" + +[Icons] +Name: "{userdesktop}\NeuralPi"; Filename: "{pf64}\GuitarML\NeuralPi.exe"; \ + IconFilename: "{pf64}\GuitarML\neuralpi.ico"; Tasks: desktopicon; +Name: "{userdesktop}\NeuralPi32"; Filename: "{pf32}\GuitarML\NeuralPi.exe"; \ + IconFilename: "{pf32}\GuitarML\neuralpi.ico"; Tasks: desktopicon; + +[Code] +var + AAXDirPage: TInputDirWizardPage; + Vst3_64DirPage: TinputDirWizardPage; + Vst3_32DirPage: TinputDirWizardPage; + Standalone_64DirPage: TinputDirWizardPage; + Standalone_32DirPage: TinputDirWizardPage; + +procedure InitializeWizard; +begin + Log('Initializing extra pages') + //AAX Dir Page + AAXDirPage := CreateInputDirPage(wpSelectComponents, + 'Select AAX Install Location', 'Where would you like to install the AAX plugin?', + 'AAX plugin will be installed in the following folder.'#13#10#13#10 + + 'To continue, click Next. If you would like to select a different folder, click Browse.', + False, 'New Folder'); + + AAXDirPage.add(''); + AAXDirPage.values[0] := ExpandConstant('{commoncf64}\Avid\Audio\Plug-Ins'); + + //VST3 64-bit Dir Page + Vst3_64DirPage := CreateInputDirPage(AAXDirPage.ID, + 'Select Install Location for VST3 64-bit', 'Where would you like to install the plugin?', + 'VST3 64-bit plugin will be installed in the following folder.'#13#10#13#10 + + 'To continue, click Next. If you would like to select a different folder, click Browse.', + False, 'New Folder'); + + Vst3_64DirPage.add(''); + Vst3_64DirPage.values[0] := ExpandConstant('{commoncf64}\VST3'); + + + //VST3 32-bit Dir Page + Vst3_32DirPage := CreateInputDirPage(Vst3_64DirPage.ID, + 'Select Install Location for VST3 32-bit', 'Where would you like to install the plugin?', + 'VST3 32-bit plugin will be installed in the following folder.'#13#10#13#10 + + 'To continue, click Next. If you would like to select a different folder, click Browse.', + False, 'New Folder'); + + Vst3_32DirPage.add(''); + Vst3_32DirPage.values[0] := ExpandConstant('{commoncf32}\VST3'); + + //Standalone 64-bit Dir Page + Standalone_64DirPage := CreateInputDirPage(Vst3_32DirPage.ID, + 'Select Install Location for Standalone 64-bit', 'Where would you like to install the plugin?', + 'Standalone 64-bit plugin will be installed in the following folder.'#13#10#13#10 + + 'To continue, click Next. If you would like to select a different folder, click Browse.', + False, 'New Folder'); + + Standalone_64DirPage.add(''); + Standalone_64DirPage.values[0] := ExpandConstant('{pf64}\GuitarML'); + + + //Standalone 32-bit Dir Page + Standalone_32DirPage := CreateInputDirPage(Standalone_64DirPage.ID, + 'Select Install Location for Standalone 32-bit', 'Where would you like to install the plugin?', + 'Standalone 32-bit plugin will be installed in the following folder.'#13#10#13#10 + + 'To continue, click Next. If you would like to select a different folder, click Browse.', + False, 'New Folder'); + + Standalone_32DirPage.add(''); + Standalone_32DirPage.values[0] := ExpandConstant('{pf32}\GuitarML'); + +end; + +function IsSelected(Param: String) : Boolean; +begin + if not (Pos(Param, WizardSelectedComponents(False)) = 0) then // WizardSelectedComponents(False)) then + Result := True +end; + +function ShouldSkipPage(PageID: Integer): Boolean; +begin + { Skip pages that shouldn't be shown } + Result := False; + + if (PageID = AAXDirPage.ID) then + begin + Result := True; + Log('Selected 1: ' + WizardSelectedComponents(False)); + + if IsSelected ('aax') then + begin + Log('Not Skipping page'); + Result := False; + end + end + + else if (PageID = Vst3_64DirPage.ID) then + begin + Result := True; + Log('Selected 2: ' + WizardSelectedComponents(False)); + + if IsSelected ('vst3_64') then + begin + Log('Not Skipping'); + Result := False; + end + end + + else if (PageID = Vst3_32DirPage.ID) then + begin + Result := True; + Log('Selected 3: ' + WizardSelectedComponents(False)); + + if IsSelected ('vst3_32') then + begin + Log('Not Skipping'); + Result := False; + end + end + + else if (PageID = Standalone_64DirPage.ID) then + begin + Result := True; + Log('Selected 4: ' + WizardSelectedComponents(False)); + + if IsSelected ('standalone_64') then + begin + Log('Not Skipping'); + Result := False; + end + end + + else if (PageID = Standalone_32DirPage.ID) then + begin + Result := True; + Log('Selected 5: ' + WizardSelectedComponents(False)); + + if IsSelected ('standalone_32') then + begin + Log('Not Skipping'); + Result := False; + end + end + +end; + +function GetDir(Param: String) : String; +begin + if (Param = 'AAX') then + Result := AAXDirPage.values[0] + else if (Param = 'VST3_64') then + Result := Vst3_64DirPage.values[0] + else if (Param = 'VST3_32') then + Result := Vst3_32DirPage.values[0] + else if (Param = 'STANDALONE_64') then + Result := Standalone_64DirPage.values[0] + else if (Param = 'STANDALONE_32') then + Result := Standalone_32DirPage.values[0] +end; + +function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, + MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String; +var + S: String; +begin + { Fill the 'Ready Memo' with the normal settings and the custom settings } + S := ''; + S := S + MemoTypeInfo + NewLine + NewLine; + S := S + MemoComponentsInfo + NewLine + NewLine; + S := S + 'Destination Location:' + NewLine; + + if IsSelected('aax') then + S := S + Space + GetDir('AAX') + ' (AAX)' + NewLine; + + if IsSelected('vst3_64') then + S := S + Space + GetDir('VST3_64') + ' (VST3 64-bit)' + NewLine; + + if IsSelected('vst3_32') then + S := S + Space + GetDir('VST3_32') + ' (VST3 32-bit)' + NewLine; + + if IsSelected('standalone_64') then + S := S + Space + GetDir('STANDALONE_64') + ' (Standalone 64-bit)' + NewLine; + + if IsSelected('standalone_32') then + S := S + Space + GetDir('STANDALONE_32') + ' (Standalone 32-bit)' + NewLine; + + Result := S; +end; diff --git a/installers/windows/build_win_installer.sh b/installers/windows/build_win_installer.sh @@ -0,0 +1,20 @@ +#!/bin/sh + +script_file=NeuralPi_Install_Script.iss + +app_version=$(cut -f 2 -d '=' <<< "$(grep 'CMAKE_PROJECT_VERSION:STATIC' ../../build/CMakeCache.txt)") +echo "Setting app version: $app_version..." +sed -i "s/##APPVERSION##/${app_version}/g" $script_file + +# build installer +echo Building... +$"C:\Program Files (x86)\Inno Setup 6\ISCC.exe" $script_file + +# reset version number +sed -i "s/${app_version}/##APPVERSION##/g" $script_file + +exec="NeuralPi-Win-$app_version.exe" +direc=$PWD + + +echo SUCCESS diff --git a/mac_builds.sh b/mac_builds.sh @@ -0,0 +1,66 @@ +#!/bin/bash + +# exit on failure +set -e + +# clean up old builds +rm -Rf build/ +rm -Rf bin/*Mac* + + +# cmake new builds +TEAM_ID=$(more ~/Developer/mac_id) +cmake -Bbuild -DMACOS_RELEASE=ON -GXcode -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY="Developer ID Application" \ + -DCMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM="$TEAM_ID" \ + -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGN_STYLE="Manual" \ + -D"CMAKE_OSX_ARCHITECTURES=arm64;x86_64" \ + -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGN_INJECT_BASE_ENTITLEMENTS=NO \ + -DCMAKE_XCODE_ATTRIBUTE_OTHER_CODE_SIGN_FLAGS="--timestamp" \ + -DMACOS_RELEASE=ON +cmake --build build --config Release -j8 | xcpretty + +# copy builds to bin +mkdir -p bin/Mac +declare -a plugins=("NeuralPi") +for plugin in "${plugins[@]}"; do + cp -R build/${plugin}_artefacts/Release/Standalone/${plugin}.app bin/Mac/${plugin}.app + cp -R build/${plugin}_artefacts/Release/VST3/${plugin}.vst3 bin/Mac/${plugin}.vst3 + cp -R build/${plugin}_artefacts/Release/AU/${plugin}.component bin/Mac/${plugin}.component +done + + +# run auval +echo "Running AU validation..." +rm -Rf ~/Library/Audio/Plug-Ins/Components/${plugin}.component +cp -R build/${plugin}_artefacts/Release/AU/${plugin}.component ~/Library/Audio/Plug-Ins/Components +manu=$(cut -f 6 -d ' ' <<< "$(grep 'PLUGIN_MANUFACTURER_CODE' CMakeLists.txt)") +code=$(cut -f 6 -d ' ' <<< "$(grep 'PLUGIN_CODE' CMakeLists.txt)") + +set +e +auval_result=$(auval -v aufx "$code" "$manu") +auval_code="$?" +echo "AUVAL code: $auval_code" + +if [ "$auval_code" != 0 ]; then + echo "$auval_result" + echo "auval FAIL!!!" + #exit 1 +else + echo "auval PASSED" +fi + +# zip builds +echo "Zipping builds..." +VERSION=$(cut -f 2 -d '=' <<< "$(grep 'CMAKE_PROJECT_VERSION:STATIC' build/CMakeCache.txt)") +( + cd bin + rm -f "NeuralPi-Mac-${VERSION}.zip" + zip -r "NeuralPi-Mac-${VERSION}.zip" Mac +) + +# create installer +echo "Creating installer..." +( + cd installers/mac + bash build_mac_installer.sh +) diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt @@ -0,0 +1,57 @@ +# use DISTRHO-JUCE on Linux to support LV2 +if(UNIX AND NOT APPLE) + add_subdirectory(DISTRHO-JUCE) +else() + add_subdirectory(JUCE) +endif() + +include(cmake/SubprojectVersion.cmake) +subproject_version(JUCE juce_version) +message(STATUS "VERSION for JUCE: ${juce_version}") + +include(cmake/WarningFlags.cmake) +add_library(juce_plugin_modules STATIC) +add_subdirectory(json) +#add_subdirectory(RTNeural) +include_directories(RTNeural) + +target_link_libraries(juce_plugin_modules + PRIVATE + BinaryData + juce::juce_audio_utils + juce::juce_audio_plugin_client + juce::juce_dsp + juce::juce_osc + nlohmann_json::nlohmann_json + RTNeural + PUBLIC + juce::juce_recommended_config_flags + juce::juce_recommended_lto_flags + warning_flags +) + +target_compile_definitions(juce_plugin_modules + PUBLIC + JUCE_DISPLAY_SPLASH_SCREEN=0 + JUCE_REPORT_APP_USAGE=0 + JUCE_WEB_BROWSER=0 + JUCE_USE_CURL=0 + JUCE_VST3_CAN_REPLACE_VST2=0 + JucePlugin_Manufacturer="GuitarML" + JucePlugin_VersionString="${CMAKE_PROJECT_VERSION}" + JucePlugin_Name="${CMAKE_PROJECT_NAME}" + INTERFACE + $<TARGET_PROPERTY:juce_plugin_modules,COMPILE_DEFINITIONS> +) + +target_include_directories(juce_plugin_modules + INTERFACE + $<TARGET_PROPERTY:juce_plugin_modules,INCLUDE_DIRECTORIES> +) + +set_target_properties(juce_plugin_modules PROPERTIES + POSITION_INDEPENDENT_CODE TRUE + VISIBILITY_INLINES_HIDDEN TRUE + C_VISBILITY_PRESET hidden + CXX_VISIBILITY_PRESET hidden +) diff --git a/modules/DISTRHO-JUCE b/modules/DISTRHO-JUCE @@ -0,0 +1 @@ +Subproject commit 3bc7305ed68285902cac3d006beecd1c38c3f1fb diff --git a/modules/JUCE b/modules/JUCE @@ -0,0 +1 @@ +Subproject commit 90e8da0cfb54ac593cdbed74c3d0c9b09bad3a9f diff --git a/modules/cmake/SubprojectVersion.cmake b/modules/cmake/SubprojectVersion.cmake @@ -0,0 +1,20 @@ +# subproject_version(<subproject-name> <result-variable>) +# +# Extract version of a sub-project, which was previously included with add_subdirectory(). +function(subproject_version subproject_name VERSION_VAR) + # Read CMakeLists.txt for subproject and extract project() call(s) from it. + file(STRINGS "${${subproject_name}_SOURCE_DIR}/CMakeLists.txt" project_calls REGEX "[ \t]*project\\(") + # For every project() call try to extract its VERSION option + foreach(project_call ${project_calls}) + string(REGEX MATCH "VERSION[ ]+([^ )]+)" version_param "${project_call}") + if(version_param) + set(version_value "${CMAKE_MATCH_1}") + endif() + endforeach() + if(version_value) + set(${VERSION_VAR} "${version_value}" PARENT_SCOPE) + else() + message("WARNING: Cannot extract version for subproject '${subproject_name}'") + endif() + +endfunction(subproject_version) diff --git a/modules/cmake/WarningFlags.cmake b/modules/cmake/WarningFlags.cmake @@ -0,0 +1,49 @@ +add_library(warning_flags INTERFACE) + +if((CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") OR (CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")) + target_compile_options(warning_flags INTERFACE + /W4 # base warning level + #/wd4458 # declaration hides class member (from Foley's GUI Magic) + /wd4505 # since VS2019 doesn't handle [[ maybe_unused ]] for static functions (RTNeural::debug_print) + /wd4244 # for XSIMD + ) +elseif((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") OR (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")) + target_compile_options(warning_flags INTERFACE + -Wall -Wshadow-all -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized + -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion + -Wconditional-uninitialized -Woverloaded-virtual -Wreorder + -Wconstant-conversion -Wsign-conversion -Wunused-private-field + -Wbool-conversion -Wno-extra-semi -Wunreachable-code + -Wzero-as-null-pointer-constant -Wcast-align + -Wno-inconsistent-missing-destructor-override -Wshift-sign-overflow + -Wnullable-to-nonnull-conversion -Wno-missing-field-initializers + -Wno-ignored-qualifiers -Wpedantic -Wno-pessimizing-move + # These lines suppress some custom warnings. + # Comment them out to be more strict. + -Wno-shadow-field-in-constructor + # Supress warnings from xsimd + -Wno-cast-align -Wno-shadow -Wno-implicit-int-conversion + -Wno-zero-as-null-pointer-constant -Wno-sign-conversion + # Needed for ARM processor, OSX versions below 10.14 + -fno-aligned-allocation + ) +elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + target_compile_options(warning_flags INTERFACE + -Wall -Wextra -Wstrict-aliasing -Wuninitialized -Wunused-parameter + -Wsign-compare -Woverloaded-virtual -Wreorder -Wunreachable-code + -Wzero-as-null-pointer-constant -Wcast-align -Wno-implicit-fallthrough + -Wno-maybe-uninitialized -Wno-missing-field-initializers -Wno-pedantic + -Wno-ignored-qualifiers -Wno-unused-function -Wno-pessimizing-move + # From LV2 Wrapper + -Wno-parentheses -Wno-deprecated-declarations -Wno-redundant-decls + # For XSIMD + -Wno-zero-as-null-pointer-constant + # These lines suppress some custom warnings. + # Comment them out to be more strict. + -Wno-redundant-move + ) + + if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "7.0.0") + target_compile_options(warning_flags INTERFACE "-Wno-strict-overflow") + endif() +endif() diff --git a/modules/json b/modules/json @@ -0,0 +1 @@ +Subproject commit 18a5f4c7ca30d9e0a2e4f12240c13f3e8ff4c82e diff --git a/resources/CMakeLists.txt b/resources/CMakeLists.txt @@ -0,0 +1,9 @@ +juce_add_binary_data(BinaryData SOURCES + logo.png + ../models/bj_model_best.json + ../models/ts9_model_best.json +) + +# Need to build BinaryData with -fPIC flag on Linux +set_target_properties(BinaryData PROPERTIES + POSITION_INDEPENDENT_CODE TRUE) diff --git a/resources/logo.png b/resources/logo.png Binary files differ. diff --git a/resources/neuralpi.ico b/resources/neuralpi.ico Binary files differ. diff --git a/validate.sh b/validate.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +# install functions +install_pluginval_linux() +{ + curl -L "https://github.com/Tracktion/pluginval/releases/download/latest_release/pluginval_Linux.zip" -o pluginval.zip + unzip pluginval > /dev/null + echo "./pluginval" +} + +install_pluginval_mac() +{ + curl -L "https://github.com/Tracktion/pluginval/releases/download/latest_release/pluginval_macOS.zip" -o pluginval.zip + unzip pluginval > /dev/null + echo "pluginval.app/Contents/MacOS/pluginval" +} + +install_pluginval_win() +{ + powershell -Command "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; Invoke-WebRequest https://github.com/Tracktion/pluginval/releases/download/latest_release/pluginval_Windows.zip -OutFile pluginval.zip" + powershell -Command "Expand-Archive pluginval.zip -DestinationPath ." + echo "./pluginval.exe" +} + +# install +if [[ "$OSTYPE" == "linux-gnu"* ]]; then + pluginval=$(install_pluginval_linux) + plugin="build/NeuralPi_artefacts/Release/VST3/NeuralPi.vst3" +elif [[ "$OSTYPE" == "darwin"* ]]; then + pluginval=$(install_pluginval_mac) + plugin="build/NeuralPi_artefacts/VST3/NeuralPi.vst3" +fi + +echo "Pluginval installed at ${pluginval}" +echo "Validating ${plugin}" +$pluginval --strictness-level 8 --validate-in-process --validate $plugin --timeout-ms 600000 +result=$? + +# clean up +rm -Rf pluginval* +exit $result diff --git a/win_builds.sh b/win_builds.sh @@ -0,0 +1,63 @@ +#!/bin/bash + +build64(){ + cmake -Bbuild -G"Visual Studio 15 2017 Win64" + #cmake -Bbuild -G"Visual Studio 16 2019 Win64" + cmake --build build --config Release -j4 +} + +build32(){ + cmake -Bbuild32 -G"Visual Studio 15 2017" + cmake --build build32 --config Release -j4 +} + +# exit on failure +set -e + +# clean up old builds +rm -Rf build/ +rm -Rf build32/ +rm -Rf bin/*Win64* +rm -Rf bin/*Win32* + +# set up VST and ASIO paths +sed -i -e "9s/#//" CMakeLists.txt +sed -i -e "10s/#//" CMakeLists.txt +sed -i -e '16s/#//' CMakeLists.txt + +# cmake new builds +build64 & +build32 & +wait + +# copy builds to bin +mkdir -p bin/Win64 +mkdir -p bin/Win32 +declare -a plugins=("NeuralPi") +for plugin in "${plugins[@]}"; do + cp -R build/${plugin}_artefacts/Release/Standalone/${plugin}.exe bin/Win64/${plugin}.exe + cp -R build/${plugin}_artefacts/Release/VST3/${plugin}.vst3 bin/Win64/${plugin}.vst3 + + cp -R build32/${plugin}_artefacts/Release/Standalone/${plugin}.exe bin/Win32/${plugin}.exe + cp -R build32/${plugin}_artefacts/Release/VST3/${plugin}.vst3 bin/Win32/${plugin}.vst3 +done + +# reset CMakeLists.txt +#git restore CMakeLists.txt + +# zip builds +VERSION=$(cut -f 2 -d '=' <<< "$(grep 'CMAKE_PROJECT_VERSION:STATIC' build/CMakeCache.txt)") +( + cd bin + rm -f "NeuralPi-Win64-${VERSION}.zip" + rm -f "NeuralPi-Win32-${VERSION}.zip" + tar -a -c -f "NeuralPi-Win64-${VERSION}.zip" Win64 + tar -a -c -f "NeuralPi-Win32-${VERSION}.zip" Win32 +) + +# create installer +echo "Creating installer..." +( + cd installers/windows + bash build_win_installer.sh +)