commit 83aafdfce9409d79bc755afd2c163b00a972210f
parent 47c01203193bd6ab3b4359fd3df949a6a12e0848
Author: jatinchowdhury18 <[email protected]>
Date: Wed, 15 Jul 2020 08:31:50 -0700
Support LV2 builds for Linux (#54)
* Set up LV2 build pipeline
* Set up LV2 travis
* Try to fix Linux VST build on LV2 branch
* Update LV2 build setup
* Traavis add freetype2 dependency for Linux
* Update LV2 Travis
* Update Linux Travis
* LV2 building tweaks
Co-authored-by: jatinchowdhury18 <[email protected]>
Diffstat:
9 files changed, 325 insertions(+), 237 deletions(-)
diff --git a/.gitignore b/.gitignore
@@ -14,6 +14,7 @@ Builds
BinaryData.h
BinaryData*.cpp
JuceLibraryCode
+LV2.mak
#Windows Temp Cache Files
[Tt]humbs.db
diff --git a/.travis.yml b/.travis.yml
@@ -10,23 +10,6 @@ if: (type != push) OR (type = push AND branch = master)
matrix:
include:
- #- name: "unit-tests"
- # os: osx
- # env:
- # - BUILD_FOLDER="MacOSX"
- # - PROJUCER_EXPORT="$TRAVIS_BUILD_DIR/JUCE/extras/Projucer/Builds/MacOSX/build/Debug/Projucer.app/Contents/MacOS/Projucer"
- - name: "osx"
- os: osx
- env:
- - BUILD_FOLDER="MacOSX"
- - PROJUCER_EXPORT="$TRAVIS_BUILD_DIR/Plugin/JUCE/extras/Projucer/Builds/MacOSX/build/Debug/Projucer.app/Contents/MacOS/Projucer"
- - secure: VjjlWj4TxFpDrbKDKkhkbsAMZs8sf3QAhD5BcPZAyYkaTmP7RdW77z56c5hpucK01hGNZxLhrlc/0ziNOJqGNwO0tJwR4KYSfZ7xhgljC4NKdTfb5vlBseqvWXNQfIurfYjh2m95/XbAYM+v42i7N+Htf+G/DBmjVgsLGDILt4pV2BojAXVxywrenzlM4khcG8g3Q+TxuaVop5zgT6vmF4F0/HOFRIlOiancDHXHKMeyC9ms6+M/k2FjTW6k96n2JRtI3y7Gzhbs1o3BG+dtN6le3pmSaGmRjqzMuwiC2TZg612tb9FA7+2XdsRavjkKzEHmHvYPrlu7OwwQJ9v2Am6PNn7oPnIk6a8EIUnaj3PXOvE99SdF7xNUN40IR5dqoan0p7hecZGktMeoWkWRnMNGrGRR2X827NnxFTEE2N87djRJ9UT2I4kCfRjqHNePQEl1RVGajLJGiZL2ZiHY7SRYv2apv2e8ovSEZhbQs9euZXhkujCVFtsKep5139WHVXuB+iGDKrYRfkTiAZeRs5aZ4os2C2CHH6rffHZTGXl2e4NW23PEejueXuJof6svVL0Jc50MnVY/F1Hl5Tcp471VOFTM5SXQm3ApL655rdKr07RKIf9YzE3eb1VrHmiL0CH7LxN09Z63/M0s+RlkEvxHlQFsy5Ph66FfuPW24bc=
- - name: "win"
- os: windows
- env:
- - MSBUILD_PATH="c:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin"
- - BUILD_FOLDER="VisualStudio2017"
- - PROJUCER_EXPORT="$TRAVIS_BUILD_DIR/Plugin/JUCE/extras/Projucer/Builds/VisualStudio2017/x64/Debug/App/Projucer.exe"
- name: "linux"
os: linux
dist: xenial
@@ -34,31 +17,30 @@ matrix:
compiler: gcc
addons:
apt:
- sources:
- - ubuntu-toolchain-r-test
packages:
- - gcc-6
- - g++-6
- - freeglut3-dev
- - g++
- libasound2-dev
- - libcurl4-openssl-dev
- - libfreetype6-dev
- - libjack-jackd2-dev
- - libx11-dev
- - libxcomposite-dev
- libxcursor-dev
- libxinerama-dev
- libxrandr-dev
- - mesa-common-dev
- - ladspa-sdk
- - webkit2gtk-4.0
- - libgtk-3-dev
+ - freeglut3-dev
+ - libjack-jackd2-dev
services:
- xvfb
env:
- BUILD_FOLDER="LinuxMakefile"
- PROJUCER_EXPORT="$TRAVIS_BUILD_DIR/Plugin/Juce/extras/Projucer/Builds/LinuxMakefile/build/Projucer"
+ - name: "osx"
+ os: osx
+ env:
+ - BUILD_FOLDER="MacOSX"
+ - PROJUCER_EXPORT="$TRAVIS_BUILD_DIR/Plugin/JUCE/extras/Projucer/Builds/MacOSX/build/Debug/Projucer.app/Contents/MacOS/Projucer"
+ - secure: VjjlWj4TxFpDrbKDKkhkbsAMZs8sf3QAhD5BcPZAyYkaTmP7RdW77z56c5hpucK01hGNZxLhrlc/0ziNOJqGNwO0tJwR4KYSfZ7xhgljC4NKdTfb5vlBseqvWXNQfIurfYjh2m95/XbAYM+v42i7N+Htf+G/DBmjVgsLGDILt4pV2BojAXVxywrenzlM4khcG8g3Q+TxuaVop5zgT6vmF4F0/HOFRIlOiancDHXHKMeyC9ms6+M/k2FjTW6k96n2JRtI3y7Gzhbs1o3BG+dtN6le3pmSaGmRjqzMuwiC2TZg612tb9FA7+2XdsRavjkKzEHmHvYPrlu7OwwQJ9v2Am6PNn7oPnIk6a8EIUnaj3PXOvE99SdF7xNUN40IR5dqoan0p7hecZGktMeoWkWRnMNGrGRR2X827NnxFTEE2N87djRJ9UT2I4kCfRjqHNePQEl1RVGajLJGiZL2ZiHY7SRYv2apv2e8ovSEZhbQs9euZXhkujCVFtsKep5139WHVXuB+iGDKrYRfkTiAZeRs5aZ4os2C2CHH6rffHZTGXl2e4NW23PEejueXuJof6svVL0Jc50MnVY/F1Hl5Tcp471VOFTM5SXQm3ApL655rdKr07RKIf9YzE3eb1VrHmiL0CH7LxN09Z63/M0s+RlkEvxHlQFsy5Ph66FfuPW24bc=
+ - name: "win"
+ os: windows
+ env:
+ - MSBUILD_PATH="c:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin"
+ - BUILD_FOLDER="VisualStudio2017"
+ - PROJUCER_EXPORT="$TRAVIS_BUILD_DIR/Plugin/JUCE/extras/Projucer/Builds/VisualStudio2017/x64/Debug/App/Projucer.exe"
before_install:
# mac installs
@@ -84,15 +66,7 @@ script:
- if [[ $TRAVIS_OS_NAME == 'osx' ]]; then xcodebuild -project CHOWTapeModel.xcodeproj/ clean; fi
- if [[ $TRAVIS_JOB_NAME == 'osx' ]]; then xcodebuild -project CHOWTapeModel.xcodeproj/ -configuration Release | xcpretty -s -f `xcpretty-travis-formatter`; fi
- if [[ $TRAVIS_JOB_NAME == 'win' ]]; then msbuild.exe -v:normal CHOWTapeModel.sln; fi
- - if [[ $TRAVIS_OS_NAME == 'linux' ]]; then make clean; fi
- - if [[ $TRAVIS_OS_NAME == 'linux' ]]; then make CONFIG=Release; fi
-
- #- |
- # if [[ $TRAVIS_JOB_NAME == 'unit-tests' ]]; then
- # xcodebuild -project NewMixer.xcodeproj/ -configuration Debug | xcpretty -s -f `xcpretty-travis-formatter`
- # cd build/Debug/NewMixer.app/Contents/MacOS
- # ./NewMixer --unit-tests
- # fi
+ - if [[ $TRAVIS_OS_NAME == 'linux' ]]; then cd ../../ && bash build_linux.sh; fi
# Pluginval
- |
diff --git a/BUILDING.md b/BUILDING.md
@@ -1,27 +1,48 @@
# Instructions For Building
-
CHOW Tape is built using the [JUCE](https://github.com/juce-framework/JUCE) framework, with [PluginGUIMagic](https://github.com/ffAudio/PluginGUIMagic)
-for the UI. To build from scratch, use the following steps:
-
-1. Run the following commands:
- ```bash
- # Clone the repository
- git clone --recursive https://github.com/jatinchowdhury18/AnalogTapeModel.git
-
- # Enter the repository
- cd AnalogTapeModel/Plugin
-
- # Initialize JUCE submodule
- git submodule update --init --recursive
- ```
-2. Navigate to `JUCE/extras/Projucer/Builds/`
-3. Build the Projucer using XCode (Mac), Visual Studio (Windows), or Makefile (Linux)
-4. From the Projucer, open CHOWTapeModel.jucer
-5. Select "Save and open in IDE"
-6. Build CHOW Tape
-
-### Building with the GUI Editor
+for the UI. To build from scratch, you must first clone the repository
+and initialize the submodules using the following commands:
+
+```bash
+# Clone the repository
+git clone --recursive https://github.com/jatinchowdhury18/AnalogTapeModel.git
+
+# Enter the repository
+cd AnalogTapeModel/Plugin
+
+# Initialize submodules
+git submodule update --init --recursive
+```
+
+## Building on MacOS/Windows
+1. Navigate to `JUCE/extras/Projucer/Builds/`
+2. Build the Projucer using XCode (Mac) or Visual Studio (Windows)
+3. From the Projucer, open CHOWTapeModel.jucer
+4. Select "Save and open in IDE"
+5. Build CHOW Tape
+
+## Building on Linux
+The Linux build utilises the following dependencies:
+- libasound
+- libxcursor
+- libxinerama
+- libxrandr
+- freeglut3
+- libjack
+
+These can be installed with the following command:
+```
+sudo apt-get install libasound2-dev libxcursor-dev libxinerama-dev libxrandr-dev freeglut3-dev libjack-jackd2-dev
+```
+
+Then to build the plugin (Standalone, VST/ LV2), run
+```
+cd Plugin/ && bash build_linux.sh
+```
+
+Builds can be found in `Builds/LinuxMakefile/build/`.
+## Building with the GUI Editor
If you need to make changes to the GUI, you can build the
plugin with Foley's Magic Editor attached. From the Projucer,
navigate to `modules -> foleys_gui_magic`, and enable
diff --git a/Plugin/CHOWTapeModel.jucer b/Plugin/CHOWTapeModel.jucer
@@ -1,172 +1,173 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<JUCERPROJECT id="jDoXPz" name="CHOWTapeModel" projectType="audioplug" jucerVersion="5.4.7"
- version="2.3.4" pluginFormats="buildAU,buildStandalone,buildVST,buildVST3"
- cppLanguageStandard="17" companyName="chowdsp" companyEmail="[email protected]"
- defines="SAVE_PRESETS=0" pluginManufacturerCode="Chow" reportAppUsage="0">
- <MAINGROUP id="pXbPvR" name="CHOWTapeModel">
- <GROUP id="{0178B10A-4A61-796A-5AB2-915D32AF6EEE}" name="Source">
- <GROUP id="{8D673967-9B5D-8254-9062-4C4B14D4EAD9}" name="GUI">
- <FILE id="KmBito" name="gui.xml" compile="0" resource="1" file="Source/GUI/gui.xml"/>
- <FILE id="kmORjM" name="preset_save_gui.xml" compile="0" resource="1"
- file="Source/GUI/preset_save_gui.xml"/>
- </GROUP>
- <GROUP id="{71C1FCA8-E7B0-3B66-1340-F140C452FF6F}" name="Presets">
- <GROUP id="{AB6F221D-98B5-9782-2241-321BA5DFB83C}" name="PresetConfigs">
- <FILE id="AymGjK" name="Default.xml" compile="0" resource="1" file="Source/Presets/PresetConfigs/Default.xml"/>
- <FILE id="zlTcrf" name="LoFi.xml" compile="0" resource="1" file="Source/Presets/PresetConfigs/LoFi.xml"/>
- <FILE id="drwXrv" name="OldTape.xml" compile="0" resource="1" file="Source/Presets/PresetConfigs/OldTape.xml"/>
- <FILE id="O4vt7g" name="TC260.xml" compile="0" resource="1" file="Source/Presets/PresetConfigs/TC260.xml"/>
- <FILE id="FkbdSt" name="Underbiased.xml" compile="0" resource="1" file="Source/Presets/PresetConfigs/Underbiased.xml"/>
- <FILE id="wf7iTS" name="WoozyChorus.xml" compile="0" resource="1" file="Source/Presets/PresetConfigs/WoozyChorus.xml"/>
- </GROUP>
- <FILE id="ByxTdI" name="PresetComp.cpp" compile="1" resource="0" file="Source/Presets/PresetComp.cpp"/>
- <FILE id="jFQg5e" name="PresetComp.h" compile="0" resource="0" file="Source/Presets/PresetComp.h"/>
- <FILE id="u8p0u2" name="PresetManager.cpp" compile="1" resource="0"
- file="Source/Presets/PresetManager.cpp"/>
- <FILE id="hN3w9Y" name="PresetManager.h" compile="0" resource="0" file="Source/Presets/PresetManager.h"/>
- </GROUP>
- <GROUP id="{43BBFC88-4D0A-01B8-2635-3748470B94F4}" name="Processors">
- <GROUP id="{2F544AA2-63D9-E54A-A753-2E6249E85E60}" name="Chew">
- <FILE id="S5eP4b" name="ChewProcessor.cpp" compile="1" resource="0"
- file="Source/Processors/Chew/ChewProcessor.cpp"/>
- <FILE id="shEGgj" name="ChewProcessor.h" compile="0" resource="0" file="Source/Processors/Chew/ChewProcessor.h"/>
- <FILE id="gw6Axu" name="Dropout.h" compile="0" resource="0" file="Source/Processors/Chew/Dropout.h"/>
- </GROUP>
- <GROUP id="{344B63D7-2DBC-F9D2-ACD7-1B0671D4D024}" name="Degrade">
- <FILE id="ac7jRp" name="DegradeFilter.h" compile="0" resource="0" file="Source/Processors/Degrade/DegradeFilter.h"/>
- <FILE id="qWC1GC" name="DegradeNoise.h" compile="0" resource="0" file="Source/Processors/Degrade/DegradeNoise.h"/>
- <FILE id="VIsORm" name="DegradeProcessor.cpp" compile="1" resource="0"
- file="Source/Processors/Degrade/DegradeProcessor.cpp"/>
- <FILE id="pXjWJR" name="DegradeProcessor.h" compile="0" resource="0"
- file="Source/Processors/Degrade/DegradeProcessor.h"/>
- </GROUP>
- <GROUP id="{6052B1B0-83EF-DBFA-991C-FC0B47A949C9}" name="Hysteresis">
- <FILE id="l6IKp3" name="DCFilters.h" compile="0" resource="0" file="Source/Processors/Hysteresis/DCFilters.h"/>
- <FILE id="Qe4tlV" name="HysteresisProcessing.cpp" compile="1" resource="0"
- file="Source/Processors/Hysteresis/HysteresisProcessing.cpp"/>
- <FILE id="OYS18C" name="HysteresisProcessing.h" compile="0" resource="0"
- file="Source/Processors/Hysteresis/HysteresisProcessing.h"/>
- <FILE id="Afas5v" name="HysteresisProcessor.cpp" compile="1" resource="0"
- file="Source/Processors/Hysteresis/HysteresisProcessor.cpp"/>
- <FILE id="TRDp2E" name="HysteresisProcessor.h" compile="0" resource="0"
- file="Source/Processors/Hysteresis/HysteresisProcessor.h"/>
- </GROUP>
- <GROUP id="{37F4BCFA-28D3-CD4D-17AF-3C696E7EC8DA}" name="Loss_Effects">
- <FILE id="gJA2Gi" name="FIRFilter.h" compile="0" resource="0" file="Source/Processors/Loss_Effects/FIRFilter.h"/>
- <FILE id="ZNErgZ" name="LossFilter.h" compile="0" resource="0" file="Source/Processors/Loss_Effects/LossFilter.h"/>
- </GROUP>
- <GROUP id="{0C000F30-53FD-3EFB-FAEA-6321B08AE56A}" name="Timing_Effects">
- <FILE id="kv0dir" name="DelayProcessor.cpp" compile="1" resource="0"
- file="Source/Processors/Timing_Effects/DelayProcessor.cpp"/>
- <FILE id="ZrrIc3" name="DelayProcessor.h" compile="0" resource="0"
- file="Source/Processors/Timing_Effects/DelayProcessor.h"/>
- <FILE id="cVSIAR" name="Flutter.cpp" compile="1" resource="0" file="Source/Processors/Timing_Effects/Flutter.cpp"/>
- <FILE id="Wz3lz6" name="Flutter.h" compile="0" resource="0" file="Source/Processors/Timing_Effects/Flutter.h"/>
- </GROUP>
- <FILE id="YNkJOh" name="DryWetProcessor.h" compile="0" resource="0"
- file="Source/Processors/DryWetProcessor.h"/>
- <FILE id="zwLvQ9" name="GainProcessor.h" compile="0" resource="0" file="Source/Processors/GainProcessor.h"/>
- </GROUP>
- <FILE id="zPJjtw" name="PluginProcessor.cpp" compile="1" resource="0"
- file="Source/PluginProcessor.cpp"/>
- <FILE id="JDgaoP" name="PluginProcessor.h" compile="0" resource="0"
- file="Source/PluginProcessor.h"/>
- </GROUP>
- </MAINGROUP>
- <EXPORTFORMATS>
- <XCODE_MAC targetFolder="Builds/MacOSX">
- <CONFIGURATIONS>
- <CONFIGURATION isDebug="1" name="Debug"/>
- <CONFIGURATION isDebug="0" name="Release"/>
- </CONFIGURATIONS>
- <MODULEPATHS>
- <MODULEPATH id="juce_audio_basics" path="Juce/modules"/>
- <MODULEPATH id="juce_audio_devices" path="Juce/modules"/>
- <MODULEPATH id="juce_audio_formats" path="Juce/modules"/>
- <MODULEPATH id="juce_audio_plugin_client" path="Juce/modules"/>
- <MODULEPATH id="juce_audio_processors" path="Juce/modules"/>
- <MODULEPATH id="juce_audio_utils" path="Juce/modules"/>
- <MODULEPATH id="juce_core" path="Juce/modules"/>
- <MODULEPATH id="juce_data_structures" path="Juce/modules"/>
- <MODULEPATH id="juce_events" path="Juce/modules"/>
- <MODULEPATH id="juce_graphics" path="Juce/modules"/>
- <MODULEPATH id="juce_gui_basics" path="Juce/modules"/>
- <MODULEPATH id="juce_gui_extra" path="Juce/modules"/>
- <MODULEPATH id="juce_dsp" path="Juce/modules"/>
- <MODULEPATH id="foleys_gui_magic" path="."/>
- <MODULEPATH id="juce_opengl" path="Juce/modules"/>
- </MODULEPATHS>
- </XCODE_MAC>
- <VS2017 targetFolder="Builds/VisualStudio2017">
- <CONFIGURATIONS>
- <CONFIGURATION isDebug="1" name="Debug"/>
- <CONFIGURATION isDebug="0" name="Release"/>
- <CONFIGURATION isDebug="0" name="Release32" winArchitecture="Win32"/>
- </CONFIGURATIONS>
- <MODULEPATHS>
- <MODULEPATH id="juce_audio_basics" path="Juce/modules"/>
- <MODULEPATH id="juce_audio_devices" path="Juce/modules"/>
- <MODULEPATH id="juce_audio_formats" path="Juce/modules"/>
- <MODULEPATH id="juce_audio_plugin_client" path="Juce/modules"/>
- <MODULEPATH id="juce_audio_processors" path="Juce/modules"/>
- <MODULEPATH id="juce_audio_utils" path="Juce/modules"/>
- <MODULEPATH id="juce_core" path="Juce/modules"/>
- <MODULEPATH id="juce_data_structures" path="Juce/modules"/>
- <MODULEPATH id="juce_events" path="Juce/modules"/>
- <MODULEPATH id="juce_graphics" path="Juce/modules"/>
- <MODULEPATH id="juce_gui_basics" path="Juce/modules"/>
- <MODULEPATH id="juce_gui_extra" path="Juce/modules"/>
- <MODULEPATH id="juce_dsp" path="Juce/modules"/>
- <MODULEPATH id="foleys_gui_magic" path="."/>
- <MODULEPATH id="juce_opengl" path="Juce/modules"/>
- </MODULEPATHS>
- </VS2017>
- <LINUX_MAKE targetFolder="Builds/LinuxMakefile">
- <CONFIGURATIONS>
- <CONFIGURATION isDebug="1" name="Debug"/>
- <CONFIGURATION isDebug="0" name="Release"/>
- </CONFIGURATIONS>
- <MODULEPATHS>
- <MODULEPATH id="juce_audio_basics" path="Juce/modules"/>
- <MODULEPATH id="juce_audio_devices" path="Juce/modules"/>
- <MODULEPATH id="juce_audio_formats" path="Juce/modules"/>
- <MODULEPATH id="juce_audio_plugin_client" path="Juce/modules"/>
- <MODULEPATH id="juce_audio_processors" path="Juce/modules"/>
- <MODULEPATH id="juce_audio_utils" path="Juce/modules"/>
- <MODULEPATH id="juce_core" path="Juce/modules"/>
- <MODULEPATH id="juce_data_structures" path="Juce/modules"/>
- <MODULEPATH id="juce_events" path="Juce/modules"/>
- <MODULEPATH id="juce_graphics" path="Juce/modules"/>
- <MODULEPATH id="juce_gui_basics" path="Juce/modules"/>
- <MODULEPATH id="juce_gui_extra" path="Juce/modules"/>
- <MODULEPATH id="juce_dsp" path="Juce/modules"/>
- <MODULEPATH id="foleys_gui_magic" path="."/>
- <MODULEPATH id="juce_opengl" path="Juce/modules"/>
- </MODULEPATHS>
- </LINUX_MAKE>
- </EXPORTFORMATS>
- <MODULES>
- <MODULE id="foleys_gui_magic" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
- <MODULE id="juce_audio_basics" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
- <MODULE id="juce_audio_devices" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
- <MODULE id="juce_audio_formats" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
- <MODULE id="juce_audio_plugin_client" showAllCode="1" useLocalCopy="0"
- useGlobalPath="0"/>
- <MODULE id="juce_audio_processors" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
- <MODULE id="juce_audio_utils" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
- <MODULE id="juce_core" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
- <MODULE id="juce_data_structures" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
- <MODULE id="juce_dsp" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
- <MODULE id="juce_events" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
- <MODULE id="juce_graphics" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
- <MODULE id="juce_gui_basics" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
- <MODULE id="juce_gui_extra" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
- <MODULE id="juce_opengl" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
- </MODULES>
- <LIVE_SETTINGS>
- <WINDOWS/>
- </LIVE_SETTINGS>
- <JUCEOPTIONS JUCE_VST3_CAN_REPLACE_VST2="0" JUCE_STRICT_REFCOUNTEDPOINTER="1"
- FOLEYS_SHOW_GUI_EDITOR_PALLETTE="0" JUCE_WEB_BROWSER="0"/>
-</JUCERPROJECT>
+<?xml version="1.0" encoding="UTF-8"?>
+
+<JUCERPROJECT id="jDoXPz" name="CHOWTapeModel" projectType="audioplug" jucerVersion="5.4.7"
+ version="2.3.4" pluginFormats="buildAU,buildStandalone,buildVST,buildVST3"
+ cppLanguageStandard="17" companyName="chowdsp" companyEmail="[email protected]"
+ defines="SAVE_PRESETS=0" pluginManufacturerCode="Chow" reportAppUsage="0">
+ <MAINGROUP id="pXbPvR" name="CHOWTapeModel">
+ <GROUP id="{0178B10A-4A61-796A-5AB2-915D32AF6EEE}" name="Source">
+ <GROUP id="{8D673967-9B5D-8254-9062-4C4B14D4EAD9}" name="GUI">
+ <FILE id="KmBito" name="gui.xml" compile="0" resource="1" file="Source/GUI/gui.xml"/>
+ <FILE id="kmORjM" name="preset_save_gui.xml" compile="0" resource="1"
+ file="Source/GUI/preset_save_gui.xml"/>
+ </GROUP>
+ <GROUP id="{71C1FCA8-E7B0-3B66-1340-F140C452FF6F}" name="Presets">
+ <GROUP id="{AB6F221D-98B5-9782-2241-321BA5DFB83C}" name="PresetConfigs">
+ <FILE id="AymGjK" name="Default.xml" compile="0" resource="1" file="Source/Presets/PresetConfigs/Default.xml"/>
+ <FILE id="zlTcrf" name="LoFi.xml" compile="0" resource="1" file="Source/Presets/PresetConfigs/LoFi.xml"/>
+ <FILE id="drwXrv" name="OldTape.xml" compile="0" resource="1" file="Source/Presets/PresetConfigs/OldTape.xml"/>
+ <FILE id="O4vt7g" name="TC260.xml" compile="0" resource="1" file="Source/Presets/PresetConfigs/TC260.xml"/>
+ <FILE id="FkbdSt" name="Underbiased.xml" compile="0" resource="1" file="Source/Presets/PresetConfigs/Underbiased.xml"/>
+ <FILE id="wf7iTS" name="WoozyChorus.xml" compile="0" resource="1" file="Source/Presets/PresetConfigs/WoozyChorus.xml"/>
+ </GROUP>
+ <FILE id="ByxTdI" name="PresetComp.cpp" compile="1" resource="0" file="Source/Presets/PresetComp.cpp"/>
+ <FILE id="jFQg5e" name="PresetComp.h" compile="0" resource="0" file="Source/Presets/PresetComp.h"/>
+ <FILE id="u8p0u2" name="PresetManager.cpp" compile="1" resource="0"
+ file="Source/Presets/PresetManager.cpp"/>
+ <FILE id="hN3w9Y" name="PresetManager.h" compile="0" resource="0" file="Source/Presets/PresetManager.h"/>
+ </GROUP>
+ <GROUP id="{43BBFC88-4D0A-01B8-2635-3748470B94F4}" name="Processors">
+ <GROUP id="{2F544AA2-63D9-E54A-A753-2E6249E85E60}" name="Chew">
+ <FILE id="S5eP4b" name="ChewProcessor.cpp" compile="1" resource="0"
+ file="Source/Processors/Chew/ChewProcessor.cpp"/>
+ <FILE id="shEGgj" name="ChewProcessor.h" compile="0" resource="0" file="Source/Processors/Chew/ChewProcessor.h"/>
+ <FILE id="gw6Axu" name="Dropout.h" compile="0" resource="0" file="Source/Processors/Chew/Dropout.h"/>
+ </GROUP>
+ <GROUP id="{344B63D7-2DBC-F9D2-ACD7-1B0671D4D024}" name="Degrade">
+ <FILE id="ac7jRp" name="DegradeFilter.h" compile="0" resource="0" file="Source/Processors/Degrade/DegradeFilter.h"/>
+ <FILE id="qWC1GC" name="DegradeNoise.h" compile="0" resource="0" file="Source/Processors/Degrade/DegradeNoise.h"/>
+ <FILE id="VIsORm" name="DegradeProcessor.cpp" compile="1" resource="0"
+ file="Source/Processors/Degrade/DegradeProcessor.cpp"/>
+ <FILE id="pXjWJR" name="DegradeProcessor.h" compile="0" resource="0"
+ file="Source/Processors/Degrade/DegradeProcessor.h"/>
+ </GROUP>
+ <GROUP id="{6052B1B0-83EF-DBFA-991C-FC0B47A949C9}" name="Hysteresis">
+ <FILE id="l6IKp3" name="DCFilters.h" compile="0" resource="0" file="Source/Processors/Hysteresis/DCFilters.h"/>
+ <FILE id="Qe4tlV" name="HysteresisProcessing.cpp" compile="1" resource="0"
+ file="Source/Processors/Hysteresis/HysteresisProcessing.cpp"/>
+ <FILE id="OYS18C" name="HysteresisProcessing.h" compile="0" resource="0"
+ file="Source/Processors/Hysteresis/HysteresisProcessing.h"/>
+ <FILE id="Afas5v" name="HysteresisProcessor.cpp" compile="1" resource="0"
+ file="Source/Processors/Hysteresis/HysteresisProcessor.cpp"/>
+ <FILE id="TRDp2E" name="HysteresisProcessor.h" compile="0" resource="0"
+ file="Source/Processors/Hysteresis/HysteresisProcessor.h"/>
+ </GROUP>
+ <GROUP id="{37F4BCFA-28D3-CD4D-17AF-3C696E7EC8DA}" name="Loss_Effects">
+ <FILE id="gJA2Gi" name="FIRFilter.h" compile="0" resource="0" file="Source/Processors/Loss_Effects/FIRFilter.h"/>
+ <FILE id="ZNErgZ" name="LossFilter.h" compile="0" resource="0" file="Source/Processors/Loss_Effects/LossFilter.h"/>
+ </GROUP>
+ <GROUP id="{0C000F30-53FD-3EFB-FAEA-6321B08AE56A}" name="Timing_Effects">
+ <FILE id="kv0dir" name="DelayProcessor.cpp" compile="1" resource="0"
+ file="Source/Processors/Timing_Effects/DelayProcessor.cpp"/>
+ <FILE id="ZrrIc3" name="DelayProcessor.h" compile="0" resource="0"
+ file="Source/Processors/Timing_Effects/DelayProcessor.h"/>
+ <FILE id="cVSIAR" name="Flutter.cpp" compile="1" resource="0" file="Source/Processors/Timing_Effects/Flutter.cpp"/>
+ <FILE id="Wz3lz6" name="Flutter.h" compile="0" resource="0" file="Source/Processors/Timing_Effects/Flutter.h"/>
+ </GROUP>
+ <FILE id="YNkJOh" name="DryWetProcessor.h" compile="0" resource="0"
+ file="Source/Processors/DryWetProcessor.h"/>
+ <FILE id="zwLvQ9" name="GainProcessor.h" compile="0" resource="0" file="Source/Processors/GainProcessor.h"/>
+ </GROUP>
+ <FILE id="zPJjtw" name="PluginProcessor.cpp" compile="1" resource="0"
+ file="Source/PluginProcessor.cpp"/>
+ <FILE id="JDgaoP" name="PluginProcessor.h" compile="0" resource="0"
+ file="Source/PluginProcessor.h"/>
+ </GROUP>
+ </MAINGROUP>
+ <EXPORTFORMATS>
+ <XCODE_MAC targetFolder="Builds/MacOSX">
+ <CONFIGURATIONS>
+ <CONFIGURATION isDebug="1" name="Debug"/>
+ <CONFIGURATION isDebug="0" name="Release"/>
+ </CONFIGURATIONS>
+ <MODULEPATHS>
+ <MODULEPATH id="juce_audio_basics" path="Juce/modules"/>
+ <MODULEPATH id="juce_audio_devices" path="Juce/modules"/>
+ <MODULEPATH id="juce_audio_formats" path="Juce/modules"/>
+ <MODULEPATH id="juce_audio_plugin_client" path="Juce/modules"/>
+ <MODULEPATH id="juce_audio_processors" path="Juce/modules"/>
+ <MODULEPATH id="juce_audio_utils" path="Juce/modules"/>
+ <MODULEPATH id="juce_core" path="Juce/modules"/>
+ <MODULEPATH id="juce_data_structures" path="Juce/modules"/>
+ <MODULEPATH id="juce_events" path="Juce/modules"/>
+ <MODULEPATH id="juce_graphics" path="Juce/modules"/>
+ <MODULEPATH id="juce_gui_basics" path="Juce/modules"/>
+ <MODULEPATH id="juce_gui_extra" path="Juce/modules"/>
+ <MODULEPATH id="juce_dsp" path="Juce/modules"/>
+ <MODULEPATH id="foleys_gui_magic" path="."/>
+ <MODULEPATH id="juce_opengl" path="Juce/modules"/>
+ </MODULEPATHS>
+ </XCODE_MAC>
+ <VS2017 targetFolder="Builds/VisualStudio2017">
+ <CONFIGURATIONS>
+ <CONFIGURATION isDebug="1" name="Debug"/>
+ <CONFIGURATION isDebug="0" name="Release"/>
+ <CONFIGURATION isDebug="0" name="Release32" winArchitecture="Win32"/>
+ </CONFIGURATIONS>
+ <MODULEPATHS>
+ <MODULEPATH id="juce_audio_basics" path="Juce/modules"/>
+ <MODULEPATH id="juce_audio_devices" path="Juce/modules"/>
+ <MODULEPATH id="juce_audio_formats" path="Juce/modules"/>
+ <MODULEPATH id="juce_audio_plugin_client" path="Juce/modules"/>
+ <MODULEPATH id="juce_audio_processors" path="Juce/modules"/>
+ <MODULEPATH id="juce_audio_utils" path="Juce/modules"/>
+ <MODULEPATH id="juce_core" path="Juce/modules"/>
+ <MODULEPATH id="juce_data_structures" path="Juce/modules"/>
+ <MODULEPATH id="juce_events" path="Juce/modules"/>
+ <MODULEPATH id="juce_graphics" path="Juce/modules"/>
+ <MODULEPATH id="juce_gui_basics" path="Juce/modules"/>
+ <MODULEPATH id="juce_gui_extra" path="Juce/modules"/>
+ <MODULEPATH id="juce_dsp" path="Juce/modules"/>
+ <MODULEPATH id="foleys_gui_magic" path="."/>
+ <MODULEPATH id="juce_opengl" path="Juce/modules"/>
+ </MODULEPATHS>
+ </VS2017>
+ <LINUX_MAKE targetFolder="Builds/LinuxMakefile">
+ <CONFIGURATIONS>
+ <CONFIGURATION isDebug="1" name="Debug"/>
+ <CONFIGURATION isDebug="0" name="Release"/>
+ </CONFIGURATIONS>
+ <MODULEPATHS>
+ <MODULEPATH id="juce_audio_basics" path="Juce/modules"/>
+ <MODULEPATH id="juce_audio_devices" path="Juce/modules"/>
+ <MODULEPATH id="juce_audio_formats" path="Juce/modules"/>
+ <MODULEPATH id="juce_audio_plugin_client" path="Juce/modules"/>
+ <MODULEPATH id="juce_audio_processors" path="Juce/modules"/>
+ <MODULEPATH id="juce_audio_utils" path="Juce/modules"/>
+ <MODULEPATH id="juce_core" path="Juce/modules"/>
+ <MODULEPATH id="juce_data_structures" path="Juce/modules"/>
+ <MODULEPATH id="juce_events" path="Juce/modules"/>
+ <MODULEPATH id="juce_graphics" path="Juce/modules"/>
+ <MODULEPATH id="juce_gui_basics" path="Juce/modules"/>
+ <MODULEPATH id="juce_gui_extra" path="Juce/modules"/>
+ <MODULEPATH id="juce_dsp" path="Juce/modules"/>
+ <MODULEPATH id="foleys_gui_magic" path="."/>
+ <MODULEPATH id="juce_opengl" path="Juce/modules"/>
+ </MODULEPATHS>
+ </LINUX_MAKE>
+ </EXPORTFORMATS>
+ <MODULES>
+ <MODULE id="foleys_gui_magic" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
+ <MODULE id="juce_audio_basics" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
+ <MODULE id="juce_audio_devices" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
+ <MODULE id="juce_audio_formats" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
+ <MODULE id="juce_audio_plugin_client" showAllCode="1" useLocalCopy="0"
+ useGlobalPath="0"/>
+ <MODULE id="juce_audio_processors" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
+ <MODULE id="juce_audio_utils" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
+ <MODULE id="juce_core" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
+ <MODULE id="juce_data_structures" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
+ <MODULE id="juce_dsp" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
+ <MODULE id="juce_events" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
+ <MODULE id="juce_graphics" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
+ <MODULE id="juce_gui_basics" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
+ <MODULE id="juce_gui_extra" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
+ <MODULE id="juce_opengl" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
+ </MODULES>
+ <LIVE_SETTINGS>
+ <WINDOWS/>
+ <LINUX/>
+ </LIVE_SETTINGS>
+ <JUCEOPTIONS JUCE_JACK="1" JUCE_VST3_CAN_REPLACE_VST2="0" JUCE_STRICT_REFCOUNTEDPOINTER="1"
+ FOLEYS_SHOW_GUI_EDITOR_PALLETTE="0" JUCE_WEB_BROWSER="0"/>
+</JUCERPROJECT>
diff --git a/Plugin/build_linux.sh b/Plugin/build_linux.sh
@@ -0,0 +1,26 @@
+mkdir -p JuceLibraryCode
+cp -f linux_utils/AppConfig.h.in JuceLibraryCode/
+
+lv2uri="https://github.com/jatinchowdhury18/AnalogTapeModel"
+sed "s/_lv2uri_pattern_/${lv2uri//\//\\/}/g" JuceLibraryCode/AppConfig.h.in >JuceLibraryCode/AppConfig.h
+sed "s/_juce_target_/CHOWTapeModel/g" linux_utils/LV2.mak.in >LV2.mak
+
+# build Projucer
+(
+ cd Juce/extras/Projucer/Builds/LinuxMakefile
+ make
+)
+
+PJ=./Juce/extras/Projucer/Builds/LinuxMakefile/build/Projucer
+
+$PJ --set-global-search-path linux defaultJuceModulePath Juce/modules
+$PJ --set-global-search-path linux vstLegacyPath Juce/VST2_SDK
+$PJ --resave CHOWTapeModel.jucer
+echo "include ../../LV2.mak" >> Builds/LinuxMakefile/Makefile
+
+(
+ cd Builds/LinuxMakefile
+ CONFIG=Release make
+)
+
+rm LV2.mak
diff --git a/Plugin/linux_utils/AppConfig.h.in b/Plugin/linux_utils/AppConfig.h.in
@@ -0,0 +1,7 @@
+// [BEGIN_USER_CODE_SECTION]
+ #define JucePlugin_Build_LV2 1
+ #define JucePlugin_LV2URI "_lv2uri_pattern_"
+ #define JucePlugin_MaxNumInputChannels 2
+ #define JucePlugin_MaxNumOutputChannels 2
+
+// [END_USER_CODE_SECTION]
diff --git a/Plugin/linux_utils/LV2.mak.in b/Plugin/linux_utils/LV2.mak.in
@@ -0,0 +1,33 @@
+# -*- makefile -*-
+JUCE_TARGET := _juce_target_
+JUCE_TARGET_LV2 := $(JUCE_TARGET).so
+JUCE_OUTDIR_LV2 := $(JUCE_OUTDIR)/$(JUCE_TARGET).lv2
+JUCE_CFLAGS_LV2 := $(JUCE_CFLAGS_VST)
+JUCE_CPPFLAGS_LV2 := $(JUCE_CPPFLAGS_VST)
+JUCE_LDFLAGS_LV2 := $(JUCE_LDFLAGS_VST)
+
+all : LV2
+LV2 : $(JUCE_OUTDIR_LV2)/$(JUCE_TARGET_LV2)
+
+OBJECTS_LV2 := \
+ $(JUCE_OBJDIR)/include_juce_audio_plugin_client_LV2_.o
+
+$(JUCE_OBJDIR)/include_juce_audio_plugin_client_LV2_.o: ../../JuceLibraryCode/include_juce_audio_plugin_client_LV2.cpp
+ -$(V_AT)mkdir -p $(JUCE_OBJDIR)
+ @echo "Compiling include_juce_audio_plugin_client_LV2.cpp"
+ $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_LV2) $(JUCE_CFLAGS_LV2) -o "$@" -c "$<"
+
+$(JUCE_OUTDIR_LV2)/$(JUCE_TARGET_LV2) : check-pkg-config $(OBJECTS_LV2) $(RESOURCES) $(JUCE_OUTDIR)/$(JUCE_TARGET_SHARED_CODE)
+ @echo Linking "$(JUCE_TARGET) - LV2"
+ -$(V_AT)mkdir -p $(JUCE_BINDIR)
+ -$(V_AT)mkdir -p $(JUCE_LIBDIR)
+ -$(V_AT)mkdir -p $(JUCE_OUTDIR_LV2)
+ $(V_AT)$(CXX) -o $(JUCE_OUTDIR_LV2)/$(JUCE_TARGET_LV2) $(OBJECTS_LV2) $(JUCE_OUTDIR)/$(JUCE_TARGET_SHARED_CODE) $(JUCE_LDFLAGS) $(JUCE_LDFLAGS_LV2) $(RESOURCES) $(TARGET_ARCH)
+ python3 ../../linux_utils/generate-lv2-ttl.py $(JUCE_OUTDIR_LV2)/$(JUCE_TARGET_LV2)
+
+-include $(OBJECTS_LV2:%.o=%.d)
+
+check-pkg-config:
+ @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; }
+ @pkg-config --print-errors alsa freetype2 libcurl x11 xext xinerama
+
+\ No newline at end of file
diff --git a/Plugin/linux_utils/generate-lv2-ttl.py b/Plugin/linux_utils/generate-lv2-ttl.py
@@ -0,0 +1,25 @@
+#!/usr/bin/python3
+
+#
+# This python scripts invokes generates LV2 manifests.
+# It does so by loading the plugin and invoking the adequate entry point inside
+# the target directory.
+#
+
+import os
+import sys
+import ctypes
+
+if len(sys.argv) != 2:
+ sys.stderr.write('Please indicate the path to the LV2 shared library.\n')
+ sys.exit(1)
+
+dll_path = sys.argv[1]
+dll = ctypes.cdll.LoadLibrary(dll_path)
+
+dll_dir = os.path.dirname(dll_path)
+dll_filename = os.path.basename(dll_path)
+dll_basename = os.path.splitext(dll_filename)[0]
+
+os.chdir(dll_dir)
+dll.lv2_generate_ttl(ctypes.c_char_p(dll_basename.encode('utf-8')))
diff --git a/README.md b/README.md
@@ -29,6 +29,7 @@ CHOW Tape is currently available in the following formats:
- VST
- VST3
- AU
+ - LV2
- Standalone plugin
## Installation
@@ -39,9 +40,7 @@ If you would like to try the most recent builds (potentially unstable),
see [here](https://github.com/jatinchowdhury18/AnalogTapeModel/tree/master/Plugin/Bin).
If you need a build that is compatible with Mac OS Catalina, try
[this link](https://www.dropbox.com/s/n14b1ju8kofp71v/CHOWTape.zip).
-If you need an LV2 build, Konstantin Voinov has been kind enough to
-provide an [LV2 port](https://build.opensuse.org/package/show/home:kill_it:JUCE/CHOWTapeModel)
-on the OpenSUSE build server. If you prefer to build the plugin for yourself,
+If you need Linux builds, or if you prefer to build the plugin for yourself,
please see the [building instructions](https://github.com/jatinchowdhury18/AnalogTapeModel/blob/master/BUILDING.md).
Note for FL Studio users: If you're experiencing pops and click while using