AnalogTapeModel

Physical modelling signal processing for analog tape recording
Log | Files | Refs | Submodules | README | LICENSE

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:
M.gitignore | 1+
M.travis.yml | 56+++++++++++++++-----------------------------------------
MBUILDING.md | 63++++++++++++++++++++++++++++++++++++++++++---------------------
MPlugin/CHOWTapeModel.jucer | 345++++++++++++++++++++++++++++++++++++++++---------------------------------------
APlugin/build_linux.sh | 26++++++++++++++++++++++++++
APlugin/linux_utils/AppConfig.h.in | 7+++++++
APlugin/linux_utils/LV2.mak.in | 34++++++++++++++++++++++++++++++++++
APlugin/linux_utils/generate-lv2-ttl.py | 25+++++++++++++++++++++++++
MREADME.md | 5++---
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