├── mac
├── PkgInfo
├── audio-unit
│ ├── resource
│ │ ├── loop.wav
│ │ ├── plugin.icns
│ │ ├── Info.plist
│ │ ├── Info.appex.plist
│ │ └── Main.storyboard
│ ├── plugin.entitlements
│ ├── src
│ │ ├── AppDelegate.h
│ │ ├── ViewController.h
│ │ ├── AppDelegate.m
│ │ └── ViewController.m
│ ├── CMakeLists.txt
│ └── audiounitconfig.h
└── Info.plist
├── resource
├── version.png
├── background.png
├── src
│ └── design.psd
├── plugin.rc
└── plugin.uidesc
├── .gitignore
├── setup.bat
├── LICENSE
├── setup.sh
├── src
├── version.h
├── global.h
├── vstentry_vst2.cpp
├── allpass.cpp
├── comb.cpp
├── snd.h
├── bitcrusher.h
├── wavegenerator.h
├── paramids.h
├── audiobuffer.h
├── lowpassfilter.h
├── allpass.h
├── limiter.h
├── comb.h
├── tablepool.h
├── lowpassfilter.cpp
├── bitcrusher.cpp
├── util.h
├── limiter.cpp
├── tablepool.cpp
├── limiter.tcc
├── wavetable.h
├── wavetable.cpp
├── vstentry.cpp
├── ui
│ ├── controller.h
│ └── uimessagecontroller.h
├── audiobuffer.cpp
├── vst.h
├── calc.h
├── reverb.h
├── reverb.cpp
├── wavegenerator.cpp
├── plugin_process.h
├── plugin_process.tcc
└── plugin_process.cpp
├── README.md
└── CMakeLists.txt
/mac/PkgInfo:
--------------------------------------------------------------------------------
1 | APPLRegr
--------------------------------------------------------------------------------
/resource/version.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/igorski/darvaza/HEAD/resource/version.png
--------------------------------------------------------------------------------
/resource/background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/igorski/darvaza/HEAD/resource/background.png
--------------------------------------------------------------------------------
/resource/src/design.psd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/igorski/darvaza/HEAD/resource/src/design.psd
--------------------------------------------------------------------------------
/mac/audio-unit/resource/loop.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/igorski/darvaza/HEAD/mac/audio-unit/resource/loop.wav
--------------------------------------------------------------------------------
/mac/audio-unit/resource/plugin.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/igorski/darvaza/HEAD/mac/audio-unit/resource/plugin.icns
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | build
2 | vst3sdk
3 | Makefile
4 | CMakeCache.txt
5 | CMakeFiles
6 |
7 | .DS_Store
8 | Thumbs.db
9 |
10 | .vs
11 | .idea
12 | *.swp
13 | *.bak
14 |
--------------------------------------------------------------------------------
/mac/audio-unit/plugin.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.app-sandbox
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/setup.bat:
--------------------------------------------------------------------------------
1 | @echo off
2 | cls
3 |
4 | echo "Retrieving Steinberg VST3 SDK..."
5 | git clone --recursive https://github.com/steinbergmedia/vst3sdk.git --branch v3.7.11_build_10
6 |
7 | cd vst3sdk
8 | rmdir /Q /S build
9 | mkdir build
10 | cd build
11 |
12 | cmake.exe -G"Visual Studio 16 2019" ..
13 | cmake --build . --config Release
14 |
15 | cd ..
16 |
--------------------------------------------------------------------------------
/mac/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | NSHumanReadableCopyright
6 | ${MACOSX_BUNDLE_COPYRIGHT}
7 | CFBundleDevelopmentRegion
8 | English
9 | CFBundleExecutable
10 | ${MACOSX_BUNDLE_BUNDLE_NAME}
11 | CFBundleIconFile
12 |
13 | CFBundleIdentifier
14 | ${MACOSX_BUNDLE_GUI_IDENTIFIER}
15 | CFBundleInfoDictionaryVersion
16 | 6.0
17 | CFBundlePackageType
18 | BNDL
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${MACOSX_BUNDLE_BUNDLE_VERSION}
23 | CFBundleShortVersionString
24 | ${MACOSX_BUNDLE_SHORT_VERSION_STRING}
25 | CSResourcesFileMapped
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 Igor Zinken
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/setup.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | clear
3 |
4 | echo "Retrieving Steinberg VST3 SDK..."
5 | git clone --recursive https://github.com/steinbergmedia/vst3sdk.git --branch v3.7.11_build_10
6 |
7 | echo "--------------------------------"
8 | echo "Setting up Steinberg VST3 SDK..."
9 |
10 | cd vst3sdk
11 | rm -rf build
12 | mkdir build
13 | cd build
14 |
15 | echo "---------------------"
16 |
17 | # Parse arguments
18 |
19 | while [[ "$#" -gt 0 ]]; do
20 | case $1 in
21 | --platform) platform="$2"; shift ;;
22 | --coresdk) coresdk="$2"; shift ;;
23 | *) echo "Unknown parameter passed: $1"; exit 1 ;;
24 | esac
25 | shift
26 | done
27 |
28 | if [ "$platform" == "mac" ]; then
29 | echo "Building for macOS..."
30 | if [ "$coresdk" ]; then
31 | echo "Building with CoreAudio support. Library specified to be at $coresdk"
32 | FLAGS="-DSMTG_COREAUDIO_SDK_PATH=$coresdk"
33 | fi
34 | cmake -GXcode -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" ${FLAGS} ..
35 | else
36 | echo "Building for Linux..."
37 | cmake -DCMAKE_BUILD_TYPE=Release ..
38 | fi
39 |
40 | cmake --build . --config Release
--------------------------------------------------------------------------------
/src/version.h:
--------------------------------------------------------------------------------
1 | #ifndef __VERSION_HEADER__
2 | #define __VERSION_HEADER__
3 |
4 | #define INT_TO_STR(x) #x
5 |
6 | #define MAJOR_VERSION_INT PLUGIN_MAJOR_VERSION
7 | #define MAJOR_VERSION_STR INT_TO_STR(MAJOR_VERSION_INT)
8 |
9 | #define SUB_VERSION_INT PLUGIN_MINOR_VERSION
10 | #define SUB_VERSION_STR INT_TO_STR(SUB_VERSION_INT)
11 |
12 | #define RELEASE_NUMBER_INT PLUGIN_RELEASE_NUMBER
13 | #define RELEASE_NUMBER_STR INT_TO_STR(RELEASE_NUMBER_INT)
14 |
15 | #define BUILD_NUMBER_INT PLUGIN_BUILD_NUMBER
16 | #define BUILD_NUMBER_STR INT_TO_STR(PLUGIN_BUILD_NUMBER)
17 |
18 | // Version with build number (example "1.0.3.342")
19 | #define FULL_VERSION_STR MAJOR_VERSION_STR "." SUB_VERSION_STR "." RELEASE_NUMBER_STR "." BUILD_NUMBER_STR
20 |
21 | // Version without build number (example "1.0.3")
22 | #define VERSION_STR MAJOR_VERSION_STR "." SUB_VERSION_STR "." RELEASE_NUMBER_STR
23 |
24 | #define stringOriginalFilename "Darvaza.vst3"
25 | #define stringFileDescription "Darvaza plugin"
26 | #define stringCompanyName "igorski.nl\0"
27 | #define stringLegalCopyright #PLUGIN_COPYRIGHT
28 | #define stringLegalTrademarks "VST is a trademark of Steinberg Media Technologies GmbH"
29 |
30 | #endif
31 |
--------------------------------------------------------------------------------
/mac/audio-unit/resource/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIconFile
10 | plugin
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | 1.0.3
21 | CFBundleSignature
22 | ????
23 | CFBundleVersion
24 | 1
25 | LSMinimumSystemVersion
26 | $(MACOSX_DEPLOYMENT_TARGET)
27 | NSHumanReadableCopyright
28 | Copyright © 2019-2024 igorski.nl
29 | NSMainStoryboardFile
30 | Main
31 | NSPrincipalClass
32 | NSApplication
33 | SupportedNumChannels
34 | kSupportedNumChannels
35 |
36 |
37 |
--------------------------------------------------------------------------------
/src/global.h:
--------------------------------------------------------------------------------
1 | #ifndef __GLOBAL_HEADER__
2 | #define __GLOBAL_HEADER__
3 |
4 | #include "pluginterfaces/base/fplatform.h"
5 | #include "pluginterfaces/base/funknown.h"
6 |
7 | using namespace Steinberg;
8 |
9 | namespace Igorski {
10 | namespace VST {
11 |
12 | static const int ID = 97151821;
13 | static const char* NAME = "Darvaza";
14 | static const char* VENDOR = "igorski.nl";
15 |
16 | // generate unique UIDs for these (www.uuidgenerator.net is great for this)
17 |
18 | static const FUID PluginProcessorUID( 0x5F242E0B, 0x955D4A80, 0x85CF461F, 0xAAD2543F );
19 | static const FUID PluginWithSideChainProcessorUID( 0x955D4A80, 0x85CF461F, 0xAAD2543F, 0x5F242E0B );
20 | static const FUID PluginControllerUID( 0x85CF461F, 0xAAD2543F, 0x5F242E0B, 0x955D4A80 );
21 |
22 | extern float SAMPLE_RATE; // set upon initialization, see vst.cpp
23 |
24 | static const float PI = 3.141592653589793f;
25 | static const float TWO_PI = PI * 2.f;
26 |
27 | // These values are tuned to 44.1 kHz sample rate and will be
28 | // recalculated to match the host sample recalculated
29 |
30 | static const int NUM_COMBS = 8;
31 | static const int NUM_ALLPASSES = 4;
32 |
33 | static const int COMB_TUNINGS[ NUM_COMBS ] = { 1116, 1188, 1277, 1356, 1422, 1491, 1557, 1617 };
34 | static const int ALLPASS_TUNINGS[ NUM_ALLPASSES ] = { 556, 441, 341, 225 };
35 | }
36 | }
37 |
38 | #endif
39 |
--------------------------------------------------------------------------------
/src/vstentry_vst2.cpp:
--------------------------------------------------------------------------------
1 | /**
2 | * The MIT License (MIT)
3 | *
4 | * Copyright (c) 2020 Igor Zinken - https://www.igorski.nl
5 | *
6 | * Permission is hereby granted, free of charge, to any person obtaining a copy of
7 | * this software and associated documentation files (the "Software"), to deal in
8 | * the Software without restriction, including without limitation the rights to
9 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
10 | * the Software, and to permit persons to whom the Software is furnished to do so,
11 | * subject to the following conditions:
12 | *
13 | * The above copyright notice and this permission notice shall be included in all
14 | * copies or substantial portions of the Software.
15 | *
16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
18 | * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
19 | * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
20 | * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 | */
23 | #include "public.sdk/source/vst/vst2wrapper/vst2wrapper.h"
24 | #include "global.h"
25 |
26 | //------------------------------------------------------------------------
27 | ::AudioEffect* createEffectInstance (audioMasterCallback audioMaster)
28 | {
29 | return Steinberg::Vst::Vst2Wrapper::create( GetPluginFactory (), Igorski::VST::PluginProcessorUID, Igorski::VST::ID, audioMaster );
30 | }
31 |
--------------------------------------------------------------------------------
/resource/plugin.rc:
--------------------------------------------------------------------------------
1 | #include
2 | #include "../src/version.h"
3 |
4 | #define APSTUDIO_READONLY_SYMBOLS
5 |
6 | plugin.uidesc DATA "plugin.uidesc"
7 | background.png PNG "background.png"
8 | version.png PNG "version.png"
9 |
10 | /////////////////////////////////////////////////////////////////////////////
11 | // Version
12 | /////////////////////////////////////////////////////////////////////////////
13 | VS_VERSION_INFO VERSIONINFO
14 | FILEVERSION MAJOR_VERSION_INT,SUB_VERSION_INT,RELEASE_NUMBER_INT,BUILD_NUMBER_INT
15 | PRODUCTVERSION MAJOR_VERSION_INT,SUB_VERSION_INT,RELEASE_NUMBER_INT,BUILD_NUMBER_INT
16 | FILEFLAGSMASK 0x3fL
17 | #ifdef _DEBUG
18 | FILEFLAGS 0x1L
19 | #else
20 | FILEFLAGS 0x0L
21 | #endif
22 | FILEOS 0x40004L
23 | FILETYPE 0x1L
24 | FILESUBTYPE 0x0L
25 | BEGIN
26 | BLOCK "StringFileInfo"
27 | BEGIN
28 | BLOCK "040004e4"
29 | BEGIN
30 | VALUE "FileVersion", FULL_VERSION_STR"\0"
31 | VALUE "ProductVersion", FULL_VERSION_STR"\0"
32 | VALUE "OriginalFilename", "Darvaza.vst3\0"
33 | VALUE "FileDescription", stringFileDescription"\0"
34 | VALUE "InternalName", stringFileDescription"\0"
35 | VALUE "ProductName", stringFileDescription"\0"
36 | VALUE "CompanyName", stringCompanyName"\0"
37 | VALUE "LegalCopyright", stringLegalCopyright"\0"
38 | VALUE "LegalTrademarks", stringLegalTrademarks"\0"
39 | //VALUE "PrivateBuild", " \0"
40 | //VALUE "SpecialBuild", " \0"
41 | //VALUE "Comments", " \0"
42 | END
43 | END
44 | BLOCK "VarFileInfo"
45 | BEGIN
46 | VALUE "Translation", 0x400, 1252
47 | END
48 | END
49 |
--------------------------------------------------------------------------------
/src/allpass.cpp:
--------------------------------------------------------------------------------
1 | /**
2 | * The MIT License (MIT)
3 | *
4 | * Based on freeverb by Jezar at Dreampoint (June 2000)
5 | *
6 | * Permission is hereby granted, free of charge, to any person obtaining a copy of
7 | * this software and associated documentation files (the "Software"), to deal in
8 | * the Software without restriction, including without limitation the rights to
9 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
10 | * the Software, and to permit persons to whom the Software is furnished to do so,
11 | * subject to the following conditions:
12 | *
13 | * The above copyright notice and this permission notice shall be included in all
14 | * copies or substantial portions of the Software.
15 | *
16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
18 | * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
19 | * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
20 | * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 | */
23 | #include "allpass.h"
24 |
25 | namespace Igorski {
26 |
27 | AllPass::AllPass()
28 | {
29 | _bufIndex = 0;
30 | setFeedback( 0.5f );
31 | }
32 |
33 | void AllPass::setBuffer( float *buf, int size )
34 | {
35 | _buffer = buf;
36 | _bufSize = size;
37 | }
38 |
39 | void AllPass::mute()
40 | {
41 | for ( int i = 0; i < _bufSize; i++ ) {
42 | _buffer[ i ] = 0;
43 | }
44 | }
45 |
46 | float AllPass::getFeedback()
47 | {
48 | return _feedback;
49 | }
50 |
51 | void AllPass::setFeedback( float val )
52 | {
53 | _feedback = val;
54 | }
55 |
56 | }
57 |
--------------------------------------------------------------------------------
/src/comb.cpp:
--------------------------------------------------------------------------------
1 | /**
2 | * The MIT License (MIT)
3 | *
4 | * Based on freeverb by Jezar at Dreampoint (June 2000)
5 | *
6 | * Permission is hereby granted, free of charge, to any person obtaining a copy of
7 | * this software and associated documentation files (the "Software"), to deal in
8 | * the Software without restriction, including without limitation the rights to
9 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
10 | * the Software, and to permit persons to whom the Software is furnished to do so,
11 | * subject to the following conditions:
12 | *
13 | * The above copyright notice and this permission notice shall be included in all
14 | * copies or substantial portions of the Software.
15 | *
16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
18 | * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
19 | * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
20 | * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 | */
23 | #include "comb.h"
24 |
25 | namespace Igorski {
26 |
27 | Comb::Comb()
28 | {
29 | _filterStore = 0;
30 | _bufIndex = 0;
31 | }
32 |
33 | void Comb::setBuffer( float *buf, int size )
34 | {
35 | _buffer = buf;
36 | _bufSize = size;
37 | }
38 |
39 | void Comb::mute()
40 | {
41 | for ( int i = 0; i < _bufSize; i++ ) {
42 | _buffer[ i ] = 0;
43 | }
44 | }
45 |
46 | float Comb::getDamp()
47 | {
48 | return _damp1;
49 | }
50 |
51 | void Comb::setDamp( float val )
52 | {
53 | _damp1 = val;
54 | _damp2 = 1 - val;
55 | }
56 |
57 | float Comb::getFeedback()
58 | {
59 | return _feedback;
60 | }
61 |
62 | void Comb::setFeedback( float val )
63 | {
64 | _feedback = val;
65 | }
66 |
67 | }
68 |
--------------------------------------------------------------------------------
/src/snd.h:
--------------------------------------------------------------------------------
1 | /**
2 | * The MIT License (MIT)
3 | *
4 | * Copyright (c) 2022 Igor Zinken - https://www.igorski.nl
5 | *
6 | * Adaptation of source provided in the JUCE library:
7 | * Copyright (c) 2020 - Raw Material Software Limited
8 | *
9 | * JUCE is an open source library subject to commercial or open-source
10 | * licensing.
11 | *
12 | * The code included in this file is provided under the terms of the ISC license
13 | * http://www.isc.org/downloads/software-support-policy/isc-license. Permission
14 | * To use, copy, modify, and/or distribute this software for any purpose with or
15 | * without fee is hereby granted provided that the above copyright notice and
16 | * this permission notice appear in all copies.
17 | *
18 | * JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
19 | * EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
20 | * DISCLAIMED.
21 | */
22 | #ifndef __SND_H_INCLUDED__
23 | #define __SND_H_INCLUDED__
24 |
25 | #ifdef __SSE__
26 | #define USE_SSE_INTRINSICS
27 | #endif
28 | #ifdef __SSE2__
29 | #define USE_SSE_INTRINSICS
30 | #endif
31 |
32 | #ifdef USE_SSE_INTRINSICS
33 | #include
34 | #endif
35 |
36 | //==============================================================================
37 | /**
38 | Helper class providing an RAII-based mechanism for temporarily disabling
39 | denormals on your CPU.
40 | */
41 | class ScopedNoDenormals
42 | {
43 | public:
44 | inline ScopedNoDenormals() noexcept
45 | {
46 | #ifdef USE_SSE_INTRINSICS
47 | mxcsr = _mm_getcsr();
48 | _mm_setcsr (mxcsr | 0x8040); // add the DAZ and FZ bits
49 | #endif
50 | }
51 |
52 |
53 | inline ~ScopedNoDenormals() noexcept
54 | {
55 | #ifdef USE_SSE_INTRINSICS
56 | _mm_setcsr (mxcsr);
57 | #endif
58 | }
59 |
60 | private:
61 | #ifdef USE_SSE_INTRINSICS
62 | unsigned int mxcsr;
63 | #endif
64 | };
65 |
66 | #endif
67 |
--------------------------------------------------------------------------------
/mac/audio-unit/resource/Info.appex.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleDisplayName
8 | AUv3WrapperExtension
9 | CFBundleExecutable
10 | $(EXECUTABLE_NAME)
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | XPC!
19 | CFBundleShortVersionString
20 | 1.0
21 | CFBundleVersion
22 | 1
23 | NSExtension
24 |
25 | NSExtensionAttributes
26 |
27 | NSExtensionServiceRoleType
28 | NSExtensionServiceRoleTypeEditor
29 | AudioComponents
30 |
31 |
32 | description
33 | kAUcomponentDescription
34 | manufacturer
35 | kAUcomponentManufacturer1
36 | name
37 | kAUcomponentName
38 | sandboxSafe
39 |
40 | subtype
41 | kAUcomponentSubType1
42 | tags
43 |
44 | kAUcomponentTag
45 |
46 | type
47 | kAUcomponentType1
48 | version
49 | kAUcomponentVersion
50 |
51 |
52 |
53 | NSExtensionPointIdentifier
54 | com.apple.AudioUnit-UI
55 | NSExtensionPrincipalClass
56 | AUv3WrapperViewController
57 |
58 | SupportedNumChannels
59 | kSupportedNumChannels
60 |
61 |
62 |
--------------------------------------------------------------------------------
/src/bitcrusher.h:
--------------------------------------------------------------------------------
1 | /**
2 | * The MIT License (MIT)
3 | *
4 | * Copyright (c) 2013-2022 Igor Zinken - https://www.igorski.nl
5 | *
6 | * Permission is hereby granted, free of charge, to any person obtaining a copy of
7 | * this software and associated documentation files (the "Software"), to deal in
8 | * the Software without restriction, including without limitation the rights to
9 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
10 | * the Software, and to permit persons to whom the Software is furnished to do so,
11 | * subject to the following conditions:
12 | *
13 | * The above copyright notice and this permission notice shall be included in all
14 | * copies or substantial portions of the Software.
15 | *
16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
18 | * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
19 | * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
20 | * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 | */
23 | #ifndef __BITCRUSHER_H_INCLUDED__
24 | #define __BITCRUSHER_H_INCLUDED__
25 |
26 | namespace Igorski {
27 | class BitCrusher {
28 |
29 | public:
30 | BitCrusher( float amount, float inputMix, float outputMix );
31 | ~BitCrusher();
32 |
33 | void process( float* inBuffer, int bufferSize );
34 |
35 | void setAmount( float value ); // range between -1 to +1
36 | void setInputMix( float value );
37 | void setOutputMix( float value );
38 |
39 | inline bool isActive() {
40 | return _bits != 16;
41 | }
42 |
43 | private:
44 | int _bits; // we scale the amount to integers in the 1-16 range
45 | float _amount;
46 | float _inputMix;
47 | float _outputMix;
48 |
49 | void calcBits();
50 | };
51 | }
52 |
53 | #endif
54 |
--------------------------------------------------------------------------------
/src/wavegenerator.h:
--------------------------------------------------------------------------------
1 | /**
2 | * The MIT License (MIT)
3 | *
4 | * Copyright (c) 2014-2022 Igor Zinken - https://www.igorski.nl
5 | *
6 | * wave table generation adapted from sources by Matt @ hackmeopen.com
7 | *
8 | * Permission is hereby granted, free of charge, to any person obtaining a copy of
9 | * this software and associated documentation files (the "Software"), to deal in
10 | * the Software without restriction, including without limitation the rights to
11 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
12 | * the Software, and to permit persons to whom the Software is furnished to do so,
13 | * subject to the following conditions:
14 | *
15 | * The above copyright notice and this permission notice shall be included in all
16 | * copies or substantial portions of the Software.
17 | *
18 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
20 | * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
21 | * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
22 | * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
23 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24 | */
25 | #ifndef __WAVEGENERATOR_H_INCLUDED__
26 | #define __WAVEGENERATOR_H_INCLUDED__
27 |
28 | #include "global.h"
29 | #include "wavetable.h"
30 |
31 | namespace Igorski {
32 | namespace WaveGenerator
33 | {
34 | enum WaveForms {
35 | SINE,
36 | TRIANGLE,
37 | SAWTOOTH,
38 | SQUARE
39 | };
40 |
41 | // generate a WaveTable for given waveformType
42 | // NOTE : wave table generation has high CPU demands
43 | // instead of doing this during live audio synthesis, it is
44 | // better to precache the WaveTables upon application start
45 | // (also see TablePool for maintaining the cache)
46 |
47 | extern WaveTable* generate( WaveForms waveformType );
48 | }
49 | } // E.O namespace Igorski
50 |
51 | #endif
52 |
--------------------------------------------------------------------------------
/src/paramids.h:
--------------------------------------------------------------------------------
1 | /**
2 | * The MIT License (MIT)
3 | *
4 | * Copyright (c) 2020-2022 Igor Zinken - https://www.igorski.nl
5 | *
6 | * Permission is hereby granted, free of charge, to any person obtaining a copy of
7 | * this software and associated documentation files (the "Software"), to deal in
8 | * the Software without restriction, including without limitation the rights to
9 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
10 | * the Software, and to permit persons to whom the Software is furnished to do so,
11 | * subject to the following conditions:
12 | *
13 | * The above copyright notice and this permission notice shall be included in all
14 | * copies or substantial portions of the Software.
15 | *
16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
18 | * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
19 | * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
20 | * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 | */
23 | #ifndef __PARAMIDS_HEADER__
24 | #define __PARAMIDS_HEADER__
25 |
26 | enum
27 | {
28 | // ids for all visual controls
29 | // these identifiers are mapped to the UI in plugin.uidesc
30 | // and consumed by controller.cpp to update the model
31 |
32 | // --- AUTO-GENERATED START
33 | kOddSpeedId = 0, // Odd channel speed
34 | kEvenSpeedId = 1, // Even channel speed
35 | kLinkGatesId = 2, // Link gates
36 | kWaveformId = 3, // Door
37 | kResampleRateId = 4, // Regret
38 | kPlaybackRateId = 5, // Sorrow
39 | kReverbId = 6, // Dwell
40 | kHarmonizeId = 7, // Weep
41 | kReverseId = 8, // Recast
42 | kBitDepthId = 9, // Torture
43 | kRandomSpeedId = 10, // Randomize closing speed
44 | kDryMixId = 11, // Entry
45 |
46 | // --- AUTO-GENERATED END
47 |
48 | kBypassId, // bypass process
49 | kVuPPMId // for the Vu value return to host
50 | };
51 |
52 | #endif
53 |
--------------------------------------------------------------------------------
/src/audiobuffer.h:
--------------------------------------------------------------------------------
1 | /**
2 | * The MIT License (MIT)
3 | *
4 | * Copyright (c) 2013-2018 Igor Zinken - https://www.igorski.nl
5 | *
6 | * Permission is hereby granted, free of charge, to any person obtaining a copy of
7 | * this software and associated documentation files (the "Software"), to deal in
8 | * the Software without restriction, including without limitation the rights to
9 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
10 | * the Software, and to permit persons to whom the Software is furnished to do so,
11 | * subject to the following conditions:
12 | *
13 | * The above copyright notice and this permission notice shall be included in all
14 | * copies or substantial portions of the Software.
15 | *
16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
18 | * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
19 | * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
20 | * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 | */
23 | #ifndef __AUDIOBUFFER_H_INCLUDED__
24 | #define __AUDIOBUFFER_H_INCLUDED__
25 |
26 | #include "global.h"
27 | #include
28 |
29 | /**
30 | * An AudioBuffer represents multiple channels of audio
31 | * each of equal buffer length.
32 | * AudioBuffer has convenience methods for cloning, silencing and mixing
33 | */
34 | class AudioBuffer
35 | {
36 | public:
37 | AudioBuffer( int aAmountOfChannels, int aBufferSize );
38 | ~AudioBuffer();
39 |
40 | int amountOfChannels;
41 | int bufferSize;
42 | bool loopeable;
43 |
44 | float* getBufferForChannel( int aChannelNum );
45 | int mergeBuffers( AudioBuffer* aBuffer, int aReadOffset, int aWriteOffset, float aMixVolume );
46 | void silenceBuffers();
47 | void adjustBufferVolumes( float volume );
48 | bool isSilent();
49 | AudioBuffer* clone();
50 |
51 | protected:
52 | std::vector* _buffers;
53 | };
54 |
55 | #endif
56 |
--------------------------------------------------------------------------------
/src/lowpassfilter.h:
--------------------------------------------------------------------------------
1 | /**
2 | * The MIT License (MIT)
3 | *
4 | * Copyright (c) 2020-2022 Igor Zinken - https://www.igorski.nl
5 | *
6 | * Adaptation of source provided in the JUCE library:
7 | * Copyright (c) 2020 - Raw Material Software Limited
8 | *
9 | * JUCE is an open source library subject to commercial or open-source
10 | * licensing.
11 | *
12 | * The code included in this file is provided under the terms of the ISC license
13 | * http://www.isc.org/downloads/software-support-policy/isc-license. Permission
14 | * To use, copy, modify, and/or distribute this software for any purpose with or
15 | * without fee is hereby granted provided that the above copyright notice and
16 | * this permission notice appear in all copies.
17 | *
18 | * JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
19 | * EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
20 | * DISCLAIMED.
21 | */
22 | #ifndef __LOWPASSFILTER_H_INCLUDED__
23 | #define __LOWPASSFILTER_H_INCLUDED__
24 |
25 | #include
26 |
27 | namespace Igorski {
28 | class LowPassFilter
29 | {
30 | const float SQRT_TWO = sqrt( 2 );
31 |
32 | public:
33 | LowPassFilter();
34 | ~LowPassFilter();
35 |
36 | void setRatio( float frequencyRatio );
37 | void setFilterCoefficients( float c1, float c2, float c3, float c4, float c5, float c6 );
38 | void applyFilter( float* samples, int bufferSize );
39 | void resetFilter();
40 |
41 | inline float applySingle( float sample ) {
42 | float out = coefficients[ 0 ] * sample
43 | + coefficients[ 1 ] * x1
44 | + coefficients[ 2 ] * x2
45 | - coefficients[ 4 ] * y1
46 | - coefficients[ 5 ] * y2;
47 |
48 | x2 = x1;
49 | x1 = sample;
50 | y2 = y1;
51 | y1 = out;
52 |
53 | // catch those pesky denormals
54 | return ( fabs( out ) < 1.0e-10 ) ? 0.0f : out;
55 | }
56 |
57 | private:
58 | float coefficients[ 6 ];
59 | float x1 = 0.f;
60 | float x2 = 0.f;
61 | float y1 = 0.f;
62 | float y2 = 0.f;
63 | };
64 | }
65 |
66 | #endif
67 |
--------------------------------------------------------------------------------
/src/allpass.h:
--------------------------------------------------------------------------------
1 | /**
2 | * The MIT License (MIT)
3 | *
4 | * Based on freeverb by Jezar at Dreampoint (June 2000)
5 | *
6 | * Permission is hereby granted, free of charge, to any person obtaining a copy of
7 | * this software and associated documentation files (the "Software"), to deal in
8 | * the Software without restriction, including without limitation the rights to
9 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
10 | * the Software, and to permit persons to whom the Software is furnished to do so,
11 | * subject to the following conditions:
12 | *
13 | * The above copyright notice and this permission notice shall be included in all
14 | * copies or substantial portions of the Software.
15 | *
16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
18 | * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
19 | * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
20 | * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 | */
23 | #ifndef __ALLPASS_H_INCLUDED__
24 | #define __ALLPASS_H_INCLUDED__
25 |
26 | #include "global.h"
27 | #include "calc.h"
28 |
29 | using namespace Steinberg;
30 |
31 | namespace Igorski {
32 | class AllPass
33 | {
34 | public:
35 | AllPass();
36 | void setBuffer( float *buf, int size );
37 | inline float process( float input )
38 | {
39 | float output;
40 | float bufout = _buffer[ _bufIndex ];
41 | undenormalise( bufout );
42 |
43 | output = -input + bufout;
44 | _buffer[ _bufIndex ] = input + ( bufout * _feedback );
45 |
46 | if ( ++_bufIndex >= _bufSize ) {
47 | _bufIndex = 0;
48 | }
49 | return output;
50 | }
51 | void mute();
52 | float getFeedback();
53 | void setFeedback( float val );
54 |
55 | private:
56 | float _feedback;
57 | float* _buffer;
58 | int _bufSize;
59 | int _bufIndex;
60 | };
61 | }
62 | #endif
63 |
--------------------------------------------------------------------------------
/mac/audio-unit/src/AppDelegate.h:
--------------------------------------------------------------------------------
1 | //-----------------------------------------------------------------------------
2 | // Project : VST SDK
3 | //
4 | // Category : Helpers
5 | // Filename :
6 | // Created by : Steinberg, 07/2017.
7 | // Description : VST 3 AUv3Wrapper
8 | //
9 | //-----------------------------------------------------------------------------
10 | // LICENSE
11 | // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved
12 | //-----------------------------------------------------------------------------
13 | // Redistribution and use in source and binary forms, with or without modification,
14 | // are permitted provided that the following conditions are met:
15 | //
16 | // * Redistributions of source code must retain the above copyright notice,
17 | // this list of conditions and the following disclaimer.
18 | // * Redistributions in binary form must reproduce the above copyright notice,
19 | // this list of conditions and the following disclaimer in the documentation
20 | // and/or other materials provided with the distribution.
21 | // * Neither the name of the Steinberg Media Technologies nor the names of its
22 | // contributors may be used to endorse or promote products derived from this
23 | // software without specific prior written permission.
24 | //
25 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
26 | // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
27 | // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
28 | // IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
29 | // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30 | // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
31 | // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
32 | // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
33 | // OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
34 | // OF THE POSSIBILITY OF SUCH DAMAGE.
35 | //-----------------------------------------------------------------------------
36 |
37 | #import
38 |
39 | @interface AppDelegate : NSObject
40 | @end
41 |
--------------------------------------------------------------------------------
/mac/audio-unit/src/ViewController.h:
--------------------------------------------------------------------------------
1 | //-----------------------------------------------------------------------------
2 | // Project : VST SDK
3 | //
4 | // Category : Helpers
5 | // Filename :
6 | // Created by : Steinberg, 07/2017.
7 | // Description : VST 3 AUv3Wrapper
8 | //
9 | //-----------------------------------------------------------------------------
10 | // LICENSE
11 | // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved
12 | //-----------------------------------------------------------------------------
13 | // Redistribution and use in source and binary forms, with or without modification,
14 | // are permitted provided that the following conditions are met:
15 | //
16 | // * Redistributions of source code must retain the above copyright notice,
17 | // this list of conditions and the following disclaimer.
18 | // * Redistributions in binary form must reproduce the above copyright notice,
19 | // this list of conditions and the following disclaimer in the documentation
20 | // and/or other materials provided with the distribution.
21 | // * Neither the name of the Steinberg Media Technologies nor the names of its
22 | // contributors may be used to endorse or promote products derived from this
23 | // software without specific prior written permission.
24 | //
25 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
26 | // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
27 | // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
28 | // IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
29 | // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30 | // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
31 | // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
32 | // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
33 | // OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
34 | // OF THE POSSIBILITY OF SUCH DAMAGE.
35 | //-----------------------------------------------------------------------------
36 |
37 | #import
38 |
39 | @interface ViewController : NSViewController
40 |
41 | @end
42 |
43 |
44 |
--------------------------------------------------------------------------------
/mac/audio-unit/CMakeLists.txt:
--------------------------------------------------------------------------------
1 |
2 | include(SMTG_AddVST3AuV3)
3 |
4 | function(create_audio_unit vst3_target)
5 | set(audio_unit_src_dir ${CMAKE_CURRENT_SOURCE_DIR}/mac/audio-unit)
6 |
7 | set(au_app_sources
8 | ${audio_unit_src_dir}/src/ViewController.m
9 | ${audio_unit_src_dir}/src/ViewController.h
10 | ${audio_unit_src_dir}/src/AppDelegate.m
11 | ${audio_unit_src_dir}/src/AppDelegate.h
12 | ${audio_unit_src_dir}/audiounitconfig.h
13 | )
14 |
15 | set(au_app_ui_resources
16 | ${audio_unit_src_dir}/resource/Main.storyboard
17 | ${audio_unit_src_dir}/resource/plugin.icns
18 | ${audio_unit_src_dir}/resource/loop.wav
19 | )
20 |
21 | # these redefine values set in SMTG_AddVST3AuV3.cmake ---
22 | set(public_sdk_SOURCE_DIR ${VST3_SDK_ROOT}/public.sdk)
23 | set(auv3wrappermacos_sources
24 | ${VST3_SDK_ROOT}/public.sdk/source/vst/auv3wrapper/AUv3WrappermacOS/main.mm
25 | )
26 | set(auv3wrappermacosextension_sources
27 | ${VST3_SDK_ROOT}/public.sdk/source/vst/auv3wrapper/Shared/AUv3WrapperFactory.mm
28 | ${VSTSDK_PLUGIN_SOURCE}
29 | )
30 | # --- E.O. SMTG_*.cmake overrides
31 |
32 | set(au_target ${target}_auv3)
33 |
34 | smtg_add_auv3_app(
35 | ${au_target}
36 | "macOS"
37 | "Darvaza AUV3"
38 | "nl.igorski.vst.${target}"
39 | "${audio_unit_src_dir}/audiounitconfig.h"
40 | "${audio_unit_src_dir}/plugin.entitlements"
41 | "${au_app_sources}"
42 | "${au_app_ui_resources}"
43 | "${audio_unit_src_dir}/resource/Info.plist"
44 | "${audio_unit_src_dir}/resource/Info.appex.plist"
45 | ${vst3_target}
46 | )
47 |
48 | #exposes auv3wrappermacos
49 | target_link_directories(${au_target}_appextension_macos PRIVATE "${VST3_SDK_ROOT}/build/lib")
50 | target_link_directories(${au_target} PRIVATE "${VST3_SDK_ROOT}/build/lib")
51 |
52 | target_link_libraries(${au_target}
53 | PUBLIC
54 | base
55 | pluginterfaces
56 | sdk
57 | sdk_common
58 | sdk_hosting
59 | )
60 |
61 | target_link_libraries(${au_target}_appextension_macos
62 | PUBLIC
63 | base
64 | pluginterfaces
65 | sdk
66 | sdk_hosting
67 | )
68 | endfunction()
--------------------------------------------------------------------------------
/src/limiter.h:
--------------------------------------------------------------------------------
1 | /**
2 | * Ported from mdaLimiterProcessor.h
3 | * Created by Arne Scheffler on 6/14/08.
4 | *
5 | * mda VST Plug-ins
6 | *
7 | * Copyright (c) 2008 Paul Kellett
8 | *
9 | * Permission is hereby granted, free of charge, to any person obtaining a copy of
10 | * this software and associated documentation files (the "Software"), to deal in
11 | * the Software without restriction, including without limitation the rights to
12 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
13 | * the Software, and to permit persons to whom the Software is furnished to do so,
14 | * subject to the following conditions:
15 | *
16 | * The above copyright notice and this permission notice shall be included in all
17 | * copies or substantial portions of the Software.
18 | *
19 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
21 | * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
22 | * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
23 | * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
24 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 | */
26 | #ifndef __LIMITER_H_INCLUDED__
27 | #define __LIMITER_H_INCLUDED__
28 |
29 | #include "audiobuffer.h"
30 | #include
31 |
32 | class Limiter
33 | {
34 | public:
35 | Limiter();
36 | Limiter( float attackMs, float releaseMs, float thresholdDb );
37 | ~Limiter();
38 |
39 | template
40 | void process( SampleType** outputBuffer, int bufferSize, int numOutChannels );
41 |
42 | void setAttack( float attackMs );
43 | void setRelease( float releaseMs );
44 | void setThreshold( float thresholdDb );
45 |
46 | float getLinearGR();
47 |
48 | protected:
49 | void init( float attackMs, float releaseMs, float thresholdDb );
50 | void recalculate();
51 |
52 | float pTresh; // in dB, -20 - 20
53 | float pTrim;
54 | float pAttack; // in microseconds
55 | float pRelease; // in ms
56 | float pKnee;
57 |
58 | float thresh, gain, att, rel, trim;
59 | };
60 |
61 | #include "limiter.tcc"
62 |
63 | #endif
64 |
--------------------------------------------------------------------------------
/src/comb.h:
--------------------------------------------------------------------------------
1 | /**
2 | * The MIT License (MIT)
3 | *
4 | * Based on freeverb by Jezar at Dreampoint (June 2000)
5 | *
6 | * Permission is hereby granted, free of charge, to any person obtaining a copy of
7 | * this software and associated documentation files (the "Software"), to deal in
8 | * the Software without restriction, including without limitation the rights to
9 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
10 | * the Software, and to permit persons to whom the Software is furnished to do so,
11 | * subject to the following conditions:
12 | *
13 | * The above copyright notice and this permission notice shall be included in all
14 | * copies or substantial portions of the Software.
15 | *
16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
18 | * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
19 | * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
20 | * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 | */
23 | #ifndef __COMB_H_INCLUDED__
24 | #define __COMB_H_INCLUDED__
25 |
26 | #include "global.h"
27 | #include "calc.h"
28 |
29 | using namespace Steinberg;
30 |
31 | namespace Igorski {
32 | class Comb
33 | {
34 | public:
35 | Comb();
36 | void setBuffer( float *buf, int size );
37 | inline float process( float input )
38 | {
39 | float output = _buffer[ _bufIndex ];
40 | undenormalise( output );
41 |
42 | _filterStore = ( output * _damp2 ) + ( _filterStore * _damp1 );
43 | undenormalise( _filterStore );
44 |
45 | _buffer[_bufIndex] = input + ( _filterStore * _feedback );
46 | if ( ++_bufIndex >= _bufSize ) {
47 | _bufIndex = 0;
48 | }
49 | return output;
50 | }
51 | void mute();
52 | float getDamp();
53 | void setDamp( float val );
54 | float getFeedback();
55 | void setFeedback( float val );
56 |
57 | private:
58 | float _feedback;
59 | float _filterStore;
60 | float _damp1;
61 | float _damp2;
62 | float* _buffer;
63 | int _bufSize;
64 | int _bufIndex;
65 | };
66 | }
67 | #endif
68 |
--------------------------------------------------------------------------------
/mac/audio-unit/src/AppDelegate.m:
--------------------------------------------------------------------------------
1 | //-----------------------------------------------------------------------------
2 | // Project : VST SDK
3 | //
4 | // Category : Helpers
5 | // Filename :
6 | // Created by : Steinberg, 07/2017.
7 | // Description : VST 3 AUv3Wrapper
8 | //
9 | //-----------------------------------------------------------------------------
10 | // LICENSE
11 | // (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved
12 | //-----------------------------------------------------------------------------
13 | // Redistribution and use in source and binary forms, with or without modification,
14 | // are permitted provided that the following conditions are met:
15 | //
16 | // * Redistributions of source code must retain the above copyright notice,
17 | // this list of conditions and the following disclaimer.
18 | // * Redistributions in binary form must reproduce the above copyright notice,
19 | // this list of conditions and the following disclaimer in the documentation
20 | // and/or other materials provided with the distribution.
21 | // * Neither the name of the Steinberg Media Technologies nor the names of its
22 | // contributors may be used to endorse or promote products derived from this
23 | // software without specific prior written permission.
24 | //
25 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
26 | // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
27 | // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
28 | // IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
29 | // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30 | // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
31 | // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
32 | // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
33 | // OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
34 | // OF THE POSSIBILITY OF SUCH DAMAGE.
35 | //-----------------------------------------------------------------------------
36 |
37 | #import "AppDelegate.h"
38 |
39 | @implementation AppDelegate
40 |
41 | - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
42 | }
43 |
44 | - (void)applicationWillTerminate:(NSNotification *)aNotification {
45 | }
46 |
47 | - (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender
48 | {
49 | return YES;
50 | }
51 |
52 | @end
53 |
--------------------------------------------------------------------------------
/mac/audio-unit/audiounitconfig.h:
--------------------------------------------------------------------------------
1 | // The specific variant of the Audio Unit app extension.
2 | // The four possible types and their values are:
3 | // Effect (aufx), Generator (augn), Instrument (aumu), and Music Effect (aufm)
4 | #define kAUcomponentType 'aufx'
5 | #define kAUcomponentType1 aufx
6 |
7 | // A subtype code (unique ID) for the audio unit, such as gav3.
8 | // This value must be exactly 4 alphanumeric characters
9 | #define kAUcomponentSubType 'trem'
10 | #define kAUcomponentSubType1 trem
11 |
12 | // A manufacturer code for the audio unit, such as Aaud.
13 | // This value must be exactly 4 alphanumeric characters
14 | #define kAUcomponentManufacturer 'IGOR'
15 | #define kAUcomponentManufacturer1 IGOR
16 |
17 | // A product name for the audio unit
18 | #define kAUcomponentDescription AUv3WrapperExtension
19 |
20 | // The full name of the audio unit.
21 | // This is derived from the manufacturer and description key values
22 | #define kAUcomponentName Igorski: Darvaza
23 |
24 | // Displayed Tags
25 | #define kAUcomponentTag Effects
26 |
27 | // A version number for the Audio Unit app extension (decimal value of hexadecimal representation with zeros between subversions)
28 | // Hexadecimal indexes representing: [0] = main version, [1] = 0 = dot, [2] = sub version, [3] = 0 = dot, [4] = sub-sub version,
29 | // e.g. 1.0.0 == 0x10000 == 65536, 1.2.3 = 0x10203 = 66051
30 | // needs to correspond with semver version in Info.plist
31 | #define kAUcomponentVersion 65539
32 |
33 | // Supported number of channels of your audio unit.
34 | // Integer indexes representing: [0] = input count, [1] = output count, [2] = 2nd input count,
35 | // [3]=2nd output count, etc.
36 | // e.g. 1122 == config1: [mono input, mono output], config2: [stereo input, stereo output]
37 | // see channelCapabilities for discussion
38 | #define kSupportedNumChannels 1122
39 |
40 | // The preview audio file name.
41 | // To add your own custom audio file (for standalone effects), add an audio file to the project (AUv3WrappermacOS and AUv3WrapperiOS targets) and
42 | // enter the file name here
43 | #define kAudioFileName "loop"
44 |
45 | // The preview audio file format.
46 | // To add your own custom audio file (for standalone effects), add an audio file to the project (AUv3WrappermacOS and AUv3WrapperiOS targets) and
47 | // enter the file format here
48 | #define kAudioFileFormat "wav"
49 |
50 | // componentFlags (leave at 0)
51 | #define kAUcomponentFlags 0
52 |
53 | // componentFlagsMask (leave at 0)
54 | #define kAUcomponentFlagsMask 0
55 |
56 | // class name for the application delegate
57 | #define kAUapplicationDelegateClassName AppDelegate
58 |
--------------------------------------------------------------------------------
/src/tablepool.h:
--------------------------------------------------------------------------------
1 | /**
2 | * The MIT License (MIT)
3 | *
4 | * Copyright (c) 2014-2022 Igor Zinken - https://www.igorski.nl
5 | *
6 | * Permission is hereby granted, free of charge, to any person obtaining a copy of
7 | * this software and associated documentation files (the "Software"), to deal in
8 | * the Software without restriction, including without limitation the rights to
9 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
10 | * the Software, and to permit persons to whom the Software is furnished to do so,
11 | * subject to the following conditions:
12 | *
13 | * The above copyright notice and this permission notice shall be included in all
14 | * copies or substantial portions of the Software.
15 | *
16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
18 | * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
19 | * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
20 | * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 | */
23 | #ifndef __TABLEPOOL_H_INCLUDED__
24 | #define __TABLEPOOL_H_INCLUDED__
25 |
26 | #include "wavetable.h"
27 | #include "wavegenerator.h"
28 | #include