Giter Site home page Giter Site logo

vst3sdk's Introduction

VST 3 SDK

Welcome to VST SDK 3.7.x

Table Of Contents

  1. The VST SDK package
  2. System requirements
  3. About VST plug-ins in general
  4. About VST 3
  5. How to build VST 3
  6. Contributing
  7. License & Usage guidelines

The VST SDK package contains

  • VST 3 API
  • VST 3 Implementation Helper Classes
  • AAX, AUv3 and AU Wrappers
  • VST 3 plug-ins Examples

The full VST 3 SDK is available here!. It contains:

  • VST 3 plug-in Test Host Application/Validator,
  • the Steinberg VST 3 Plug-In SDK Licensing Agreement that you have to sign if you want to develop or host VST 3 plug-ins.

System requirements

Supported Platforms:

Operating System Architecture Compiler Notes
Windows 10/11 x86, x86_64, arm64 MSVC 2022, MSVC 2019
Windows 8.1 x86, x86_64 MSVC 2019, MSVC 2017
macOS 10.13, 10.14, 10.15, 11, 12, 13 x86, x86_64, Apple Silicon Xcode 10 - 14
iOS 13 - iOS 16 arm64 Xcode 11 - 14
Linux - Raspberry Pi OS (Buster) arm32 GCC 8.3 and higher Visual Studio Code
Linux - Ubuntu 18.04 LTS x86, x86_64 GCC 8.3 and higher Visual Studio Code, Qt Creator
Linux - Ubuntu 20.04 LTS x86, x86_64 GCC 8.3 and higher Visual Studio Code, Qt Creator

About VST plug-ins in general

A VST plug-in is an audio processing component that is utilized within a host application. This host application provides the audio or/and event streams that are processed by the plug-in's code. Generally speaking, a VST plug-in can take a stream of audio data, apply a process to the audio, and return the result to the host application. A VST plug-in performs its process normally using the processor of the computer. The audio stream is broken down into a series of blocks. The host supplies the blocks in sequence. The host and its current environment control the block-size. The VST plug-in maintains the status of all its own parameters relating to the running process: The host does not maintain any information about what the plug-in did with the last block of data it processed.

From the host application's point of view, a VST plug-in is a black box with an arbitrary number of inputs, outputs (Event (MIDI) or Audio), and associated parameters. The host needs no implicit knowledge of the plug-in's process to be able to use it. The plug-in process can use whatever parameters it wishes, internally to the process, but depending on the capabilities of the host, it can allow the changes to user parameters to be automated by the host.

The source code of a VST plug-in is platform independent, but the delivery system depends on the platform architecture:

  • On Windows, a VST plug-in is a multi-threaded DLL (Dynamic Link Library), recently packaged into a folder structure.
  • On Mac OS X, a VST plug-in is a Mach-O Bundle
  • On Linux, a VST plug-in is a package

To learn more about VST you can:


About VST 3

VST 3 is a general rework of the long-serving VST plug-in interface. It is not compatible with the older VST versions, but it includes some new features and possibilities. We have redesigned the API to make it not only far easier and more reliable for developers to work with, but have also provided completely new possibilities for plug-ins. These include:

1. Improved Performance with the Silence Flag

Processing can optionally be applied to plug-ins only when audio signals are present on their respective inputs, so VST 3 plug-ins can apply their processing economically and only when it is needed.

2. Multiple Dynamic I/Os

VST 3 plug-ins are no longer limited to a fixed number of inputs and outputs, and their I/O configuration can dynamically adapt to the channel configuration. Side-chains are also very easily realizable. This includes the possibility to deactivate unused busses after loading and even reactivate those when needed. This cleans up the mixer and further helps to reduce CPU load.

3. Sample-accurate Automation

VST 3 also features vastly improved parameter automation with sample accuracy and support for ramped automation data, allowing completely accurate and rapid parameter automation changes.

4. Logical Parameter Organization

The VST 3 plug-in parameters are displayed in a tree structure. Parameters are grouped into sections which represent the structure of the plug-in. Plug-ins can communicate their internal structure for the purpose of overview, but also for some associated functionality (eg. program-lists).

5. Resizeable UI Editor

VST 3 defines a way to allow resizing of the plug-in editor by a user.

6. Mouse Over Support

The host could ask the plug-in which parameter is under the mouse.

7. Context Menu Support

VST 3 defines a way to allow the host to add its own entries in the plug-in context menu of a specific parameter.

8. Channel Context Information

A VST 3 plug-in could access some channel information where it is instantiated: name, color, ...

9. Note Expression

VST 3 defines with Note Expression a new way of event controller editing. The plug-in is able to break free from the limitations of MIDI controller events by providing access to new VST 3 controller events that circumvent the laws of MIDI and provide articulation information for each individual note (event) in a polyphonic arrangement according to its noteId.

10. 3D Support

VST 3 supports new speaker configurations like Ambisonic, Atmos, Auro 3D or 22.2.

11. Factory Concept

VST 3 plug-in library could export multiple plug-ins and in this way replaces the shell concept of VST 2 (kPlugCategShell).

12. Support Remote control Representation

VST 3 plug-in can deliver a specific parameter mapping for remote controls like Nuage.

13. Others

While designing VST 3, we performed a careful analysis of the existing functionality of VST and rewrote the interfaces from scratch. In doing so, we focused a lot on providing clear interfaces and their documentation in order to avoid usage errors from the deepest possible layer. Some more features implemented specifically for developers include:

  • More stable technical host/plug-in environment
  • Advanced technical definition of the standard
  • Modular approach
  • Separation of UI and processing
  • Advanced Preset System
  • Multiple plug-ins per Library
  • Test Host included
  • Automated Testing Environment
  • Validator (small command line Test Host) and plug-in examples code included

How to build VST3

Get the source code from GitHub

git clone --recursive https://github.com/steinbergmedia/vst3sdk.git

Build the examples on Windows

  • Create a folder for the build and move to this folder (using cd):
mkdir build
cd build
  • Generate the Solution/Projects: provide the path of the Project where CMakeLists.txt is located:
// examples:
cmake.exe -G "Visual Studio 17 2022" -A x64 ..\vst3sdk
// or without symbolic links
cmake.exe -G "Visual Studio 17 2022" -A x64 ..\vst3sdk -DSMTG_CREATE_PLUGIN_LINK=0
// or by using the local user program folder (FOLDERID_UserProgramFilesCommon) as VST3 folder
cmake.exe -G "Visual Studio 17 2022" -A x64 -DSMTG_PLUGIN_TARGET_USER_PROGRAM_FILES_COMMON=1
  • Now you can build the plug-in (you can use Visual Studio too):
msbuild.exe vstsdk.sln
// (or alternatively for example for release)
cmake --build . --config Release

Note: If you have any issue with symbolic links, check Preparation on Windows for potential solutions.

Build the examples on macOS

  • Create a folder for the build and move to this folder (using cd):
mkdir build
cd build
  • Generate the Solution/Projects: provide the path of the Project where CMakeLists.txt is located:
// For XCode:
cmake -GXcode ../vst3sdk
// Without XCode (here debug variant):
cmake -DCMAKE_BUILD_TYPE=Debug ../
  • Now you can build the plug-in (you can use XCode too):
xcodebuild 
// (or alternatively for example for release)
cmake --build . --config Release

Build the examples on Linux

  • Install the required packages Package Requirements
  • Create a folder for the build and move to this folder (using cd):
mkdir build
cd build
  • Generate the Solution/Projects: provide the path of the Project where CMakeLists.txt is located:
cmake ../vst3sdk
  • Now you can build the plug-in:
make
// (or alternatively for example for release)
cmake --build . --config Release

Build using cmake-gui

  • start the cmake-gui Application
  • Browse Source...: select the folder vst3sdk
  • Browse Build...: select a folder where the outputs (projects/...) will be created. Typically, a folder named "build"
  • you can check the SMTG Options
  • Press Configure
  • Press Generate and the project will be created

Contributing

For bug reports and features requests, please visit the VST Developer Forum


License & Usage guidelines

More details are found at www.steinberg.net/sdklicenses_vst3

vst3sdk's People

Contributors

msixty7 avatar scheffle avatar ygrabit 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  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  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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vst3sdk's Issues

VST3 Compiler Errors w64 mingw32

Getting this when compiling with a mingw-w64:

Compiler:
$ i686-w64-mingw32-g++ --version i686-w64-mingw32-g++ (GCC) 7.3.0 Copyright (C) 2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Errors
../../../../SDKs/VST_SDK/VST3_SDK/base/source/fstring.cpp: In member function โ€˜bool Steinberg::ConstString::scanFloat(double&, Steinberg::uint32, bool) constโ€™: ../../../../SDKs/VST_SDK/VST3_SDK/base/source/fstring.cpp:1555:44: error: call of overloaded โ€˜findNext(Steinberg::uint32&, wchar_t)โ€™ is ambiguous if ((pos = str.findNext (offset, STR(','))) >= 0 && ((uint32)pos) >= offset) ^ ../../../../SDKs/VST_SDK/VST3_SDK/base/source/fstring.cpp:1022:7: note: candidate: Steinberg::int32 Steinberg::ConstString::findNext(Steinberg::int32, Steinberg::char8, Steinberg::ConstString::CompareMode, Steinberg::int32) const int32 ConstString::findNext (int32 startIndex, char8 c, CompareMode mode, int32 endIndex) const ^~~~~~~~~~~ ../../../../SDKs/VST_SDK/VST3_SDK/base/source/fstring.cpp:1062:7: note: candidate: Steinberg::int32 Steinberg::ConstString::findNext(Steinberg::int32, Steinberg::char16, Steinberg::ConstString::CompareMode, Steinberg::int32) const int32 ConstString::findNext (int32 startIndex, char16 c, CompareMode mode, int32 endIndex) const ^~~~~~~~~~~ ../../../../SDKs/VST_SDK/VST3_SDK/base/source/fstring.cpp:1556:30: error: call of overloaded โ€˜setChar(Steinberg::int32&, wchar_t)โ€™ is ambiguous str.setChar (pos, STR('.'));

Make the VST2 SDK available

Hi folks,

I'm trying to build the Airwave VST bridge under NixOS. Currently, this requires a download of a 90MB archive and manual interference with NixOS's mostly automated build workflow just to fetch 136K of SDK code.

Would it possible to make the VST2 SDK available on GitHub as a separate repo? This would make certail users' lives a lot easier.

Cheers

Build fails when SMTG_COREAUDIO_SDK_PATH was set

Environment

  • Mac OSX 10.14.3
  • Xcode 10.1
  • latest version of vst3sdk (commit 82380a)

What did you do?

I did the following steps to build the sample VST3 plugins.

git clone --recursive https://github.com/steinbergmedia/vst3sdk.git
mkdir ./build
cd ./build
cmake -GXcode ../vst3sdk
xcodebuild

The xcodebuild was finished without any errors. This is the expected behavior.

Problem

The xcodebuild produces file not found error when the Audio Unit support enabled.

According to the vst3sdk/cmake/modules/CoreAudioSupport.cmake, the CoreAudio SDK path is next to the vst3sdk, the SMTG_COREAUDIO_SDK_PATH will be automatically detected.

So I did the following steps:

mkdir -p ../CoreAudio/AudioUnits
cp -r ~/Downloads/AudioUnitExamplesAudioUnitEffectGeneratorInstrumentMIDIProcessorandOffline/* ../CoreAudio/AudioUnits
cmake -GXcode ../vst3sdk
xcodebuild

Then I got the file not found error like this.

$ cmake -GXcode ../vst3sdk
-- Building with Xcode version: 10.1
-- macOS Deployment Target: 10.10
-- SMTG_MYPLUGINS_SRC_PATH is not set. If you want to add your own plug-ins folder, specify it!
-- SMTG_COREAUDIO_SDK_PATH is set to : /Users/koyanagi/develop/vst3sdk/../CoreAudio
-- SMTG_AAX_SDK_PATH is not set. If you need it, please download the AAX SDK!
* To enable building the InterAppAudio NoteExpressionSynth example for iOS you need to set the SMTG_IOS_DEVELOPMENT_TEAM and use the Xcode generator
* To enable building the AUv3 Wrapper example for iOS you need to set the SMTG_IOS_DEVELOPMENT_TEAM and use the Xcode generator
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/koyanagi/develop/build
$ xcodebuild
...
/Users/koyanagi/develop/vst3sdk/public.sdk/source/vst/auwrapper/ausdk.mm:49:9: fatal error:
      'PublicUtility/CABundleLocker.cpp'
      file not found
#import "PublicUtility/CABundleLocker.cpp"
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.

It seems to be not proper version of the CoreAudio SDK.

Question

Where can I get the proper version of the CoreAudio SDK?

FYI, I use the latest CoreAudio SDK which downloaded from

https://developer.apple.com/library/archive/samplecode/sc2195/Introduction/Intro.html

Configuring incomplete, errors occurred! (Ubuntu 17.10)

I received the errors below. I assume it has to do with freetype package. I installed freetype2. I still get this error. A list of the prerequisites would be helpful for LINUX installations.

CMake Error at /usr/share/cmake-3.9/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
Could NOT find Freetype (missing: FREETYPE_LIBRARY FREETYPE_INCLUDE_DIRS)
Call Stack (most recent call first):
/usr/share/cmake-3.9/Modules/FindPackageHandleStandardArgs.cmake:377 (_FPHSA_FAILURE_MESSAGE)
/usr/share/cmake-3.9/Modules/FindFreetype.cmake:140 (find_package_handle_standard_args)
vstgui4/vstgui/CMakeLists.txt:70 (find_package)

-- Configuring incomplete, errors occurred!

Build Failed: with fresh install of mac osx Mojave

Issue:
On a clean install of Mac osx Mojave, simply cloning the directory and trying to build with command line tools will fail. Due to deployment target being 10.8 not 10.9

Steps to reproduce:

  1. Clean install of mac osx mojave or remove all xcode and old command line tools.
  2. Install 10.14 xcode command line tools
  3. Clone vst3sdk
  4. Try build with cmake -DCMAKE_BUILD_TYPE=DEBUG ../

Expected Output
Successful build

Actual Output

"/Library/Developer/CommandLineTools/usr/bin/c++"

  is not able to compile a simple test program.

  It fails with the following output:

...

clang: warning: libstdc++ is deprecated; move to libc++ with a minimum deployment target of OS X 10.9 [-Wdeprecated]

My resolution:
vst3sdk/cmake/modules/Global.cmake Line 81:49
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9" CACHE STRING "macOS deployment target")
rather than
et(CMAKE_OSX_DEPLOYMENT_TARGET "10.8" CACHE STRING "macOS deployment target")

After this change running cmake -DCMAKE_BUILD_TYPE=DEBUG ../ the build runs successfuly

Unable to create solution on Windows

I'm trying to build your project for the first time. I cloned the repository and was following the instructions on the main page. I created a build directory and tried to build the project using cmake ../vst3sdk. The project failed to build and produced a long error report. How do I build this?

Here's my log:
CMakeOutput.log

D:\dev\github.com\build>cmake.exe -G"Visual Studio 15 2017 Win64" ../vst3sdk
CMake Error at CMakeLists.txt:10 (include):
  include could not find load file:

    Global


CMake Error at CMakeLists.txt:11 (include):
  include could not find load file:

    AddVST3Library


CMake Error at CMakeLists.txt:12 (include):
  include could not find load file:

    Bundle


CMake Error at CMakeLists.txt:13 (include):
  include could not find load file:

    ExportedSymbols


CMake Error at CMakeLists.txt:14 (include):
  include could not find load file:

    PrefixHeader


CMake Error at CMakeLists.txt:15 (include):
  include could not find load file:

    PlatformIOS


CMake Error at CMakeLists.txt:16 (include):
  include could not find load file:

    PlatformToolset


CMake Error at CMakeLists.txt:17 (include):
  include could not find load file:

    CoreAudioSupport


CMake Error at CMakeLists.txt:18 (include):
  include could not find load file:

    AAXSupport


CMake Error at CMakeLists.txt:19 (include):
  include could not find load file:

    VstGuiSupport


CMake Error at CMakeLists.txt:20 (include):
  include could not find load file:

    UniversalBinary


CMake Error at CMakeLists.txt:21 (include):
  include could not find load file:

    AddVST3Options


-- The C compiler identification is MSVC 19.14.26430.0
-- The CXX compiler identification is MSVC 19.14.26430.0
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.14.26428/bin/Hostx86/x64/cl.exe
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.14.26428/bin/Hostx86/x64/cl.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.14.26428/bin/Hostx86/x64/cl.exe
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.14.26428/bin/Hostx86/x64/cl.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Error at CMakeLists.txt:28 (setupPlatformToolset):
  Unknown CMake command "setupPlatformToolset".


-- Configuring incomplete, errors occurred!
See also "D:/dev/github.com/build/CMakeFiles/CMakeOutput.log".

audiohost is not built by default

I compiled the latest version of the VST3 SDK and by default it does not build the audiohost program, while it builds editorhost.

Unable to run cmake on Ubuntu 18.04

Are there any missing dependencies in the CMakeLists.txt?

user:build$ cmake /path/to/vst3sdk/
-- SMTG_MYPLUGINS_SRC_PATH is not set. If you want to add your own plug-ins folder, specify it!
-- The C compiler identification is GNU 7.4.0
-- The CXX compiler identification is GNU 7.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- 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.8.1") 
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1") 
-- Checking for module 'xcb'
--   Found xcb, version 1.13
-- Checking for module 'xcb-util'
--   No package 'xcb-util' found
CMake Error at /snap/cmake/12/share/cmake-3.14/Modules/FindPkgConfig.cmake:457 (message):
  A required package was not found
Call Stack (most recent call first):
  /snap/cmake/12/share/cmake-3.14/Modules/FindPkgConfig.cmake:642 (_pkg_check_modules_internal)
  vstgui4/vstgui/CMakeLists.txt:78 (pkg_check_modules)


-- Configuring incomplete, errors occurred!
See also "/path/vst3sdk/build/CMakeFiles/CMakeOutput.log".
user:build$

Licensing clarification

According to the VST3 SDK License page: https://sdk.steinberg.net/viewtopic.php?f=4&t=282 , there is a:

Steinberg VST 3 Plug-In SDK Licensing Agreement that you have to sign if you want to develop or host VST 3 Plug-Ins.

However, the same page also explains that the SDK is dual licensed under either Steinberg's License or the GPLv3.

One of the features of the General Public License is that the user does not need to seek permission from anyone to have the four freedoms to run, copy, share and redistribute modified versions of the software in source code form. Thus requiring the user to sign an agreement with Steinberg before being allowed to have the freedom to make plugins/hosts using the SDK is certainly not in the spirit of the GPLv3.

Can you please clarify if Steinberg waives the requirement for any user to sign the agreement if they want to create plugins or hosts using the SDK - if the user chooses GPLv3 as the license?

Error Compiling in Linux

[ 17%] Built target vstgui
[ 18%] Building CXX object vstgui4/vstgui/uidescription/CMakeFiles/vstgui_uidescription.dir/editing/uieditmenucontroller.cpp.o
/home/nirban/JUCE/VST_SDK/VST3_SDK/vstgui4/vstgui/uidescription/editing/uieditmenucontroller.cpp: In instantiation of โ€˜VSTGUI::UIEditMenuController::getChildrenOfType(VSTGUI::CViewContainer*, VSTGUI::UTF8StringView, std::vectorVSTGUI::CView*&) const::<lambda(auto:9)> [with auto:9 = VSTGUI::SharedPointerVSTGUI::CView]โ€™:
/home/nirban/JUCE/VST_SDK/VST3_SDK/vstgui4/vstgui/uidescription/editing/../../lib/cviewcontainer.h:291:8: required from โ€˜void VSTGUI::CViewContainer::forEachChild(Proc) const [with Proc = VSTGUI::UIEditMenuController::getChildrenOfType(VSTGUI::CViewContainer*, VSTGUI::UTF8StringView, std::vectorVSTGUI::CView*&) const::<lambda(auto:9)>]โ€™
/home/nirban/JUCE/VST_SDK/VST3_SDK/vstgui4/vstgui/uidescription/editing/uieditmenucontroller.cpp:729:3: required from here
/home/nirban/JUCE/VST_SDK/VST3_SDK/vstgui4/vstgui/uidescription/editing/uieditmenucontroller.cpp:727:4: error: cannot call member function โ€˜void VSTGUI::UIEditMenuController::getChildrenOfType(VSTGUI::CViewContainer, VSTGUI::UTF8StringView, std::vectorVSTGUI::CView*&) constโ€™ without object
getChildrenOfType (c, type, result);
*
^
vstgui4/vstgui/uidescription/CMakeFiles/vstgui_uidescription.dir/build.make:494: recipe for target 'vstgui4/vstgui/uidescription/CMakeFiles/vstgui_uidescription.dir/editing/uieditmenucontroller.cpp.o' failed
make[2]: *** [vstgui4/vstgui/uidescription/CMakeFiles/vstgui_uidescription.dir/editing/uieditmenucontroller.cpp.o] Error 1
CMakeFiles/Makefile2:205: recipe for target 'vstgui4/vstgui/uidescription/CMakeFiles/vstgui_uidescription.dir/all' failed
make[1]: *** [vstgui4/vstgui/uidescription/CMakeFiles/vstgui_uidescription.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

Sample Plugins - compiling issue

When buildling and compiling the included sample plugins the UI is missing for almost all plugins (tried with Win7 SP1 on MSVC2017 and 2019).

Solution:
The .rc resource file for each sample plugin needs to include all required resources (i.e. the .uidesc and image files for the UI) like this:

example_image.png PNG "example_image.png" plugin.uidesc DATA "../recources/plugin.uidesc" etc...

Otherwise the UI can't be parsed due to files that are not found.
Currently all plugins that feature a proper UI show merely a black box while the "hostchecker" plugin is the only one working correctly (actually has the needed entries in the resource file).

Unfortunately no errors are shown when compiling and debugging which makes it hard to find the cause for anyone not knowing.

cmake errors in new release

Hi!
It looks like cmake is broken in newest release (but works in previous):
I did everything according to README.md for Windows (Win10, VS 16 2019)

git clone --recursive https://github.com/steinbergmedia/vst3sdk.git
cd vst3sdk && mkdir build && cd build
cmake.exe -G "Visual Studio 16 2019" -A x64 ../

This gives errors:

cmake.exe -G "Visual Studio 16 2019" -A x64 ../
CMake Error at cmake/modules/AddVST3Options.cmake:31 (file):
  file problem creating directory: C:/Program Files/Common Files/VST3
Call Stack (most recent call first):
  cmake/modules/SMTG_VST3_SDK.cmake:13 (include)
  CMakeLists.txt:10 (include)


-- SMTG_PLUGIN_TARGET_PATH is not set!
-- SMTG_MYPLUGINS_SRC_PATH is not set. If you want to add your own plug-ins folder, specify it!
-- SMTG_PACKAGE_ICON_PATH is set to : C:/Users/USERNAME/Libraries/vst3sdk/doc/artwork/VST_Logo_Steinberg.ico
-- Selecting Windows SDK version 10.0.18362.0 to target Windows 10.0.17763.
-- The C compiler identification is MSVC 19.23.28106.4
-- The CXX compiler identification is MSVC 19.23.28106.4
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.23.28105/bin/Hostx64/x64/cl.exe
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.23.28105/bin/Hostx64/x64/cl.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.23.28105/bin/Hostx64/x64/cl.exe
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.23.28105/bin/Hostx64/x64/cl.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Could NOT find EXPAT (missing: EXPAT_LIBRARY EXPAT_INCLUDE_DIR)
-- VSTGUI will use the embedded Expat package!
-- VSTGUI_ROOT is set to : C:/Users/USERNAME/Libraries/vst3sdk
-- SMTG_AAX_SDK_PATH is not set. If you need it, please download the AAX SDK!
-- Configuring incomplete, errors occurred!

However when I checkout to previous commit:

commit 92351625c5b24d5805a3f5adcc718fc748a5720a
Author: scheffle <[email protected]>
Date:   Thu May 9 13:28:52 2019 +0200

    [fix] linux part for audiohost sample
    [fix] cmake for Jack support
git checkout 92351625c5b24d5805a3f5adcc718fc748a5720a
git submodule update --recursive

Then everything is generated properly and even built properly later with
fixes for _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING (issue #39)

Visual studio 2019 (16.3.1) Compilation issue

Visual studio professional 2019 16.3.1
MSVC 14.23.28105

Works with MSVC 14.22.27905.
A new deprecation warning has been added to MSVC, defined in <experimental/filesystem>:

#ifndef _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING
#error The <experimental/filesystem> header providing std::experimental::filesystem is deprecated by Microsoft \
and will be REMOVED. It is superseded by the C++17 <filesystem> header providing std::filesystem. \
You can define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING to acknowledge that you have received this warning.
#endif // _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING

So the public.sdk/source/vst/hosting/module_win32.cpp can't compile.

FUnknown uses deprecated OSAtomicAdd32Barrier on macOS

The following warning is generated by clang on macOS:

pluginterfaces/base/funknown.cpp:73:9: warning: 'OSAtomicAdd32Barrier' is deprecated: first deprecated in macOS 10.12 - Use std::atomic_fetch_add() from <atomic> instead
      [-Wdeprecated-declarations]
        return OSAtomicAdd32Barrier (d, (int32_t*)&var);
               ^
/usr/include/libkern/OSAtomicDeprecated.h:161:9: note: 'OSAtomicAdd32Barrier' has been explicitly marked deprecated here
int32_t OSAtomicAdd32Barrier( int32_t __theAmount, volatile int32_t *__theValue );
        ^
1 warning generated.

This warning is really annoying in CI and command line test runs.

build problem on current master

I build vst3sdk on Fedora 29 64 bits.
gcc version is 8.3.1.

I meet the following error during compilation:

[ 92%] Building CXX object public.sdk/samples/vst-hosting/audiohost/CMakeFiles/audiohost.dir/source/audiohost.cpp.o
In file included from /usr/include/c++/8/memory:80,
                 from /home/artelys/repository/github/vst3sdk/public.sdk/samples/vst-hosting/editorhost/source/platform/iapplication.h:40,
                 from /home/artelys/repository/github/vst3sdk/public.sdk/samples/vst-hosting/audiohost/source/audiohost.h:40,
                 from /home/artelys/repository/github/vst3sdk/public.sdk/samples/vst-hosting/audiohost/source/audiohost.cpp:38:
/usr/include/c++/8/bits/unique_ptr.h: Dans l'instanciation de ยซย typename std::_MakeUniq<_Tp>::__single_object std::make_unique(_Args&& ...) [with _Tp = Steinberg::Vst::AudioHost::App; _Args = {}; typename std::_MakeUniq<_Tp>::__single_object = std::unique_ptr<Steinberg::Vst::AudioHost::App, std::default_delete<Steinberg::Vst::AudioHost::App> >]ย ยปย :
/home/artelys/repository/github/vst3sdk/public.sdk/samples/vst-hosting/audiohost/source/audiohost.cpp:63:57:   requis depuis ici
/usr/include/c++/8/bits/unique_ptr.h:831:30: error: expression ยซย newย ยป invalide pour le type de classe abstraite ยซย Steinberg::Vst::AudioHost::Appย ยป
     { return unique_ptr<_Tp>(new _Tp(std::forward<_Args>(__args)...)); }
                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/artelys/repository/github/vst3sdk/public.sdk/samples/vst-hosting/audiohost/source/audiohost.cpp:38:
/home/artelys/repository/github/vst3sdk/public.sdk/samples/vst-hosting/audiohost/source/audiohost.h:52:7: note:   parce que les fonctions virtuelles suivantes sont pures dans ยซย Steinberg::Vst::AudioHost::Appย ยป:
 class App : public EditorHost::IApplication
       ^~~
In file included from /home/artelys/repository/github/vst3sdk/public.sdk/samples/vst-hosting/audiohost/source/audiohost.h:40,
                 from /home/artelys/repository/github/vst3sdk/public.sdk/samples/vst-hosting/audiohost/source/audiohost.cpp:38:
/home/artelys/repository/github/vst3sdk/public.sdk/samples/vst-hosting/editorhost/source/platform/iapplication.h:56:15: note:   ยซย virtual void Steinberg::Vst::EditorHost::IApplication::terminate()ย ยป
  virtual void terminate () = 0;
               ^~~~~~~~~
make[2]: *** [public.sdk/samples/vst-hosting/audiohost/CMakeFiles/audiohost.dir/build.make:180: public.sdk/samples/vst-hosting/audiohost/CMakeFiles/audiohost.dir/source/audiohost.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:1532: public.sdk/samples/vst-hosting/audiohost/CMakeFiles/audiohost.dir/all] Error 2
make: *** [Makefile:84: all] Error 2

Bypass simulation logic still broken in AAX Wrapper

The AAX Wrapper exposes an additional parameter named "Bypass" additionally to a "Master Bypass" provided by an underlying VST3 implementation that is flagged as ParameterInfo::kIsBypass.

A bypass parameter should only be simulated if the VST3 does not expose a bypass parameter at all, hence the condition:

mSimulateBypass = (mWrapper->mBypassParameterID != Vst::kNoParamId);

in the AAXWrapper_Parameters ctor should be inverted to

mSimulateBypass = (mWrapper->mBypassParameterID == Vst::kNoParamId);

However, doing so stops the existing VST3 bypass parameter from working, so it seems there's more logic depending on mSimulateBypass that's broken.

Invalid include paths

Many files have includes which cause build errors if additional include paths are not defined / amalgamated builds.

For example in plugininterfaces/base/funknown.h:

#include "pluginterfaces/base/fplatform.h"
#include "pluginterfaces/base/ftypes.h"
#include "pluginterfaces/base/smartpointer.h"

There is no need to repeat the "pluginterfaces/base part as they're in the same folder !

This works fine:

#include "fplatform.h"
#include "ftypes.h"
#include "smartpointer.h"

[Linux] Compiled VST plugins are not detected by any DAW

I've downloaded the SDK vstsdk3613_08_04_2019_build_81.zip file.

I'm running Debian Stable and all samples seem to compile fine. I've moved all the .so generated to my ~/.vst folder including all the samples like adelay.

I've tried to see if I could get the plugins to show up on Ardour, LMMS with Carla host and Helio.fm. All of them are supposed to be able to load linux VST3 plugins. The only other linux VST plugin I have to compare is Tunefish and all of them detect it.

When I try to load any of the SDK sample plugins Carla shows an error which is the only hint I have about the problem:

Could not find the VST main entry in the plugin library

Automation broken in AAX Wrapper

There seems to be a severe issue with automations in the aaxwrapper of both the 3.6.8 and the 3.6.9 SDK when a plugin has more than one RangeParameter.

Here are the steps to reproduce for the SDK's again_aax sample (found in ProTools 12.6 on both Mac OS and Windows, but it can likely be reproduced with other versions, too. The used AAX SDK version is 2.3.0):

  1. Add e.g. two dummy RangeParameters in AGainController::initialize():
    parameters.addParameter(STR16("Idk"), 0, 0, 0, ParameterInfo::kCanAutomate, 'bleh');
    parameters.addParameter(STR16("Idk2"), 0, 0, 0, ParameterInfo::kCanAutomate, 'blah');
  2. Patch again.uidesc accordingly to expose two additional sliders.
  3. Build again_aax and copy it to the AAX Plugin directory.
  4. Start ProTools, create and empty session, add a strereo track.
  5. Instanciate again_aax.
  6. Add the gain parameter to the automation list.
  7. Put automation into write mode and start playback.
  8. Move the gain slider around.

-> No automation is written.

It affects seemingly random (but always the same set of) parameters if you have more then one RangeParameters.

vstsdk3610_11_06_2018_build_37 doesn't build with VS2017 (or in general on windows)

Hi,
this is the first time I tried to use the VST3 SDK, so I followed the instructions word by word. But this still fails.
That's what I did:

git clone --recursive https://github.com/steinbergmedia/vst3sdk.git
mkdir build
cd build
cmake.exe -G"Visual Studio 15 2017 Win64" ../vst3sdk

cmake outputs:

-- SMTG_VST3_TARGET_PATH is set to : C:/Program Files/Common Files/VST3
-- SMTG_MYPLUGINS_SRC_PATH is not set. If you want to add your own plug-ins folder, specify it!
-- The C compiler identification is MSVC 19.14.26433.0
-- The CXX compiler identification is MSVC 19.14.26433.0
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.14.26428/bin/Hostx86/x64/cl.exe
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.14.26428/bin/Hostx86/x64/cl.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.14.26428/bin/Hostx86/x64/cl.exe
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.14.26428/bin/Hostx86/x64/cl.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Could NOT find EXPAT (missing: EXPAT_LIBRARY EXPAT_INCLUDE_DIR)
-- VSTGUI will use the embedded Expat package!
-- SMTG_AAX_SDK_PATH is not set. If you need it, please download the AAX SDK!
-- Configuring done
-- Generating done
-- Build files have been written to: F:/VST3Test/build

Then I switched from MSYS to the VS2017 x64 native tools and ran:
msbuild.exe vstsdk.sln >../build.log
from the build folder. The log is attached.

build.log

For me it looks like the linker can't create the output files (LNK1104) for some examples because the linker output file has the same name as a directory (eg. pitchnames.vst3) that gets generated beforehand. I guess the linker should actually output in the sub-directory instead.

Regards
Maik

Validator/testsuite issues

The following code can cause stack overflows on Linux with both clang/gcc when printing to stdout from inside a plugin (for debugging purposes)

std::u16string printf (const char8* format, ...)
{
	using VST3::StringConvert::convert;

	char8 string[1024 * 4]; // <<<<<< offending line

	va_list marker;
	va_start (marker, format);

	vsnprintf (string, kPrintfBufferSize, format, marker);
	return convert (string).data ();
}

Fix:

std::u16string printf (const char8* format, ...)
{
	using VST3::StringConvert::convert;

	std::string string;
	string.reserve(1024 * 4);

	va_list marker;
	va_start (marker, format);

	vsnprintf (&string[0], kPrintfBufferSize, format, marker);
	return convert (string).data ();
}

In /testsuite/busconsistency

    randIndex = rand () % (numBusses);

this generates a number between 0 and RAND_MAX when numBusses == 1. I get that there should be at least one event and one audio bus so this shouldn't be an issue, but when testing other issues it came up.

Wrong information on the wiki

This is what is currently in the wiki:

git pull https://github.com/steinbergmedia/vst3sdk.git
cd vst3sdk
git submodules init
git submodules update

Iโ€™m still a bit of a noob with git but shouldn't this be clone instead of pull?
Also git submodules is a typo. It should be git submodule instead.

Unknown cmake command โ€œsmtg_add_vst3pluginโ€

Followed the vst3sdk wiki to the letter and have compiled the example build from vst3sdk>cmakelists.txt with no issue.

However when attempting to do the same on both other projects and the helloworld plugin example from older versions of the vst sdk, I get the error as in the title and the following post:

#4

Namely:
Unknown cmake command โ€œsmtg_add_vst3pluginโ€

From what I can gather this is referencing a cmake command inside the cmake modules folder of the sdk
[vst3sdk>cmake>modules]

However I have next to no idea what the fix is for this. Addionally, the user meem40 says he fixed this issue here:
#4 (comment)

However I have no idea what he means by this solution.

Can anyone point me in the right direction here?
Thanks

"Valid State Transition" test always fails a 64-bit-only plugin

In public.sdk/source/vst/testsuite/state/validstatetransition.cpp, at line 47, ValidStateTransitionTest's constructor is declared as follows:

ValidStateTransitionTest::ValidStateTransitionTest (ITestPlugProvider* plugProvider)
: TestEnh (plugProvider, kSample32)
{
}

Because sample size kSample32 is specified there, newsetup.symbolicSampleSize is set to kSample32 when calling the plugin's setupProcessing method. A 64-bit-only plugin should return kResultFalse in this case, as I understand it. However, the "Valid State Transition" test will always fail if the plugin returns kResultFalse from setupProcessing. Therefore, 64-bit-only plugins fail this test erroneously. What's more, the 64-bit state transition path for plugins with 32-bit and 64-bit support is never tested.

[Linux] compilation error

Hi. I've got this error.
OpenSUSE TW gcc 7.2.1

/home/kv/src/vst3sdk/public.sdk/samples/vst-hosting/audiohost/source/media/audioclient.cpp: In member function โ€˜virtual bool Steinberg::Vst::AudioClient::process(Steinberg::Vst::IAudioClient::Buffers&, int64_t)โ€™:
/home/kv/src/vst3sdk/public.sdk/samples/vst-hosting/audiohost/source/media/audioclient.cpp:307:22: error: no matching function for call to โ€˜Steinberg::Vst::AudioClient::postprocess(Steinberg::Vst::IAudioClient::Buffers&)โ€™
postprocess (buffers);
^
In file included from /home/kv/src/vst3sdk/public.sdk/samples/vst-hosting/audiohost/source/media/audioclient.cpp:38:0:
/home/kv/src/vst3sdk/public.sdk/samples/vst-hosting/audiohost/source/media/audioclient.h:105:7: note: candidate: void Steinberg::Vst::AudioClient::postprocess()
void postprocess ();
^~~~~~~~~~~
/home/kv/src/vst3sdk/public.sdk/samples/vst-hosting/audiohost/source/media/audioclient.h:105:7: note: candidate expects 0 arguments, 1 provided
/home/kv/src/vst3sdk/public.sdk/samples/vst-hosting/audiohost/source/media/audioclient.cpp: At global scope:
/home/kv/src/vst3sdk/public.sdk/samples/vst-hosting/audiohost/source/media/audioclient.cpp:312:6: error: prototype for โ€˜void Steinberg::Vst::AudioClient::postprocess(Steinberg::Vst::IAudioClient::Buffers&)โ€™ does not match any in class โ€˜Steinberg::Vst::AudioClientโ€™
void AudioClient::postprocess (Buffers& buffers)
^~~~~~~~~~~
In file included from /home/kv/src/vst3sdk/public.sdk/samples/vst-hosting/audiohost/source/media/audioclient.cpp:38:0:
/home/kv/src/vst3sdk/public.sdk/samples/vst-hosting/audiohost/source/media/audioclient.h:105:7: error: candidate is: void Steinberg::Vst::AudioClient::postprocess()
void postprocess ();
^~~~~~~~~~~

Can't build validator sample on mac - cmake errors

I cd into public.sdk/samples/vst-hosting/validator
Then create build directory, then cd build, then cmake ../

This is the output:

-- The C compiler identification is AppleClang 9.1.0.9020039
-- The CXX compiler identification is AppleClang 9.1.0.9020039
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Error at CMakeLists.txt:43 (set_target_properties):
  set_target_properties called with illegal arguments, maybe missing a
  PROPERTIES specifier?


CMake Warning (dev) in CMakeLists.txt:
  No cmake_minimum_required command is present.  A line of code such as

    cmake_minimum_required(VERSION 3.11)

  should be added at the top of the file.  The version specified may be lower
  if you wish to support older CMake versions for this project.  For more
  information run "cmake --help-policy CMP0000".
This warning is for project developers.  Use -Wno-dev to suppress it.

-- Configuring incomplete, errors occurred!

This is the line where the error occurs:
set_target_properties(${target} PROPERTIES ${SDK_IDE_HOSTING_EXAMPLES_FOLDER})

I am not sure where SDK_IDE_HOSTING_EXAMPLES_FOLDER should be defined and what it should contain.

Build failure on Linux if $TARGET_DESTINATION does not exist

I encountered a build failure on Fedora 29 after the first plugin (adelay) passed its TestSuite run, when the build process attempted to link it into ${TARGET_DESTINATION} (which is ${HOME}/.vst3/ by default), without first ensuring that the directory exists.

PR steinbergmedia/vst3_cmake#1 addresses this issue, by adding a mkdir -p "${TARGET_DESTINATION}" prior to the ln -sfF command.

Required files missing dual license

It appears the license file in the top directory expressly states that it only applies to files that reference it. (see https://github.com/steinbergmedia/vst3sdk/blob/master/LICENSE.txt#L5 )
However it seems that many files required to compile a plugin do not reference the license and show they are still under the custom Steinberg license. From what I can see all files in public.sdk/source/ are in this scenario and they are required for building a plugin. I believe this means no vst can be made gpl compatible using the SDK since some of the code that gets compiled into the binary is not covered by the dual license.

Hopefully its just a mistake and these files' headers can be edited to include the dual licensing.
Thanks. Its very exciting to see Steinberg working toward supporting the GPL.

SingleComponentEffect::getBusArrangement() crashes with instruments in Cubase

This seems to fix it:

tresult PLUGIN_API SingleComponentEffect::getBusArrangement (BusDirection dir, int32 busIndex,
                                                             SpeakerArrangement& arr)
{
  BusList* busList = getBusList (kAudio, dir);
  if(busList->size()) // ADDED THIS
  {
    AudioBus* audioBus = busList ? FCast<Vst::AudioBus> (busList->at (busIndex)) : nullptr;
    if (audioBus)
    {
      arr = audioBus->getArrangement ();
      return kResultTrue;
    }
  }
  return kResultFalse;
}

New interface to let the plugin tell the host that many instances have a shared state

Hi,

In Bitwig Studio we have the ability to sandbox plugins.
Some plugins have a shared state among many instances (u-he Satin, or Fabfilter Pro-Q3).
Sandboxing each plugin instance will break functionality for those plugin.

If the plugin had a way to inform the DAW that it has a shared state between many instances, we could ensure that we put every instances of the same plugin in the same sandbox so they can have their shared state working.

What do you think?

Regards,
Alexandre

Downloading a previous version of the SDK

I'm working on a project that was built with the SDK version 3.6.9. Several old versions including 3.6.9 appear to be missing from the releases.

I can't work with different version of the SDK than the original the software was built against. Am i missing something or is it currently not possible to download previous releases?

CMAKE_TRY_COMPILE_TARGET_TYPE required to build on Mac OS X

Hi all, I needed to included this line

set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")

in my CMakeLists.txt file at the root directory of my VST3_SDK folder in order to get the sample files to build. Not sure if that is helpful for anyone else. Here is my configuration:

macosx 10.14.6 Mojave
cmake: 3.15.4
gcc: Apple LLVM version 10.0.1 (clang-1001.0.46.4)
xcode-select: version 2354
VST3: vstsdk3613_08_04_2019_build_81

and I'm following the instructions on 'how to build' in the project readme, specifically executing:
cmake --build . --config Release
from within a build directory created underneath the vst3 root.

The projects all do compile, however, the build process throws a ton of warnings of the type:
falignpush.h:26:25: warning: pragma diagnostic expected 'error', 'warning', 'ignored', 'fatal', 'push', or 'pop' [-Wunknown-pragmas] #pragma GCC diagnostic default "-Wpragma-pack"
Not sure if that is either helpful to anyone or if I actually may've configured something wrong, if the former, let me know and I'm happy to submit a PR to include this line.

FR: gitignore

please could you .gitignore .DS_Store files in the VST3 repo?

./audiohost segfaults on Linux x86_64

I get the following backtrace in gdb:

(gdb) set args ~/opt/REAPER/Plugins/FX/reafir.vst.so
(gdb) r
Starting program: /tmp/vst3sdk/build/bin/Debug/audiohost ~/opt/REAPER/Plugins/FX/reafir.vst.so
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".

Program received signal SIGSEGV, Segmentation fault.
0x000055555556815c in Steinberg::IPtr<Steinberg::IPluginFactory>::IPtr (this=0x7fffffffd1b8, other=...) at /tmp/vst3sdk/pluginterfaces/base/smartpointer.h:125
125     inline IPtr<I>::IPtr (const IPtr<I>& other) : ptr (other.ptr)
(gdb) bt
#0  0x000055555556815c in Steinberg::IPtr<Steinberg::IPluginFactory>::IPtr (this=0x7fffffffd1b8, other=...) at /tmp/vst3sdk/pluginterfaces/base/smartpointer.h:125
#1  0x0000555555567539 in VST3::Hosting::PluginFactory::PluginFactory (this=0x7fffffffd1b8) at /tmp/vst3sdk/public.sdk/source/vst/hosting/module.h:130
#2  0x0000555555566561 in Steinberg::Vst::AudioHost::App::startAudioClient (this=0x5555557f4bf0, path="/home/laguest/opt/REAPER/Plugins/FX/reafir.vst.so", effectID=..., flags=0)
    at /tmp/vst3sdk/public.sdk/samples/vst-hosting/audiohost/source/audiohost.cpp:84
#3  0x0000555555566bbe in Steinberg::Vst::AudioHost::App::init (this=0x5555557f4bf0, cmdArgs=std::vector of length 1, capacity 1 = {...})
    at /tmp/vst3sdk/public.sdk/samples/vst-hosting/audiohost/source/audiohost.cpp:133
#4  0x0000555555566c9a in main (argc=2, argv=0x7fffffffd588) at /tmp/vst3sdk/public.sdk/samples/vst-hosting/audiohost/source/audiohost.cpp:164

Doesn't matter what I pass, it does this.

Fix issues reported by gcc with -Wsuggest-override

Hi,

It would be nice to have the whole SDK using the override keyword, because if you build with -Wsuggest-override you get flooded by warnings.

Also fixing -Wnon-virtual-dtor would be nice but I don't know if it is possible regarding the ABI.

Cheers,
Alex

vst3sdk doesn't compile on Alpine Linux.

Alpine Linux is not a GNU/Linux distro and gcc on Alpine doesn't define __gnu_linux__ only __linux, __linux__ and linux.

gcc -dM -E - < /dev/null | grep linux
#define __linux 1
#define __linux__ 1
#define linux 1

No platform is detected in pluginterfaces/base/fplatform.h, the #pragma error unknown platform doesn't do anything.
Since no platform was detected, PLUGIN_API is undefined which causes a lot of compiler errors.

[ 32%] Building CXX object CMakeFiles/vstgui_support.dir/vstgui4/vstgui/plugin-bindings/vst3groupcontroller.cpp.o
In file included from /source/vst3sdk/base/source/fobject.h:44,
                 from /source/vst3sdk/vstgui4/vstgui/plugin-bindings/vst3groupcontroller.h:11,
                 from /source/vst3sdk/vstgui4/vstgui/plugin-bindings/vst3groupcontroller.cpp:5:
/source/vst3sdk/pluginterfaces/base/funknown.h:214:18: error: expected initializer before 'atomicAdd'
 int32 PLUGIN_API atomicAdd (int32& value, int32 amount);
                  ^~~~~~~~~
In file included from /source/vst3sdk/base/source/fobject.h:44,
                 from /source/vst3sdk/vstgui4/vstgui/plugin-bindings/vst3groupcontroller.h:11,
                 from /source/vst3sdk/vstgui4/vstgui/plugin-bindings/vst3groupcontroller.cpp:5:
/source/vst3sdk/pluginterfaces/base/funknown.h:363:18: error: 'PLUGIN_API' declared as a 'virtual' field
  virtual tresult PLUGIN_API queryInterface (const TUID _iid, void** obj) = 0;
                  ^~~~~~~~~~
/source/vst3sdk/pluginterfaces/base/funknown.h:363:18: error: expected ';' at end of member declaration
  virtual tresult PLUGIN_API queryInterface (const TUID _iid, void** obj) = 0;
                  ^~~~~~~~~~
                            ;
/source/vst3sdk/pluginterfaces/base/funknown.h:363:76: error: ISO C++ forbids declaration of 'queryInterface' with no type [-fpermissive]
  virtual tresult PLUGIN_API queryInterface (const TUID _iid, void** obj) = 0;
                                                                            ^
/source/vst3sdk/pluginterfaces/base/funknown.h:368:17: error: 'PLUGIN_API' declared as a 'virtual' field
  virtual uint32 PLUGIN_API addRef () = 0;
                 ^~~~~~~~~~
/source/vst3sdk/pluginterfaces/base/funknown.h:368:17: error: expected ';' at end of member declaration
  virtual uint32 PLUGIN_API addRef () = 0;
                 ^~~~~~~~~~
                           ;
....

A quick and dirty workaround for now is to add __gnu_linux__ to CMAKE_CXX_FLAGS when configuring cmake.

cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS=-D__gnu_linux__ -S /source/vst3sdk/ -B /build/

I have been able to build my plug-ins and run the validator test suits on Alpine using the workaround or by changing the platform check(line 79 in fplatform.h) to __linux__.

Is there anything that actually requires __gnu_linux__ to build or use the vst3sdk on Linux or would it be possible to change the Linux platform check to __linux__ instead of __gnu_linux__?

get error when editorhost debug in x86

I create x86 solution in vs2017 with command:
cmake.exe -G"Visual Studio 15 2017" ../vst3sdk
then i run project "editorhost"๏ผŒit throw this exception
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.

segfault in cairo_scaled_font_status

Greetings. Trying to run examples gives me segfault:

openSUSE TW
gcc (SUSE Linux) 6.3.1 20170202 [gcc-6-branch revision 245119]
glbc-2.25
libcairo2-1.15.4
libgtk-3-0-3.22.8

Thread 1 "editorhost" received signal SIGSEGV, Segmentation fault.
0x00007ffff58d5a10 in cairo_scaled_font_status () from /usr/lib64/libcairo.so.2
(gdb) backtrace
#0 0x00007ffff58d5a10 in cairo_scaled_font_status () at /usr/lib64/libcairo.so.2
#1 0x00007fffe97d80fb in VSTGUI::Cairo::Font::Font(char const*, double const&, int const&) (this=0xb040e0, name=0xa39ae0 "Arial", size=@0x7fffe9b20840: 18, style=@0x7fffe9b20848: 0)
at /home/kv/src/VST_SDK/VST3_SDK/vstgui4/vstgui/lib/platform/linux/cairofont.cpp:299
#2 0x00007fffe97d87b9 in VSTGUI::IPlatformFont::create(char const*, double const&, int const&) (name=0xa39ae0 "Arial", size=@0x7fffe9b20840: 18, style=@0x7fffe9b20848: 0)
at /home/kv/src/VST_SDK/VST3_SDK/vstgui4/vstgui/lib/platform/linux/cairofont.cpp:397
#3 0x00007fffe977e2c4 in VSTGUI::CFontDesc::getPlatformFont() (this=0x7fffe9b20820 VSTGUI::gNormalFontVeryBig) at /home/kv/src/VST_SDK/VST3_SDK/vstgui4/vstgui/lib/cfont.cpp:133
#4 0x00007fffe977e2fd in VSTGUI::CFontDesc::getFontPainter() (this=0x7fffe9b20820 VSTGUI::gNormalFontVeryBig) at /home/kv/src/VST_SDK/VST3_SDK/vstgui4/vstgui/lib/cfont.cpp:140
#5 0x00007fffe97772b5 in VSTGUI::CDrawContext::drawString(VSTGUI::IPlatformString*, VSTGUI::CRect const&, VSTGUI::CHoriTxtAlign, bool) (this=0x7fffffffcc70, string=0xb05450, _rect=..., hAlign=VSTGUI::kCenterText, antialias=true)
at /home/kv/src/VST_SDK/VST3_SDK/vstgui4/vstgui/lib/cdrawcontext.cpp:339
#6 0x00007fffe97c2935 in VSTGUI::CParamDisplay::drawPlatformText(VSTGUI::CDrawContext*, VSTGUI::IPlatformString*, VSTGUI::CRect const&) (this=0xabc050, pContext=0x7fffffffcc70, string=0xb05450, size=...)
at /home/kv/src/VST_SDK/VST3_SDK/vstgui4/vstgui/lib/controls/cparamdisplay.cpp:380
#7 0x00007fffe97c259b in VSTGUI::CParamDisplay::drawPlatformText(VSTGUI::CDrawContext*, VSTGUI::IPlatformString*) (this=0xabc050, pContext=0x7fffffffcc70, string=0xb05450)
at /home/kv/src/VST_SDK/VST3_SDK/vstgui4/vstgui/lib/controls/cparamdisplay.cpp:345
#8 0x00007fffe97d2df5 in VSTGUI::CTextLabel::draw(VSTGUI::CDrawContext*) (this=0xabc050, pContext=0x7fffffffcc70) at /home/kv/src/VST_SDK/VST3_SDK/vstgui4/vstgui/lib/controls/ctextlabel.cpp:128
#9 0x00007fffe96c18dc in VSTGUI::CView::drawRect(VSTGUI::CDrawContext*, VSTGUI::CRect const&) (this=0xabc050, pContext=0x7fffffffcc70, updateRect=...) at /home/kv/src/VST_SDK/VST3_SDK/vstgui4/vstgui/uidescription/../lib/cview.h:90
#10 0x00007fffe97a1e9a in VSTGUI::CViewContainer::drawRect(VSTGUI::CDrawContext*, VSTGUI::CRect const&) (this=0xabb670, pContext=0x7fffffffcc70, updateRect=...) at /home/kv/src/VST_SDK/VST3_SDK/vstgui4/vstgui/lib/cviewcontainer.cpp:786
#11 0x00007fffe97a1e9a in VSTGUI::CViewContainer::drawRect(VSTGUI::CDrawContext*, VSTGUI::CRect const&) (this=0xabb3f0, pContext=0x7fffffffcc70, updateRect=...) at /home/kv/src/VST_SDK/VST3_SDK/vstgui4/vstgui/lib/cviewcontainer.cpp:786
#12 0x00007fffe977f4cf in VSTGUI::CFrame::drawRect(VSTGUI::CDrawContext*, VSTGUI::CRect const&) (this=0xabb3f0, pContext=0x7fffffffcc70, updateRect=...) at /home/kv/src/VST_SDK/VST3_SDK/vstgui4/vstgui/lib/cframe.cpp:306
#13 0x00007fffe9783153 in VSTGUI::CFrame::platformDrawRect(VSTGUI::CDrawContext*, VSTGUI::CRect const&) (this=0xabb3f0, context=0x7fffffffcc70, rect=...) at /home/kv/src/VST_SDK/VST3_SDK/vstgui4/vstgui/lib/cframe.cpp:1483
#14 0x00007fffe97e1caa in VSTGUI::X11::GtkFrame::on_draw(Cairo::RefPtrCairo::Context const&) (this=0xabc988, cr=...) at /home/kv/src/VST_SDK/VST3_SDK/vstgui4/vstgui/lib/platform/linux/x11frame.cpp:350
#15 0x00007ffff49a1cf1 in Gtk::Widget_Class::draw_callback(_GtkWidget*, _cairo*) () at /usr/lib64/libgtkmm-3.0.so.1
#16 0x00007ffff6ab35ab in gtk_widget_draw_internal (widget=widget@entry=0x8d8210, cr=cr@entry=0xac13e0, clip_to_size=clip_to_size@entry=1) at gtkwidget.c:7017
#17 0x00007ffff6897190 in gtk_container_propagate_draw (container=container@entry=0x7273c0, child=0x8d8210, cr=cr@entry=0xac13e0) at gtkcontainer.c:3838
#18 0x00007ffff6901af1 in gtk_fixed_draw (widget=0x7273c0, cr=0xac13e0) at gtkfixed.c:588
#19 0x00007ffff49a1d7c in Gtk::Widget_Class::draw_callback(_GtkWidget*, _cairo*) () at /usr/lib64/libgtkmm-3.0.so.1
#20 0x00007ffff6ab35ab in gtk_widget_draw_internal (widget=widget@entry=0x7273c0, cr=cr@entry=0xac13e0, clip_to_size=clip_to_size@entry=1) at gtkwidget.c:7017
#21 0x00007ffff6897190 in gtk_container_propagate_draw (container=container@entry=0xaa70a0, child=0x7273c0, cr=cr@entry=0xac13e0) at gtkcontainer.c:3838
#22 0x00007ffff6897272 in gtk_container_draw (widget=0xaa70a0, cr=0xac13e0) at gtkcontainer.c:3658
#23 0x00007ffff6ac1331 in gtk_window_draw (widget=0xaa70a0, cr=0xac13e0) at gtkwindow.c:10212
#24 0x00007ffff49a1d7c in Gtk::Widget_Class::draw_callback(_GtkWidget*, _cairo*) () at /usr/lib64/libgtkmm-3.0.so.1
#25 0x00007ffff6ab35ab in gtk_widget_draw_internal (widget=0xaa70a0, cr=0xac13e0, clip_to_size=) at gtkwidget.c:7017
#26 0x00007ffff6abc8a8 in gtk_widget_render (widget=widget@entry=0xaa70a0, window=0x6e5660, region=) at gtkwidget.c:17503
#27 0x00007ffff695b5aa in gtk_main_do_event (event=0x7fffffffd340) at gtkmain.c:1824
#28 0x00007ffff6460f35 in _gdk_event_emit (event=event@entry=0x7fffffffd340) at gdkevents.c:73
#29 0x00007ffff64715c8 in _gdk_window_process_updates_recurse_helper (window=0x6e5660, expose_region=) at gdkwindow.c:3841
#30 0x00007ffff64727c6 in gdk_window_process_updates_internal (window=0x6e5660) at gdkwindow.c:3987
#31 0x00007ffff64729c4 in gdk_window_process_updates_with_mode (window=, recurse_mode=) at gdkwindow.c:4185
#32 0x00007ffff506c905 in g_closure_invoke () at /usr/lib64/libgobject-2.0.so.0
#33 0x00007ffff507e912 in () at /usr/lib64/libgobject-2.0.so.0
#34 0x00007ffff508756c in g_signal_emit_valist () at /usr/lib64/libgobject-2.0.so.0
#35 0x00007ffff508794f in g_signal_emit () at /usr/lib64/libgobject-2.0.so.0
#36 0x00007ffff6469f3f in _gdk_frame_clock_emit_paint (frame_clock=) at gdkframeclock.c:640
#37 0x00007ffff646a609 in gdk_frame_clock_paint_idle (data=0x7073a0) at gdkframeclockidle.c:430
#38 0x00007ffff6455808 in gdk_threads_dispatch (data=0x7ffec0) at gdk.c:743
#39 0x00007ffff4d93fc3 in () at /usr/lib64/libglib-2.0.so.0
#40 0x00007ffff4d9354a in g_main_context_dispatch () at /usr/lib64/libglib-2.0.so.0
#41 0x00007ffff4d93900 in () at /usr/lib64/libglib-2.0.so.0
#42 0x00007ffff4d939ac in g_main_context_iteration () at /usr/lib64/libglib-2.0.so.0
#43 0x00007ffff695a871 in gtk_main_iteration_do (blocking=0) at gtkmain.c:1437
#44 0x0000000000426000 in Steinberg::Vst::EditorHost::Platform::eventLoop() (this=0x686fa0 Steinberg::Vst::EditorHost::Platform::instance()::gInstance)
---Type to continue, or q to quit---
at /home/kv/src/VST_SDK/VST3_SDK/public.sdk/samples/vst/editorhost/source/platform/linux/platform.cpp:218
#45 0x0000000000425f8b in Steinberg::Vst::EditorHost::Platform::run(std::vector<std::__cxx11::basic_string<char, std::char_traits, std::allocator >, std::allocator<std::__cxx11::basic_string<char, std::char_traits, std::allocator > > > const&) (this=0x686fa0 Steinberg::Vst::EditorHost::Platform::instance()::gInstance, cmdArgs=std::vector of length 1, capacity 1 = {...}) at /home/kv/src/VST_SDK/VST3_SDK/public.sdk/samples/vst/editorhost/source/platform/linux/platform.cpp:186
#46 0x00000000004261dc in main(int, char**) (argc=2, argv=0x7fffffffdcb8) at /home/kv/src/VST_SDK/VST3_SDK/public.sdk/samples/vst/editorhost/source/platform/linux/platform.cpp:251

Automation list is wrong in AAX Wrapper

The wrong set of parameters is added in AAXWrapper_Parameters::EffectInit() (see screenshot).
You can see the faulty extra Bypass parameter described in #11.
Besides that the "Wet Mix" and "Level" parameters are missing, although they are marked as automatable and they are correctly exposed in VST2, VST3 and AU.

I have also inspected the loop that sets up mParameterMap in Vst2Wrapper::setupParameters() which correctly iterates the expected parameters. The loop in AAXWrapper_Parameters::EffectInit(), however then finds and adds the wrong set of parameters that can also be seen in the screenshot.

bucket

ASAN issue with editor

=================================================================
==16320==ERROR: AddressSanitizer: new-delete-type-mismatch on 0x607000076760 in thread T0:
  object passed to delete has wrong type:
  size of the allocated type:   72 bytes;
  size of the deallocated type: 48 bytes.
Diva VST3 telling Unknown host about latency change, host should request number of latency samples next
    #0 0x7fba8d422b51 in operator delete(void*, unsigned long) /build/gcc-multilib/src/gcc/libsanitizer/asan/asan_new_delete.cc:140
    #1 0x7fba89e62d2a in Gtk::Container::foreach(sigc::slot<void, Gtk::Widget&, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil> const&) (/usr/lib/libgtkmm-3.0.so.1+0x316d2a)
    #2 0x7fba89e62eb5 in Gtk::Container::show_all_children(bool) (/usr/lib/libgtkmm-3.0.so.1+0x316eb5)
    #3 0x55a07f86e54c in Steinberg::Vst::EditorHost::WindowGtk::WindowGtk() ../public.sdk/samples/vst-hosting/editorhost/source/platform/linux/window.cpp:84
    #4 0x55a07f86d85d in Steinberg::Vst::EditorHost::X11Window::Impl::Impl(Steinberg::Vst::EditorHost::X11Window*) ../public.sdk/samples/vst-hosting/editorhost/source/platform/linux/window.cpp:343
    #5 0x55a07f86d535 in Steinberg::Vst::EditorHost::X11Window::X11Window() ../public.sdk/samples/vst-hosting/editorhost/source/platform/linux/window.cpp:266
    #6 0x55a07f873921 in void __gnu_cxx::new_allocator<Steinberg::Vst::EditorHost::X11Window>::construct<Steinberg::Vst::EditorHost::X11Window>(Steinberg::Vst::EditorHost::X11Window*) /usr/include/c++/7.2.0/ext/new_allocator.h:136
    #7 0x55a07f8734ce in void std::allocator_traits<std::allocator<Steinberg::Vst::EditorHost::X11Window> >::construct<Steinberg::Vst::EditorHost::X11Window>(std::allocator<Steinberg::Vst::EditorHost::X11Window>&, Steinberg::Vst::EditorHost::X11Window*) /usr/include/c++/7.2.0/bits/alloc_traits.h:475
    #8 0x55a07f872d03 in std::_Sp_counted_ptr_inplace<Steinberg::Vst::EditorHost::X11Window, std::allocator<Steinberg::Vst::EditorHost::X11Window>, (__gnu_cxx::_Lock_policy)2>::_Sp_counted_ptr_inplace<>(std::allocator<Steinberg::Vst::EditorHost::X11Window>) /usr/include/c++/7.2.0/bits/shared_ptr_base.h:526
    #9 0x55a07f871f12 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<Steinberg::Vst::EditorHost::X11Window, std::allocator<Steinberg::Vst::EditorHost::X11Window>>(std::_Sp_make_shared_tag, Steinberg::Vst::EditorHost::X11Window*, std::allocator<Steinberg::Vst::EditorHost::X11Window> const&) /usr/include/c++/7.2.0/bits/shared_ptr_base.h:637
    #10 0x55a07f870d6f in std::__shared_ptr<Steinberg::Vst::EditorHost::X11Window, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<std::allocator<Steinberg::Vst::EditorHost::X11Window>>(std::_Sp_make_shared_tag, std::allocator<Steinberg::Vst::EditorHost::X11Window> const&) /usr/include/c++/7.2.0/bits/shared_ptr_base.h:1295
    #11 0x55a07f8702a7 in std::shared_ptr<Steinberg::Vst::EditorHost::X11Window>::shared_ptr<std::allocator<Steinberg::Vst::EditorHost::X11Window>>(std::_Sp_make_shared_tag, std::allocator<Steinberg::Vst::EditorHost::X11Window> const&) /usr/include/c++/7.2.0/bits/shared_ptr.h:344
    #12 0x55a07f86f8af in std::shared_ptr<Steinberg::Vst::EditorHost::X11Window> std::allocate_shared<Steinberg::Vst::EditorHost::X11Window, std::allocator<Steinberg::Vst::EditorHost::X11Window>>(std::allocator<Steinberg::Vst::EditorHost::X11Window> const&) /usr/include/c++/7.2.0/bits/shared_ptr.h:691
    #13 0x55a07f86f00b in std::shared_ptr<Steinberg::Vst::EditorHost::X11Window> std::make_shared<Steinberg::Vst::EditorHost::X11Window>() /usr/include/c++/7.2.0/bits/shared_ptr.h:707
    #14 0x55a07f86d422 in Steinberg::Vst::EditorHost::X11Window::make(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, Steinberg::Vst::EditorHost::Size, bool, std::shared_ptr<Steinberg::Vst::EditorHost::IWindowController> const&, _XDisplay*, std::function<void (Steinberg::Vst::EditorHost::X11Window*)> const&) ../public.sdk/samples/vst-hosting/editorhost/source/platform/linux/window.cpp:255
    #15 0x55a07f8612fa in Steinberg::Vst::EditorHost::Platform::createWindow(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, Steinberg::Vst::EditorHost::Size, bool, std::shared_ptr<Steinberg::Vst::EditorHost::IWindowController> const&) ../public.sdk/samples/vst-hosting/editorhost/source/platform/linux/platform.cpp:127
    #16 0x55a07f84bf59 in Steinberg::Vst::EditorHost::App::createViewAndShow(Steinberg::Vst::IEditController*) ../public.sdk/samples/vst-hosting/editorhost/source/editorhost.cpp:213
    #17 0x55a07f84bba5 in Steinberg::Vst::EditorHost::App::openEditor(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, VST3::Optional<VST3::UID>, unsigned int) ../public.sdk/samples/vst-hosting/editorhost/source/editorhost.cpp:187
    #18 0x55a07f84c3c6 in Steinberg::Vst::EditorHost::App::init(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&) ../public.sdk/samples/vst-hosting/editorhost/source/editorhost.cpp:262
    #19 0x55a07f86166d in Steinberg::Vst::EditorHost::Platform::run(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&) ../public.sdk/samples/vst-hosting/editorhost/source/platform/linux/platform.cpp:185
    #20 0x55a07f8618fc in main ../public.sdk/samples/vst-hosting/editorhost/source/platform/linux/platform.cpp:251
    #21 0x7fba87da1f69 in __libc_start_main (/usr/lib/libc.so.6+0x20f69)
    #22 0x55a07f84aad9 in _start (/home/abique/develop/vst3sdk/build/bin/editorhost+0x1bad9)

0x607000076760 is located 0 bytes inside of 72-byte region [0x607000076760,0x6070000767a8)
allocated by thread T0 here:
    #0 0x7fba8d421489 in operator new(unsigned long) /build/gcc-multilib/src/gcc/libsanitizer/asan/asan_new_delete.cc:80
    #1 0x7fba89e63e21 in sigc::internal::typed_slot_rep<sigc::mem_functor0<void, Gtk::Widget> >::dup(void*) (/usr/lib/libgtkmm-3.0.so.1+0x317e21)

SUMMARY: AddressSanitizer: new-delete-type-mismatch /build/gcc-multilib/src/gcc/libsanitizer/asan/asan_new_delete.cc:140 in operator delete(void*, unsigned long)
==16320==HINT: if you don't care about these errors you may set ASAN_OPTIONS=new_delete_type_mismatch=0
==16320==ABORTING
Aborted (core dumped)

new-delete mismatch

=================================================================
==31886==ERROR: AddressSanitizer: new-delete-type-mismatch on 0x6070000727f0 in thread T0:
  object passed to delete has wrong type:
  size of the allocated type:   72 bytes;
  size of the deallocated type: 48 bytes.
    #0 0x7f616246e421 in operator delete(void*, unsigned long) /build/gcc/src/gcc/libsanitizer/asan/asan_new_delete.cc:151
    #1 0x7f6160de10aa in Gtk::Container::foreach(sigc::slot<void, Gtk::Widget&, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil> const&) (/usr/lib/libgtkmm-3.0.so.1+0x3300aa)
    #2 0x7f6160de1215 in Gtk::Container::show_all_children(bool) (/usr/lib/libgtkmm-3.0.so.1+0x330215)
    #3 0x5625a698061c in Steinberg::Vst::EditorHost::WindowGtk::WindowGtk() ../public.sdk/samples/vst-hosting/editorhost/source/platform/linux/window.cpp:84
    #4 0x5625a697f92d in Steinberg::Vst::EditorHost::X11Window::Impl::Impl(Steinberg::Vst::EditorHost::X11Window*) ../public.sdk/samples/vst-hosting/editorhost/source/platform/linux/window.cpp:344
    #5 0x5625a697f605 in Steinberg::Vst::EditorHost::X11Window::X11Window() ../public.sdk/samples/vst-hosting/editorhost/source/platform/linux/window.cpp:267
    #6 0x5625a69859fd in void __gnu_cxx::new_allocator<Steinberg::Vst::EditorHost::X11Window>::construct<Steinberg::Vst::EditorHost::X11Window>(Steinberg::Vst::EditorHost::X11Window*) /usr/include/c++/7.2.1/ext/new_allocator.h:136
    #7 0x5625a69855aa in void std::allocator_traits<std::allocator<Steinberg::Vst::EditorHost::X11Window> >::construct<Steinberg::Vst::EditorHost::X11Window>(std::allocator<Steinberg::Vst::EditorHost::X11Window>&, Steinberg::Vst::EditorHost::X11Window*) /usr/include/c++/7.2.1/bits/alloc_traits.h:475
    #8 0x5625a6984ddf in std::_Sp_counted_ptr_inplace<Steinberg::Vst::EditorHost::X11Window, std::allocator<Steinberg::Vst::EditorHost::X11Window>, (__gnu_cxx::_Lock_policy)2>::_Sp_counted_ptr_inplace<>(std::allocator<Steinberg::Vst::EditorHost::X11Window>) /usr/include/c++/7.2.1/bits/shared_ptr_base.h:526
    #9 0x5625a6983fee in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<Steinberg::Vst::EditorHost::X11Window, std::allocator<Steinberg::Vst::EditorHost::X11Window>>(std::_Sp_make_shared_tag, Steinberg::Vst::EditorHost::X11Window*, std::allocator<Steinberg::Vst::EditorHost::X11Window> const&) /usr/include/c++/7.2.1/bits/shared_ptr_base.h:637
    #10 0x5625a6982e4b in std::__shared_ptr<Steinberg::Vst::EditorHost::X11Window, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<std::allocator<Steinberg::Vst::EditorHost::X11Window>>(std::_Sp_make_shared_tag, std::allocator<Steinberg::Vst::EditorHost::X11Window> const&) /usr/include/c++/7.2.1/bits/shared_ptr_base.h:1295
    #11 0x5625a6982383 in std::shared_ptr<Steinberg::Vst::EditorHost::X11Window>::shared_ptr<std::allocator<Steinberg::Vst::EditorHost::X11Window>>(std::_Sp_make_shared_tag, std::allocator<Steinberg::Vst::EditorHost::X11Window> const&) /usr/include/c++/7.2.1/bits/shared_ptr.h:344
    #12 0x5625a698198b in std::shared_ptr<Steinberg::Vst::EditorHost::X11Window> std::allocate_shared<Steinberg::Vst::EditorHost::X11Window, std::allocator<Steinberg::Vst::EditorHost::X11Window>>(std::allocator<Steinberg::Vst::EditorHost::X11Window> const&) /usr/include/c++/7.2.1/bits/shared_ptr.h:691
    #13 0x5625a69810e7 in std::shared_ptr<Steinberg::Vst::EditorHost::X11Window> std::make_shared<Steinberg::Vst::EditorHost::X11Window>() /usr/include/c++/7.2.1/bits/shared_ptr.h:707
    #14 0x5625a697f4f2 in Steinberg::Vst::EditorHost::X11Window::make(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, Steinberg::Vst::EditorHost::Size, bool, std::shared_ptr<Steinberg::Vst::EditorHost::IWindowController> const&, _XDisplay*, std::function<void (Steinberg::Vst::EditorHost::X11Window*)> const&) ../public.sdk/samples/vst-hosting/editorhost/source/platform/linux/window.cpp:256
    #15 0x5625a69733ca in Steinberg::Vst::EditorHost::Platform::createWindow(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, Steinberg::Vst::EditorHost::Size, bool, std::shared_ptr<Steinberg::Vst::EditorHost::IWindowController> const&) ../public.sdk/samples/vst-hosting/editorhost/source/platform/linux/platform.cpp:127
    #16 0x5625a695e029 in Steinberg::Vst::EditorHost::App::createViewAndShow(Steinberg::Vst::IEditController*) ../public.sdk/samples/vst-hosting/editorhost/source/editorhost.cpp:213
    #17 0x5625a695dc75 in Steinberg::Vst::EditorHost::App::openEditor(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, VST3::Optional<VST3::UID>, unsigned int) ../public.sdk/samples/vst-hosting/editorhost/source/editorhost.cpp:187
    #18 0x5625a695e496 in Steinberg::Vst::EditorHost::App::init(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&) ../public.sdk/samples/vst-hosting/editorhost/source/editorhost.cpp:262
    #19 0x5625a697373d in Steinberg::Vst::EditorHost::Platform::run(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&) ../public.sdk/samples/vst-hosting/editorhost/source/platform/linux/platform.cpp:185
    #20 0x5625a69739cc in main ../public.sdk/samples/vst-hosting/editorhost/source/platform/linux/platform.cpp:251
    #21 0x7f615fea5222 in __libc_start_main (/usr/lib/libc.so.6+0x24222)
    #22 0x5625a695cba9 in _start (/home/abique/develop/vst3sdk/build/bin/editorhost+0x1bba9)

0x6070000727f0 is located 0 bytes inside of 72-byte region [0x6070000727f0,0x607000072838)
allocated by thread T0 here:
    #0 0x7f616246cd29 in operator new(unsigned long) /build/gcc/src/gcc/libsanitizer/asan/asan_new_delete.cc:90
    #1 0x7f6160de20e1 in sigc::internal::typed_slot_rep<sigc::mem_functor0<void, Gtk::Widget> >::dup(void*) (/usr/lib/libgtkmm-3.0.so.1+0x3310e1)

SUMMARY: AddressSanitizer: new-delete-type-mismatch /build/gcc/src/gcc/libsanitizer/asan/asan_new_delete.cc:151 in operator delete(void*, unsigned long)
==31886==HINT: if you don't care about these errors you may set ASAN_OPTIONS=new_delete_type_mismatch=0
==31886==ABORTING

FileStream class is broken by design

The FileStream class in the SDK is a thin wrapper around the C FILE* type. Unfortunately when using this for writing the actual writing happens in the fclose method (as fwrite calls are likely just into a buffer in RAM). The fclose method is only called in the FileStream destructor and any error code from fclose is silently ignored.

Doing the actual writing to disk when the ref count goes to 0 is not a good idea and swallowing up the error code and not being able to report it to the user in a meaningful way (eg disk full, permission denied) is bad programming practice.

Suggestion would be to add an explicit close method to the FileStream class so that when writing something to the stream it is possible to know for sure whether the write succeeded .

Unfortunately, getting useful error messages would require a redesign of the entire stream API as all methods just return a tresult which never contains any useful error message.

web hosting for documentation

It would be nice to have the documentation hosted online somewhere. Having to download the SDK to view it is inconvenient.

no suitable loudspeaker layout for higher order Ambisonic or arbitrary input signals

With VST2 being deprecated, a lot of higher order Ambisonics plugin manufacturers struggle with portion to VST3, as there's no suitable loudspeaker layout for higher order Ambisonics, speaking up to 7th order -> 64 channels.

Especially, plug-ins with variable order struggle, as there's no discreteChannel layout anymore, especially as discrete layouts aren't allowed to be the default layout (well at least JUCE states that with an assertion).

Even when forced, plug-ins hosts won't send more than 24 channels of audio (22.2?), as it seems to be the layout with the highest amount of channels. However, that number varies from host to host.

Decoders/renderers to 3d audio loudspeaker arrays also struggle as those arrays don't have to be regular/standard layouts.

It's not solely a problem with Ambisonic plug-ins, as there are other multi-channel plug-ins out there, which support an arbitrary number of input channels (sources) which will be encoded into a different format, e.g. up to 64 sources into a panner. Also these 64 input channels need a layout for arbitrary inputs.

The issue has been already discussed here:
https://sdk.steinberg.net/viewtopic.php?f=4&t=549
https://sdk.steinberg.net/viewtopic.php?f=4&t=624

So, please add a configuration for discrete channels, as already proposed by Yvan Grabit in the first linked thread!

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.