Giter Club home page Giter Club logo

vstsid's Introduction

VSTSID

A VST plug-in version of the WebSID Commodore 64 synthesizer.

If you want to hear what it sounds like, you can view the example videos.

On compatibility

Build as VST 2.4

VST3 is great and all, but support across DAW's is poor (looking at a certain popular German product). You can however build as a VST2.4 plugin and enjoy it on a wider range of host platforms.

However: as of SDK 3.6.11, Steinberg no longer packages the required ./pluginterfaces/vst2.x-folder inside the vst3sdk folder. If you wish to build a VST2 plugin, copying the folder from an older SDK version could work (verified 3.6.9. vst2.x folders to work with SDK 3.7.6), though be aware that you need a license to target VST2. You can view Steinbergs rationale on this decision here.

Once your SDK is "setup" for VST2, simply uncomment the following line in CMakeLists.txt:

set(SMTG_CREATE_VST2_VERSION "Use VST2" ON)

And rename the generated plugin extension from .vst3 to .vst (or .dll on Windows). Alternatively, pass "vst2" as an argument to the build.sh and build.bat files without having to edit the make file or rename the generated VST manually. E.g.:

sh build.sh vst2

Compiling for both 32-bit and 64-bit architectures

Depending on your host software having 32-bit or 64-bit support (either Intel or M1), you can best compile for a wider range of architectures. To do so, replace all invocations of cmake in this README with the following:

macOS:

cmake -"DCMAKE_OSX_ARCHITECTURES=x86_64;arm64;i1386" ..

Which will allow you to compile a single, "fat" binary that supports all architectures (Intel, M1 and legacy 32-bit Intel).

Windows:

cmake.exe -G "Visual Studio 16 2019" -A Win64 -S .. -B "build64"
cmake.exe --build . --config Release

cmake.exe -G "Visual Studio 16 2019" -A Win32 -S .. -B "build32"
cmake.exe --build . --config Release

Which is a little more cumbersome as you compile separate binaries for the separate architectures.

Note that the above also needs to be done when building the Steinberg SDK (which for the Windows build implies that a separate build is created for each architecture).

While macOS has been fully 64-bit for the past versions, building for 32-bit provides the best backward compatibility for older OS versions. And musicians are known to keep working systems at the cost of not running an up to date system...

Build instructions

The project uses CMake to generate the Makefiles and has been built and tested on macOS, Windows 10 and Linux (Ubuntu).

Environment setup

Apart from requiring CMake and a C(++) compiler such as Clang or MSVC, the only other dependency is the VST SDK from Steinberg (the projects latest update requires SDK version 3.7.10+).

Be aware that prior to building the plugin, the Steinberg SDK needs to be built from source as well. Following Steinbergs guidelines, the build target should be a /build-subfolder of the /vst3sdk-folder. To generate a release build of the library, execute the following commands from the root of the Steinberg SDK folder:

cd vst3sdk
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build .

The result being that {VST3_SDK_ROOT}/build/lib/Release/ will contain the Steinberg VST libraries required to build the plugin. NOTE: Windows users need to append --config Release to the last cmake (build) call as the build type must be defined during this step.

If you intend to build VST2 versions as well, run the following from the root of the Steinberg SDK folder (run the .bat version instead of the .sh version on Windows) prior to building the library:

./copy_vst2_to_vst3_sdk.sh

And if you are running Linux, you can easily resolve all dependencies by first running the following from the root of the Steinberg SDK folder:

./tools/setup_linux_packages_for_vst3sdk.sh

Building the plugin

Run CMake to generate the Makefile for your environment, after which you can compile the plugin using make. The build output will be stored in ./build/VST3/vstsid.vst3 as well as symbolically linked to your systems VST-plugin folder (on Unix).

You must provide the path to the Steinberg SDK by providing VST3_SDK_ROOT to CMake like so:

cmake -DVST3_SDK_ROOT=/path/to/VST_SDK/vst3sdk/ ..

Compiling on Unix systems:

mkdir build
cd build
cmake -DVST3_SDK_ROOT=/path/to/VST_SDK/vst3sdk/ ..
make .

Compiling on Windows:

Assuming the Visual Studio Build Tools have been installed:

mkdir build
cd build
cmake.exe -G"Visual Studio 16 2019" -DVST3_SDK_ROOT=/path/to/VST_SDK/vst3sdk/ ..
cmake.exe --build .

Running the plugin

You can copy the build output into your system VST(3) folder and run it directly in a VST host / DAW of your choice.

When debugging, you can also choose to run the plugin against Steinbergs validator and editor host utilities:

{VST3_SDK_ROOT}/build/bin/validator  build/VST3/vstsid.vst3
{VST3_SDK_ROOT}/build/bin/editorhost build/VST3/vstsid.vst3

Build as Audio Unit (macOS only)

For this you will need a little extra preparation while building Steinberg SDK. Additionally, you will need the CoreAudio SDK and XCode. Execute the following instructions to build the SDK with Audio Unit support, replace SMTG_COREAUDIO_SDK_PATH with the actual installation location of the CoreAudio SDK:

cd vst3sdk
mkdir build
cd build
cmake -GXcode -DCMAKE_BUILD_TYPE=Release -DSMTG_COREAUDIO_SDK_PATH=/Library/CoreAudioSDK/CoreAudio ..
cmake --build . --config Release

Execute the following instructions to build the plugin as an Audio Unit:

  • Run sh build_au.sh from the repository root, providing the path to VST3_SDK_ROOT as before:
VST3_SDK_ROOT=/path/to/VST_SDK/vst3sdk sh build_au.sh

The subsequent Audio Unit component will be located in ./build/VST3/vstsid.component as well as linked in ~/Library/Audio/Plug-Ins/Components/

You can validate the Audio Unit using Apple's auval utility, by running auval -v aumu synt IGOR on the command line. Note that there is the curious behaviour that you might need to reboot before the plugin shows up, though you can force a flush of the Audio Unit cache at runtime by running killall -9 AudioComponentRegistrar.

NOTE: Updates of the Steinberg SDK have been known to break Audio Unit support. You can always try building the plugin as part of the SDK examples (see CMakeLists.txt in audio-unit folder) when building the VST3_SDK as that might work.

vstsid's People

Contributors

igorski avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vstsid's Issues

Unable to build for Linux: No rule to make target `vst3sdk/build/lib/Release/libbase.a`

Build log:

Flushing build caches and output folders
Creating build folders
Building project
----------------
-- The C compiler identification is GNU 12.2.0
-- The CXX compiler identification is GNU 12.2.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- [SMTG] Linux architecture name is x86_64-linux.
-- [SMTG] SMTG_PLUGIN_TARGET_PATH is set to: /home/dreamer/.vst3
-- Found X11: /usr/include   
-- Looking for XOpenDisplay in /usr/lib/x86_64-linux-gnu/libX11.so;/usr/lib/x86_64-linux-gnu/libXext.so
-- Looking for XOpenDisplay in /usr/lib/x86_64-linux-gnu/libX11.so;/usr/lib/x86_64-linux-gnu/libXext.so - found
-- Looking for gethostbyname
-- Looking for gethostbyname - found
-- Looking for connect
-- Looking for connect - found
-- Looking for remove
-- Looking for remove - found
-- Looking for shmat
-- Looking for shmat - found
-- Looking for IceConnectionNumber in ICE
-- Looking for IceConnectionNumber in ICE - found
-- Found Freetype: /usr/lib/x86_64-linux-gnu/libfreetype.so (found version "2.12.1") 
-- Found PkgConfig: /bin/pkg-config (found version "1.8.1") 
-- Checking for module 'xcb'
--   Found xcb, version 1.15
-- Checking for module 'xcb-util'
--   Found xcb-util, version 0.4.0
-- Checking for module 'xcb-cursor'
--   Found xcb-cursor, version 0.1.4
-- Checking for module 'xcb-keysyms'
--   Found xcb-keysyms, version 0.4.0
-- Checking for module 'xcb-xkb'
--   Found xcb-xkb, version 1.15
-- Checking for module 'xkbcommon'
--   Found xkbcommon, version 1.5.0
-- Checking for module 'xkbcommon-x11'
--   Found xkbcommon-x11, version 1.5.0
-- Configuring done
-- Generating done
-- Build files have been written to: /home/dreamer/Sources/_audio/_plugins/_igorski/VSTSID/build
[  5%] Generating VST3/vstsid.vst3/Contents/Resources/version.png
[SMTG] Copied /home/dreamer/Sources/_audio/_plugins/_igorski/VSTSID/resource/version.png to /home/dreamer/Sources/_audio/_plugins/_igorski/VSTSID/build/VST3//vstsid.vst3/Contents/Resources/version.png
[ 10%] Generating VST3/vstsid.vst3/Contents/Resources/background.png
[SMTG] Copied /home/dreamer/Sources/_audio/_plugins/_igorski/VSTSID/resource/background.png to /home/dreamer/Sources/_audio/_plugins/_igorski/VSTSID/build/VST3//vstsid.vst3/Contents/Resources/background.png
[ 15%] Generating VST3/vstsid.vst3/Contents/Resources/plugin.uidesc
[SMTG] Copied /home/dreamer/Sources/_audio/_plugins/_igorski/VSTSID/resource/plugin.uidesc to /home/dreamer/Sources/_audio/_plugins/_igorski/VSTSID/build/VST3//vstsid.vst3/Contents/Resources/plugin.uidesc
[ 20%] Generating VST3/vstsid.vst3/Contents/Resources/slider_background.png
[SMTG] Copied /home/dreamer/Sources/_audio/_plugins/_igorski/VSTSID/resource/slider_background.png to /home/dreamer/Sources/_audio/_plugins/_igorski/VSTSID/build/VST3//vstsid.vst3/Contents/Resources/slider_background.png
[ 25%] Generating VST3/vstsid.vst3/Contents/Resources/slider_handle.png
[SMTG] Copied /home/dreamer/Sources/_audio/_plugins/_igorski/VSTSID/resource/slider_handle.png to /home/dreamer/Sources/_audio/_plugins/_igorski/VSTSID/build/VST3//vstsid.vst3/Contents/Resources/slider_handle.png
[ 30%] Generating VST3/vstsid.vst3/Contents/Resources/slider_handle_2.0x.png
[SMTG] Copied /home/dreamer/Sources/_audio/_plugins/_igorski/VSTSID/resource/slider_handle_2.0x.png to /home/dreamer/Sources/_audio/_plugins/_igorski/VSTSID/build/VST3//vstsid.vst3/Contents/Resources/slider_handle_2.0x.png
[ 35%] Building CXX object CMakeFiles/vstsid.dir/src/lfo.cpp.o
[ 40%] Building CXX object CMakeFiles/vstsid.dir/src/filter.cpp.o
[ 45%] Building CXX object CMakeFiles/vstsid.dir/src/ringmod.cpp.o
[ 50%] Building CXX object CMakeFiles/vstsid.dir/src/synth.cpp.o
[ 55%] Building CXX object CMakeFiles/vstsid.dir/src/vst.cpp.o
[ 60%] Building CXX object CMakeFiles/vstsid.dir/src/vstentry.cpp.o
[ 65%] Building CXX object CMakeFiles/vstsid.dir/src/ui/controller.cpp.o
[ 70%] Building CXX object CMakeFiles/vstsid.dir/home/dreamer/Sources/_audio/_plugins/vst3sdk/public.sdk/source/common/commoniids.cpp.o
[ 75%] Building CXX object CMakeFiles/vstsid.dir/home/dreamer/Sources/_audio/_plugins/vst3sdk/public.sdk/source/vst/vstaudioeffect.cpp.o
[ 80%] Building CXX object CMakeFiles/vstsid.dir/home/dreamer/Sources/_audio/_plugins/vst3sdk/vstgui4/vstgui/vstgui_uidescription.cpp.o
In file included from /home/dreamer/Sources/_audio/_plugins/vst3sdk/vstgui4/vstgui/vstgui_uidescription.cpp:7:
/home/dreamer/Sources/_audio/_plugins/vst3sdk/vstgui4/vstgui/uidescription/compresseduidescription.cpp:31:7: warning: ‘VSTGUI::ZLibInputStream’ has a field ‘VSTGUI::ZLibInputStream::zstream’ whose type uses the anonymous namespace [-Wsubobject-linkage]
   31 | class ZLibInputStream : public InputStream
      |       ^~~~~~~~~~~~~~~
/home/dreamer/Sources/_audio/_plugins/vst3sdk/vstgui4/vstgui/uidescription/compresseduidescription.cpp:49:7: warning: ‘VSTGUI::ZLibOutputStream’ has a field ‘VSTGUI::ZLibOutputStream::zstream’ whose type uses the anonymous namespace [-Wsubobject-linkage]
   49 | class ZLibOutputStream : public OutputStream
      |       ^~~~~~~~~~~~~~~~
[ 85%] Building CXX object CMakeFiles/vstsid.dir/home/dreamer/Sources/_audio/_plugins/vst3sdk/vstgui4/vstgui/plugin-bindings/vst3editor.cpp.o
[ 90%] Building CXX object CMakeFiles/vstsid.dir/home/dreamer/Sources/_audio/_plugins/vst3sdk/public.sdk/source/vst/vstguieditor.cpp.o
[ 95%] Building CXX object CMakeFiles/vstsid.dir/home/dreamer/Sources/_audio/_plugins/vst3sdk/public.sdk/source/main/linuxmain.cpp.o
make[2]: *** No rule to make target '/home/dreamer/Sources/_audio/_plugins/vst3sdk/build/lib/Release/libbase.a', needed by 'VST3/vstsid.vst3/Contents/x86_64-linux/vstsid.so'.  Stop.
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/vstsid.dir/all] Error 2
make: *** [Makefile:136: all] Error 2
An error occurred during build of plugin

[Feature request] StudioRack integration

It's an open-source plugin manager called StudioRack:
https://github.com/studiorack

The aim of the project is to provide a free open-source way to manage plugin dependencies and their versions. It would involve the following steps:

Publish a Github release containing the plugin source along with metadata plugins.json
Tag your Github repository with studiorack-plugin so it can be discovered
Wait for the studiorack-registry to index your plugin (every 24 hours)
Check the registry feed for your plugin to appear

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.