From 9b3a513ae3ea2b8955c013bcf1f9c6625a9daf88 Mon Sep 17 00:00:00 2001 From: Anthony Nicholls Date: Fri, 30 Aug 2024 11:51:51 +0100 Subject: [PATCH] VST3: Update SDK to 3.7.12 --- .../Builds/Android/app/CMakeLists.txt | 6 + .../VisualStudio2019/DemoRunner_App.vcxproj | 5 + .../DemoRunner_App.vcxproj.filters | 9 + .../VisualStudio2022/DemoRunner_App.vcxproj | 5 + .../DemoRunner_App.vcxproj.filters | 9 + .../Builds/Android/app/CMakeLists.txt | 6 + .../AudioPerformanceTest_App.vcxproj | 5 + .../AudioPerformanceTest_App.vcxproj.filters | 9 + .../Builds/Android/app/CMakeLists.txt | 6 + .../AudioPluginHost_App.vcxproj | 5 + .../AudioPluginHost_App.vcxproj.filters | 9 + .../AudioPluginHost_App.vcxproj | 5 + .../AudioPluginHost_App.vcxproj.filters | 9 + .../Builds/Android/app/CMakeLists.txt | 6 + .../NetworkGraphicsDemo_App.vcxproj | 5 + .../NetworkGraphicsDemo_App.vcxproj.filters | 9 + .../UnitTestRunner_ConsoleApp.vcxproj | 5 + .../UnitTestRunner_ConsoleApp.vcxproj.filters | 9 + .../UnitTestRunner_ConsoleApp.vcxproj | 5 + .../UnitTestRunner_ConsoleApp.vcxproj.filters | 9 + .../WindowsDLL_StaticLibrary.vcxproj | 5 + .../WindowsDLL_StaticLibrary.vcxproj.filters | 9 + .../VST3/juce_VST3ManifestHelper.cpp | 5 + .../format_types/VST3_SDK/README.md | 20 +- .../VST3_SDK/VST3_License_Agreement.pdf | Bin 196498 -> 204538 bytes .../VST3_SDK/base/source/fbuffer.cpp | 2 +- .../VST3_SDK/base/source/fobject.cpp | 22 + .../VST3_SDK/base/source/fstreamer.cpp | 2 +- .../VST3_SDK/base/source/fstring.cpp | 10 +- .../VST3_SDK/base/source/fstring.h | 11 + .../VST3_SDK/base/source/updatehandler.cpp | 5 +- .../VST3_SDK/pluginterfaces/base/fplatform.h | 5 - .../VST3_SDK/pluginterfaces/base/fstrdefs.h | 4 +- .../VST3_SDK/pluginterfaces/base/funknown.cpp | 10 +- .../VST3_SDK/pluginterfaces/base/funknown.h | 5 - .../pluginterfaces/base/funknownimpl.h | 470 ++++++++++++++++++ .../VST3_SDK/pluginterfaces/base/fvariant.h | 9 +- .../pluginterfaces/vst/ivstcomponent.h | 3 +- .../pluginterfaces/vst/ivsteditcontroller.h | 455 +++++++++-------- .../pluginterfaces/vst/ivstremapparamid.h | 7 +- .../VST3_SDK/pluginterfaces/vst/vstspeaker.h | 22 +- .../VST3_SDK/pluginterfaces/vst/vsttypes.h | 6 +- .../moduleinfotool/source/main.cpp | 4 +- .../source/common/commonstringconvert.cpp | 121 +++++ .../source/common/commonstringconvert.h | 94 ++++ .../public.sdk/source/common/pluginview.cpp | 4 +- .../public.sdk/source/common/readfile.cpp | 11 +- .../public.sdk/source/common/readfile.h | 2 +- .../source/vst/hosting/hostclasses.cpp | 2 +- .../public.sdk/source/vst/hosting/module.cpp | 11 +- .../source/vst/hosting/module_linux.cpp | 13 +- .../source/vst/hosting/module_mac.mm | 4 +- .../source/vst/hosting/module_win32.cpp | 69 ++- .../source/vst/utility/stringconvert.cpp | 88 ++-- .../source/vst/utility/stringconvert.h | 158 ++++-- .../source/vst/utility/vst2persistence.cpp | 2 +- .../source/vst/vstcomponentbase.cpp | 4 +- .../source/vst/vsteditcontroller.cpp | 10 +- .../format_types/juce_VST3Headers.h | 21 +- 59 files changed, 1455 insertions(+), 386 deletions(-) create mode 100644 modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknownimpl.h create mode 100644 modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/commonstringconvert.cpp create mode 100644 modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/commonstringconvert.h diff --git a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt index 6a032fa594..26ca267cab 100644 --- a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt +++ b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt @@ -674,6 +674,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ftypes.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.cpp" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknownimpl.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/futils.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fvariant.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ibstream.h" @@ -721,6 +722,8 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/LICENSE.txt" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/README.md" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/samples/vst-utilities/moduleinfotool/source/main.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/commonstringconvert.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/commonstringconvert.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.cpp" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.cpp" @@ -3191,6 +3194,7 @@ set_source_files_properties( "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ftypes.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.cpp" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknownimpl.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/futils.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fvariant.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ibstream.h" @@ -3238,6 +3242,8 @@ set_source_files_properties( "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/LICENSE.txt" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/README.md" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/samples/vst-utilities/moduleinfotool/source/main.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/commonstringconvert.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/commonstringconvert.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.cpp" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.cpp" diff --git a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj index f80394e608..9fcc7af0b6 100644 --- a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj +++ b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj @@ -914,6 +914,9 @@ true + + true + true @@ -3498,6 +3501,7 @@ + @@ -3541,6 +3545,7 @@ + diff --git a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters index 8a42e5619d..f554894e99 100644 --- a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters +++ b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters @@ -1603,6 +1603,9 @@ JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common @@ -5082,6 +5085,9 @@ JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base @@ -5211,6 +5217,9 @@ JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common diff --git a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj index 7b3c5bc01a..6434b0b275 100644 --- a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj +++ b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj @@ -914,6 +914,9 @@ true + + true + true @@ -3498,6 +3501,7 @@ + @@ -3541,6 +3545,7 @@ + diff --git a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters index 0269f158b0..1c9b0a4757 100644 --- a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters +++ b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters @@ -1603,6 +1603,9 @@ JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common @@ -5082,6 +5085,9 @@ JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base @@ -5211,6 +5217,9 @@ JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common diff --git a/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt b/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt index d14a0bf159..1da8107684 100644 --- a/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt +++ b/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt @@ -629,6 +629,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ftypes.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.cpp" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknownimpl.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/futils.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fvariant.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ibstream.h" @@ -676,6 +677,8 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/LICENSE.txt" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/README.md" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/samples/vst-utilities/moduleinfotool/source/main.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/commonstringconvert.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/commonstringconvert.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.cpp" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.cpp" @@ -2829,6 +2832,7 @@ set_source_files_properties( "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ftypes.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.cpp" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknownimpl.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/futils.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fvariant.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ibstream.h" @@ -2876,6 +2880,8 @@ set_source_files_properties( "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/LICENSE.txt" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/README.md" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/samples/vst-utilities/moduleinfotool/source/main.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/commonstringconvert.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/commonstringconvert.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.cpp" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.cpp" diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj index 723a414e57..43b13f21c8 100644 --- a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj +++ b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj @@ -874,6 +874,9 @@ true + + true + true @@ -3070,6 +3073,7 @@ + @@ -3113,6 +3117,7 @@ + diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters index d9891e52d2..daafb5b4ff 100644 --- a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters +++ b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters @@ -1420,6 +1420,9 @@ JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common @@ -4440,6 +4443,9 @@ JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base @@ -4569,6 +4575,9 @@ JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common diff --git a/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt b/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt index 9e780dd435..8b81ebb973 100644 --- a/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt +++ b/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt @@ -662,6 +662,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ftypes.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.cpp" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknownimpl.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/futils.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fvariant.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ibstream.h" @@ -709,6 +710,8 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/LICENSE.txt" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/README.md" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/samples/vst-utilities/moduleinfotool/source/main.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/commonstringconvert.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/commonstringconvert.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.cpp" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.cpp" @@ -3015,6 +3018,7 @@ set_source_files_properties( "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ftypes.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.cpp" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknownimpl.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/futils.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fvariant.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ibstream.h" @@ -3062,6 +3066,8 @@ set_source_files_properties( "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/LICENSE.txt" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/README.md" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/samples/vst-utilities/moduleinfotool/source/main.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/commonstringconvert.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/commonstringconvert.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.cpp" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.cpp" diff --git a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj index 0e15fa3ef8..0ebb582415 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj +++ b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj @@ -882,6 +882,9 @@ true + + true + true @@ -3250,6 +3253,7 @@ + @@ -3293,6 +3297,7 @@ + diff --git a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters index c9c303abc8..112b567ee5 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters +++ b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters @@ -1495,6 +1495,9 @@ JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common @@ -4716,6 +4719,9 @@ JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base @@ -4845,6 +4851,9 @@ JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common diff --git a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj index 8defa769a0..31e0e4b400 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj +++ b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj @@ -882,6 +882,9 @@ true + + true + true @@ -3250,6 +3253,7 @@ + @@ -3293,6 +3297,7 @@ + diff --git a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters index 00323eac0b..739f98447a 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters +++ b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters @@ -1495,6 +1495,9 @@ JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common @@ -4716,6 +4719,9 @@ JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base @@ -4845,6 +4851,9 @@ JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common diff --git a/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt b/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt index 8c6cb29e72..fe01c8482e 100644 --- a/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt +++ b/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt @@ -633,6 +633,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ftypes.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.cpp" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknownimpl.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/futils.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fvariant.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ibstream.h" @@ -680,6 +681,8 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/LICENSE.txt" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/README.md" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/samples/vst-utilities/moduleinfotool/source/main.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/commonstringconvert.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/commonstringconvert.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.cpp" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.cpp" @@ -2913,6 +2916,7 @@ set_source_files_properties( "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ftypes.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.cpp" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknownimpl.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/futils.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fvariant.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ibstream.h" @@ -2960,6 +2964,8 @@ set_source_files_properties( "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/LICENSE.txt" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/README.md" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/samples/vst-utilities/moduleinfotool/source/main.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/commonstringconvert.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/commonstringconvert.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.cpp" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.h" "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.cpp" diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj index dbd231cf59..3e3b3b4bf2 100644 --- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj +++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj @@ -874,6 +874,9 @@ true + + true + true @@ -3161,6 +3164,7 @@ + @@ -3204,6 +3208,7 @@ + diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters index 8540038cb4..c9f5a49f51 100644 --- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters +++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters @@ -1450,6 +1450,9 @@ JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common @@ -4581,6 +4584,9 @@ JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base @@ -4710,6 +4716,9 @@ JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common diff --git a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj index b29b374f90..67f28ba25b 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj +++ b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj @@ -890,6 +890,9 @@ true + + true + true @@ -3346,6 +3349,7 @@ + @@ -3389,6 +3393,7 @@ + diff --git a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters index 557924d8bf..3a61b8bbef 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters +++ b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters @@ -1516,6 +1516,9 @@ JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common @@ -4830,6 +4833,9 @@ JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base @@ -4959,6 +4965,9 @@ JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common diff --git a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj index c5f60508cd..785a09d65f 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj +++ b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj @@ -890,6 +890,9 @@ true + + true + true @@ -3346,6 +3349,7 @@ + @@ -3389,6 +3393,7 @@ + diff --git a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters index 977ae82575..c90aeca7db 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters +++ b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters @@ -1516,6 +1516,9 @@ JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common @@ -4830,6 +4833,9 @@ JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base @@ -4959,6 +4965,9 @@ JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common diff --git a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj index 7a022809df..9f00cbdb16 100644 --- a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj +++ b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj @@ -873,6 +873,9 @@ true + + true + true @@ -3137,6 +3140,7 @@ + @@ -3180,6 +3184,7 @@ + diff --git a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters index 7ea6ca93da..1a0a02a238 100644 --- a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters +++ b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters @@ -1447,6 +1447,9 @@ JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common @@ -4548,6 +4551,9 @@ JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base @@ -4677,6 +4683,9 @@ JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common diff --git a/modules/juce_audio_plugin_client/VST3/juce_VST3ManifestHelper.cpp b/modules/juce_audio_plugin_client/VST3/juce_VST3ManifestHelper.cpp index 1310d079ac..c682f21dda 100644 --- a/modules/juce_audio_plugin_client/VST3/juce_VST3ManifestHelper.cpp +++ b/modules/juce_audio_plugin_client/VST3/juce_VST3ManifestHelper.cpp @@ -55,6 +55,10 @@ JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wc++98-compat-extra-semi", JUCE_BEGIN_IGNORE_WARNINGS_MSVC (6387 6031) +#ifndef _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING + #define _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING +#endif + #ifndef NOMINMAX #define NOMINMAX 1 #endif @@ -70,6 +74,7 @@ JUCE_BEGIN_IGNORE_WARNINGS_MSVC (6387 6031) #include #include #include +#include #include #include #include diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/README.md b/modules/juce_audio_processors/format_types/VST3_SDK/README.md index 3befbc0642..3f81424007 100644 --- a/modules/juce_audio_processors/format_types/VST3_SDK/README.md +++ b/modules/juce_audio_processors/format_types/VST3_SDK/README.md @@ -22,7 +22,7 @@ - AAX, AUv3 and AU Wrappers - VST 3 plug-ins Examples -The full VST 3 SDK is available [here!](https://www.steinberg.net/en/company/developers.html). It contains: +The full **VST 3 SDK** is available [here!](https://www.steinberg.net/en/company/developers.html). 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. @@ -33,15 +33,15 @@ The full VST 3 SDK is available [here!](https://www.steinberg.net/en/company/dev 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| +| 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 - 14 |x86, x86_64, Apple Silicon |Xcode 10 - 15 | | +|iOS 13 - iOS 17 |arm64 |Xcode 11 - 15 | | +|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| ---
diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/VST3_License_Agreement.pdf b/modules/juce_audio_processors/format_types/VST3_SDK/VST3_License_Agreement.pdf index ec7da498273fddabadaec5a88e8fb1243c71196d..af7d0246d7f840344801d295d0b35e427dad1812 100644 GIT binary patch delta 136738 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

  • GH;#C_A#g?09iIWO(9-O4gnVxc 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 BG*18k delta 131018 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 diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.cpp b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.cpp index 45dd41940a..bf95b50fb0 100644 --- a/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.cpp +++ b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.cpp @@ -304,7 +304,7 @@ bool Buffer::makeHexString (String& result) if (data == nullptr || bytes == 0) return false; - char8* stringBuffer = (char8*)malloc ((bytes * 2) + 1); + char8* stringBuffer = NEWSTR8 ((bytes * 2) + 1); if (!stringBuffer) return false; diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.cpp b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.cpp index 239afb5617..d58df95d06 100644 --- a/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.cpp +++ b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.cpp @@ -39,6 +39,7 @@ #include "base/source/fobject.h" #include "base/thread/include/flock.h" +#include #include #define SMTG_VALIDATE_DEPENDENCY_COUNT DEVELOPMENT // validating dependencyCount @@ -49,6 +50,13 @@ namespace Steinberg { +// Entry point for addRef/release tracking. See fobjecttracker.h +//------------------------------------------------------------------------ +#if DEVELOPMENT +using FObjectTrackerFn = std::function; +FObjectTrackerFn gFObjectTracker = nullptr; +#endif + IUpdateHandler* FObject::gUpdateHandler = nullptr; //------------------------------------------------------------------------ @@ -112,12 +120,26 @@ FObject::~FObject () //------------------------------------------------------------------------ uint32 PLUGIN_API FObject::addRef () { +#if DEVELOPMENT + if (gFObjectTracker) + { + gFObjectTracker (this, true); + } +#endif + return FUnknownPrivate::atomicAdd (refCount, 1); } //------------------------------------------------------------------------ uint32 PLUGIN_API FObject::release () { +#if DEVELOPMENT + if (gFObjectTracker) + { + gFObjectTracker (this, false); + } +#endif + if (FUnknownPrivate::atomicAdd (refCount, -1) == 0) { refCount = -1000; diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.cpp b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.cpp index 3a1a2a5aad..af193cf189 100644 --- a/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.cpp +++ b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.cpp @@ -723,7 +723,7 @@ char8* FStreamer::readStr8 () if (length > 262144) return nullptr; - char8* s = (length > 0) ? NEWVEC char8[length] : nullptr; + char8* s = (length > 0) ? NEWSTR8 (length) : nullptr; if (s) readRaw (s, length * sizeof (char8)); return s; diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.cpp b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.cpp index 77024c248e..60cbf5d128 100644 --- a/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.cpp +++ b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.cpp @@ -233,7 +233,7 @@ static inline Steinberg::int32 sprintf16 (Steinberg::char16* str, const Steinber { va_list marker; va_start (marker, format); - return vsnwprintf (str, -1, format, marker); + return vsnwprintf (str, static_cast (-1), format, marker); } #elif SMTG_OS_LINUX @@ -3564,6 +3564,14 @@ bool String::fromVariant (const FVariant& var) printInt64 (var.getInt ()); return true; + case FVariant::kObject: + if (auto string = ICast (var.getObject ())) + if (string->isWideString ()) + assign (string->getText16 ()); + else + assign (string->getText8 ()); + return true; + default: remove (); } diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.h b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.h index b8676d6d86..3332e47c92 100644 --- a/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.h +++ b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.h @@ -45,6 +45,7 @@ #include "base/source/fobject.h" #include +#include namespace Steinberg { @@ -307,6 +308,10 @@ protected: Extends class ConstString by operations which allow modifications. +If allocated externally and passed in via take() or extracted via pass(), memory +is expected to be allocated with C's malloc() (rather than new) and deallocated with free(). +Use the NEWSTR8/16 and DELETESTR8/16 macros below. + \see ConstString */ //----------------------------------------------------------------------------- class String : public ConstString @@ -481,6 +486,12 @@ private: bool checkToMultiByte (uint32 destCodePage = kCP_Default) const; // to remove debug code from inline - const_cast inside!!! }; +// String memory allocation macros +#define NEWSTR8(len) ((char8*)::malloc(len)) // len includes trailing zero +#define NEWSTR16(len) ((char16*)::malloc(2*(len))) +#define DELETESTR8(p) (::free((char*)(p))) // cast to strip const +#define DELETESTR16(p) (::free((char16*)(p))) + // String concatenation functions. inline String operator+ (const ConstString& s1, const ConstString& s2) {return String (s1).append (s2);} inline String operator+ (const ConstString& s1, const char8* s2) {return String (s1).append (s2);} diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.cpp b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.cpp index e722d45ed7..b2caf8ac4e 100644 --- a/modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.cpp +++ b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.cpp @@ -72,7 +72,10 @@ inline IPtr getUnknownBase (FUnknown* unknown) { FUnknown* result = nullptr; if (unknown) - unknown->queryInterface (FUnknown::iid, (void**)&result); + { + if (unknown->queryInterface (FObject::iid, (void**)&result) != kResultTrue) + unknown->queryInterface (FUnknown::iid, (void**)&result); + } return owned (result); } diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fplatform.h b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fplatform.h index fea5e8d629..5c3b6fa724 100644 --- a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fplatform.h +++ b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fplatform.h @@ -82,14 +82,9 @@ #define SMTG_EXPORT_SYMBOL __declspec (dllexport) #define SMTG_HIDDEN_SYMBOL - #ifndef _CRT_SECURE_NO_WARNINGS - #define _CRT_SECURE_NO_WARNINGS - #endif - #ifdef _MSC_VER #pragma warning (disable : 4244) //! @brief warning C4244: Conversion from 'type1' to 'type2', possible loss of data. #pragma warning (disable : 4250) //! @brief warning C4250: Inheritance via dominance is allowed - #pragma warning (disable : 4996) //! @brief warning C4996: deprecated functions #pragma warning (3 : 4189) //! @brief warning C4189: local variable is initialized but not referenced #pragma warning (3 : 4238) //! @brief warning C4238: nonstandard extension used : class rvalue used as lvalue diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fstrdefs.h b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fstrdefs.h index a365b69594..42bb0b91d5 100644 --- a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fstrdefs.h +++ b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fstrdefs.h @@ -86,11 +86,13 @@ #define ENDLINE ENDLINE_A #endif -#if SMTG_OS_WINDOWS && !defined(__GNUC__) && defined(_MSC_VER) && (_MSC_VER < 1900) +#if SMTG_OS_WINDOWS && !defined(__GNUC__) && defined(_MSC_VER) #define stricmp _stricmp #define strnicmp _strnicmp +#if (_MSC_VER < 1900) #define snprintf _snprintf #endif +#endif namespace Steinberg { diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.cpp b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.cpp index b88fc5bf9b..a9bdeca547 100644 --- a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.cpp +++ b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.cpp @@ -410,12 +410,6 @@ void FUID::toRegistryString (char8* string) const #endif } -//------------------------------------------------------------------------ -void FUID::print (char8* string, int32 style) const -{ - print (style, string, 62); -} - //------------------------------------------------------------------------ void FUID::print (int32 style, char8* string, size_t stringBufferSize) const { @@ -439,22 +433,26 @@ void FUID::print (int32 style, char8* string, size_t stringBufferSize) const switch (style) { case kINLINE_UID: + // length is 60 (with null-terminate) snprintf (string, stringBufferSize, "INLINE_UID (0x%08X, 0x%08X, 0x%08X, 0x%08X)", l1, l2, l3, l4); break; case kDECLARE_UID: + // length is 61 (with null-terminate) snprintf (string, stringBufferSize, "DECLARE_UID (0x%08X, 0x%08X, 0x%08X, 0x%08X)", l1, l2, l3, l4); break; case kFUID: + // length is 54 (with null-terminate) snprintf (string, stringBufferSize, "FUID (0x%08X, 0x%08X, 0x%08X, 0x%08X)", l1, l2, l3, l4); break; case kCLASS_UID: default: + // length is 78 (with null-terminate) snprintf (string, stringBufferSize, "DECLARE_CLASS_IID (Interface, 0x%08X, 0x%08X, 0x%08X, 0x%08X)", l1, l2, l3, l4); diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h index 56cf292cbc..47f902f33a 100644 --- a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h +++ b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h @@ -314,11 +314,6 @@ public: \param stringBufferSize is the size of the output string */ void print (int32 style, char8* string = nullptr, size_t stringBufferSize = 0) const; -#if SMTG_CPP17 - [[deprecated ("Use the print method with the buffer size")]] -#endif - void print (char8* string = nullptr, int32 style = kINLINE_UID) const; - template inline explicit FUID (const char (&uid)[N]) { diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknownimpl.h b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknownimpl.h new file mode 100644 index 0000000000..35f109a0ba --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknownimpl.h @@ -0,0 +1,470 @@ +//----------------------------------------------------------------------------- +// Flags : clang-format SMTGSequencer +// Project : SDK Core +// +// Category : SDK Core Interfaces +// Filename : pluginterfaces/base/funknownimpl.h +// Created by : Steinberg, 10/2021 +// Description : Steinberg Module Architecture Interface Implementation Helper +// +//----------------------------------------------------------------------------- +// This file is part of a Steinberg SDK. It is subject to the license terms +// in the LICENSE file found in the top-level directory of this distribution +// and at www.steinberg.net/sdklicenses. +// No part of the SDK, including this file, may be copied, modified, propagated, +// or distributed except according to the terms contained in the LICENSE file. +//----------------------------------------------------------------------------- + +#pragma once + +//------------------------------------------------------------------------ +#include "pluginterfaces/base/fplatform.h" +#include "pluginterfaces/base/funknown.h" +#include +#include + +//------------------------------------------------------------------------ +#if !(SMTG_CPP11) +#error "C++11 is required for this header" +#endif + +// clang-format off +/** +This header provides classes for working with FUnknown. + +An interface which shall support Steinbergs Module Architecture should inherit from U::Unknown and provide a typedef +@c IID of type U::UID. + +On OS X you can generate an U::UID and copy it to the clipboard with the following shell command: +@code +uuidgen | { read id; echo -n "using IID = U::UID<0x${id:0:8}, 0x${id:9:4}${id:14:4}, 0x${id:19:4}${id:24:4}, 0x${id:28:8}>;" ; } | pbcopy +@endcode + +Example: +@code{.cpp} +struct IFoo : public U::Unknown +{ + // Use a generated random uid here. + using IID = U::UID<0x01234567, 0x89012345, 0x67890123, 0x45678901>; + + virtual void bar () = 0; +}; +@endcode + +A class implementing the interface @c IFoo uses the U::Implements template to specify the +interfaces it implements. All interfaces which the class should derive from need to be listed in the +U::Directly template. + +Example: +@code{.cpp} +struct FooImpl : public U::Implements> +{ + void bar () override {} +}; +@endcode + +To check if a class can provide a specific interface use the U::cast function. + +Example: +@code{.cpp} +void test (U::Unknown* obj) +{ + if (auto foo = U::cast (obj)) + { + // obj provided IFoo + } +} +@endcode + +The U::Implements class supports a second template parameter U::Indirectly for specifying +a list of interfaces which should be available via @c queryInterface but not inherited from. +This is useful if an interface extends another interface. + +Example: +@code{.cpp} +struct IBar : public IFoo +{ + using IID = U::UID<0x11223344, 0x55667788, 0x99001122, 0x33445566>; + + virtual void baz () = 0; +}; + +struct BarImpl : public U::Implements, U::Indirectly> +{ + void bar () override {} + void baz () override {} +}; +@endcode + +In some cases a class shall be extended and an additional interface implemented. +This is possible with the U::Extends template which is a generalization of the U::Implements +template and allows specifying a base class from which should be inherited. + +Example: +@code{.cpp} +struct ITest : public U::Unknown +{ + using IID = U::UID<0x99887766, 0x55443322, 0x11009988, 0x77665544>; + + virtual bool equal (int a, int b) const = 0; +}; + +struct TestImpl : public U::Extends> +{ + bool equal (int a, int b) const override { return a == b; } +}; +@endcode + +To pass arbitrary arguments to the specified base class one can use the inherited @c Base +typedef. All arguments passed to @c Base are automatically perfectly forwarded to the base class. + +In the following example the value 42 is passed to the @c AlternativeFooImpl base class: +@code{.cpp} +struct AlternativeFooImpl : public U::Implements> +{ + AlternativeFooImpl (int dummy = 0) : dummy {dummy} {} + void bar () override {} + + int dummy; +}; + +struct AlternativeTestImpl : public U::Extends> +{ + AlternativeTestImpl () : Base {42} {} + + bool equal (int a, int b) const override { return a == b; } +}; +@endcode +*/ +// clang-format on + +//------------------------------------------------------------------------ +namespace Steinberg { +namespace FUnknownImpl { + +/** Typedef to keep everything in this namespace. */ +using Unknown = FUnknown; + +/** A base class which hides the FUnknown::iid static var */ +struct HideIIDBase : FUnknown +{ + using iid = void; +}; + +/** Common destroyer policy for ski object instances.*/ +struct Destroyer +{ + template + static void destroy (UnknownT* ptr) + { + if (!!ptr) + ptr->release (); + } +}; + +template +class ImplementsImpl; + +/** + * This class provides a compile-time uid and enables interfaces to specify a UID as a simple + * typedef. This way the FUID, DECLARE_CLASS_IID and DEF_CLASS_IID code can be omitted. + */ +template +struct UID +{ + enum : int8 + { + l1_1 = static_cast ((t1 & 0xFF000000) >> 24), + l1_2 = static_cast ((t1 & 0x00FF0000) >> 16), + l1_3 = static_cast ((t1 & 0x0000FF00) >> 8), + l1_4 = static_cast ((t1 & 0x000000FF)), + l2_1 = static_cast ((t2 & 0xFF000000) >> 24), + l2_2 = static_cast ((t2 & 0x00FF0000) >> 16), + l2_3 = static_cast ((t2 & 0x0000FF00) >> 8), + l2_4 = static_cast ((t2 & 0x000000FF)), + l3_1 = static_cast ((t3 & 0xFF000000) >> 24), + l3_2 = static_cast ((t3 & 0x00FF0000) >> 16), + l3_3 = static_cast ((t3 & 0x0000FF00) >> 8), + l3_4 = static_cast ((t3 & 0x000000FF)), + l4_1 = static_cast ((t4 & 0xFF000000) >> 24), + l4_2 = static_cast ((t4 & 0x00FF0000) >> 16), + l4_3 = static_cast ((t4 & 0x0000FF00) >> 8), + l4_4 = static_cast ((t4 & 0x000000FF)) + }; + + UID () = delete; + + static const TUID& toTUID () + { + // clang-format off + static TUID uuid = { +#if COM_COMPATIBLE + l1_4, l1_3, l1_2, l1_1, + l2_2, l2_1, l2_4, l2_3, +#else + l1_1, l1_2, l1_3, l1_4, + l2_1, l2_2, l2_3, l2_4, +#endif + l3_1, l3_2, l3_3, l3_4, + l4_1, l4_2, l4_3, l4_4 + }; + // clang-format on + return uuid; + } +}; + +/** @return the TUID for an interface. */ +template +const TUID& getTUID () +{ + return ::Steinberg::getTUID (); +} + +/** + * Checks if the given Unknown can provide the specified interface and returns it in an IPtr. + * + * @return an IPtr pointing to an instance of the requested interface or nullptr in case the + * object does not provide the interface. + */ +template +IPtr cast (Unknown* u) +{ + I* out = nullptr; + return u && u->queryInterface (getTUID (), reinterpret_cast (&out)) == kResultOk ? + owned (out) : + nullptr; +} + +/** Casts to Unknown* and then to the specified interface. */ +template +IPtr cast (ImplementsImpl* u) +{ + return cast (u->unknownCast ()); +} + +/** Casts to Unknown* and then to the specified interface. */ +template +IPtr cast (const IPtr& u) +{ + return cast (u.get ()); +} + +//------------------------------------------------------------------------ +namespace Detail { + +/** + * This struct implements reference counting for the @c U::Implements template. + * It also provides a @c queryInterface method stub to support @c queryInterface + * call made in the @c U::Implements template. + */ +struct RefCounted +{ +//------------------------------------------------------------------------ + RefCounted () = default; + RefCounted (const RefCounted&) {} + RefCounted (RefCounted&& other) SMTG_NOEXCEPT : refCount {other.refCount.load ()} {} + virtual ~RefCounted () = default; + + RefCounted& operator= (const RefCounted&) { return *this; } + RefCounted& operator= (RefCounted&& other) SMTG_NOEXCEPT + { + refCount = other.refCount.load (); + return *this; + } + + uint32 PLUGIN_API addRef () { return ++refCount; } + + uint32 PLUGIN_API release () + { + if (--refCount == 0) + { + destroyInstance (); + refCount = -1000; + delete this; + return 0; + } + return refCount; + } + +//------------------------------------------------------------------------ +private: + virtual void destroyInstance () {} + + std::atomic refCount {1}; +}; + +//------------------------------------------------------------------------ +struct NonDestroyable +{ +//------------------------------------------------------------------------ + NonDestroyable () = default; + virtual ~NonDestroyable () = default; + uint32 PLUGIN_API addRef () { return 1000; } + uint32 PLUGIN_API release () { return 1000; } + +private: + virtual void destroyInstance () {} +}; + +//------------------------------------------------------------------------ +template +struct QueryInterfaceEnd : T +{ +//------------------------------------------------------------------------ + tresult PLUGIN_API queryInterface (const TUID /*iid*/, void** obj) + { + *obj = nullptr; + return kNoInterface; + } +//------------------------------------------------------------------------ +}; + +//------------------------------------------------------------------------ +} // Detail + +/** + * This struct is used to group a list of interfaces from which should be inherited and which + * should be available via the @c queryInterface method. + */ +template +struct Directly +{ +}; + +/** + * This struct is used to group a list of interfaces from which should not be inherited but which + * should be available via the @c queryInterface method. + */ +template +struct Indirectly +{ +}; + +template +class ImplementsImpl +{ + static_assert (sizeof (Base) == -1, "use U::Directly and U::Indirectly to specify interfaces"); +}; + +template +class ImplementsImpl, Directly> +{ + static_assert (sizeof (Base) == -1, "U::Indirectly only allowed after U::Directly"); +}; + +/** This class implements the required virtual methods for the U::Unknown class. */ +template +class ImplementsImpl, Indirectly> +: public BaseClass, public I, public DirectIFs... +{ +public: +//------------------------------------------------------------------------ + /** + * This is a convenience typedef for the deriving class to pass arguments to the + * constructor, which are in turn passed to the base class of this class. + */ + using Base = ImplementsImpl, Indirectly>; + + template + ImplementsImpl (Args&&... args) : BaseClass {std::forward (args)...} + { + } + + tresult PLUGIN_API queryInterface (const TUID tuid, void** obj) override + { + if (!obj) + return kInvalidArgument; + + if (queryInterfaceImpl (tuid, *obj) || + queryInterfaceImpl (tuid, *obj)) + { + static_cast (*obj)->addRef (); + return kResultOk; + } + + return BaseClass::queryInterface (tuid, obj); + } + + uint32 PLUGIN_API addRef () override { return BaseClass::addRef (); } + uint32 PLUGIN_API release () override { return BaseClass::release (); } + + Unknown* unknownCast () { return static_cast (static_cast (this)); } + +//------------------------------------------------------------------------ +private: + template + inline constexpr bool match (const TUID tuid) const noexcept + { + return reinterpret_cast (tuid)[0] == + reinterpret_cast (getTUID ())[0] && + reinterpret_cast (tuid)[1] == + reinterpret_cast (getTUID ())[1]; + } + + template + inline constexpr bool queryInterfaceImpl (const TUID, void*&) const noexcept + { + return false; + } + + template + inline bool queryInterfaceImpl (const TUID tuid, void*& obj) noexcept + { + if (match (tuid) || match (tuid)) + { + obj = static_cast (this->unknownCast ()); + return true; + } + + obj = getInterface (tuid); + return obj != nullptr; + } + + template + inline constexpr void* getInterface (const TUID) const noexcept + { + return nullptr; + } + + template + inline void* getInterface (const TUID tuid) noexcept + { + return match (tuid) ? static_cast (this) : + getInterface (tuid); + } +}; + +/** This typedef enables using a custom base class with the interface implementation. */ +template > +using Extends = ImplementsImpl; + +/** This typedef provides the interface implementation. */ +template > +using Implements = ImplementsImpl, D, I>; + +/** This typedef provides the interface implementation for objects which should not be destroyed via + * FUnknown::release (like singletons). */ +template > +using ImplementsNonDestroyable = + ImplementsImpl, D, I>; + +//------------------------------------------------------------------------ +} // FUnknownImpl + +//------------------------------------------------------------------------ +/** Shortcut namespace for implementing FUnknown based objects. */ +namespace U { + +using Unknown = FUnknownImpl::HideIIDBase; +using FUnknownImpl::UID; +using FUnknownImpl::Extends; +using FUnknownImpl::Implements; +using FUnknownImpl::ImplementsNonDestroyable; +using FUnknownImpl::Directly; +using FUnknownImpl::Indirectly; +using FUnknownImpl::cast; +using FUnknownImpl::getTUID; + +//------------------------------------------------------------------------ +} // namespace U +} // namespace Steinberg diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fvariant.h b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fvariant.h index 491c93fbf0..c563817125 100644 --- a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fvariant.h +++ b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fvariant.h @@ -18,6 +18,7 @@ #include "pluginterfaces/base/fstrdefs.h" #include "pluginterfaces/base/funknown.h" +#include //------------------------------------------------------------------------ namespace Steinberg { @@ -249,9 +250,9 @@ inline void FVariant::empty () if (type & kOwner) { if ((type & kString8) && string8) - delete[] string8; + free (const_cast (string8)); // should match DELETESTR8 else if ((type & kString16) && string16) - delete[] string16; + free (const_cast (string16)); // should match DELETESTR16 else if ((type & kObject) && object) object->release (); @@ -268,14 +269,14 @@ inline FVariant& FVariant::operator= (const FVariant& variant) if ((type & kString8) && variant.string8) { - string8 = new char8[strlen (variant.string8) + 1]; + string8 = static_cast (malloc (strlen (variant.string8) + 1)); // should match NEWSTR8 strcpy (const_cast (string8), variant.string8); type |= kOwner; } else if ((type & kString16) && variant.string16) { auto len = static_cast (strlen16 (variant.string16)); - string16 = new char16[len + 1]; + string16 = static_cast (malloc ((len + 1) * sizeof (char16))); // should match NEWSTR16 char16* tmp = const_cast (string16); memcpy (tmp, variant.string16, len * sizeof (char16)); tmp[len] = 0; diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstcomponent.h b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstcomponent.h index 1f4651105f..741784327a 100644 --- a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstcomponent.h +++ b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstcomponent.h @@ -9,7 +9,7 @@ //----------------------------------------------------------------------------- // This file is part of a Steinberg SDK. It is subject to the license terms // in the LICENSE file found in the top-level directory of this distribution -// and at www.steinberg.net/sdklicenses. +// and at www.steinberg.net/sdklicenses. // No part of the SDK, including this file, may be copied, modified, propagated, // or distributed except according to the terms contained in the LICENSE file. //----------------------------------------------------------------------------- @@ -23,6 +23,7 @@ #include "pluginterfaces/base/falignpush.h" //------------------------------------------------------------------------ +//------------------------------------------------------------------------ namespace Steinberg { class IBStream; diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivsteditcontroller.h b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivsteditcontroller.h index 48128fbe90..271d4224c8 100644 --- a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivsteditcontroller.h +++ b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivsteditcontroller.h @@ -9,7 +9,7 @@ //----------------------------------------------------------------------------- // This file is part of a Steinberg SDK. It is subject to the license terms // in the LICENSE file found in the top-level directory of this distribution -// and at www.steinberg.net/sdklicenses. +// and at www.steinberg.net/sdklicenses. // No part of the SDK, including this file, may be copied, modified, propagated, // or distributed except according to the terms contained in the LICENSE file. //----------------------------------------------------------------------------- @@ -46,30 +46,56 @@ namespace Vst { struct ParameterInfo { //------------------------------------------------------------------------ - ParamID id; ///< unique identifier of this parameter (named tag too) - String128 title; ///< parameter title (e.g. "Volume") - String128 shortTitle; ///< parameter shortTitle (e.g. "Vol") - String128 units; ///< parameter unit (e.g. "dB") - int32 stepCount; ///< number of discrete steps (0: continuous, 1: toggle, discrete value otherwise - ///< (corresponding to max - min, for example: 127 for a min = 0 and a max = 127) - see \ref vst3ParameterIntro) - ParamValue defaultNormalizedValue; ///< default normalized value [0,1] (in case of discrete value: defaultNormalizedValue = defDiscreteValue / stepCount) - UnitID unitId; ///< id of unit this parameter belongs to (see \ref vst3Units) + ParamID id; ///< unique identifier of this parameter (named tag too) + String128 title; ///< parameter title (e.g. "Volume") + String128 shortTitle; ///< parameter shortTitle (e.g. "Vol") + String128 units; ///< parameter unit (e.g. "dB") + int32 stepCount; ///< number of discrete steps (0: continuous, 1: toggle, discrete value + /// otherwise (corresponding to max - min, for example: + /// 127 for min = 0 and max = 127) - see \ref vst3ParameterIntro) + ParamValue defaultNormalizedValue; ///< default normalized value [0,1] + /// in case of discrete value: + /// defaultNormalizedValue = defDiscreteValue/stepCount + UnitID unitId; ///< id of unit this parameter belongs to (see \ref vst3Units) - int32 flags; ///< ParameterFlags (see below) - enum ParameterFlags + int32 flags; ///< ParameterFlags (see below) + + enum ParameterFlags : int32 { - kNoFlags = 0, ///< no flags wanted - kCanAutomate = 1 << 0, ///< parameter can be automated - kIsReadOnly = 1 << 1, ///< parameter cannot be changed from outside the plug-in (implies that kCanAutomate is NOT set) - kIsWrapAround = 1 << 2, ///< attempts to set the parameter value out of the limits will result in a wrap around [SDK 3.0.2] - kIsList = 1 << 3, ///< parameter should be displayed as list in generic editor or automation editing [SDK 3.1.0] - kIsHidden = 1 << 4, ///< parameter should be NOT displayed and cannot be changed from outside the plug-in - ///< (implies that kCanAutomate is NOT set and kIsReadOnly is set) [SDK 3.7.0] + /** No flags wanted. + * [SDK 3.0.0] */ + kNoFlags = 0, - kIsProgramChange = 1 << 15, ///< parameter is a program change (unitId gives info about associated unit - ///< - see \ref vst3ProgramLists) - kIsBypass = 1 << 16 ///< special bypass parameter (only one allowed): plug-in can handle bypass - ///< (highly recommended to export a bypass parameter for effect plug-in) + /** Parameter can be automated. + * [SDK 3.0.0] */ + kCanAutomate = 1 << 0, + + /** Parameter cannot be changed from outside the plug-in + * (implies that kCanAutomate is NOT set). + * [SDK 3.0.0] */ + kIsReadOnly = 1 << 1, + + /** Attempts to set the parameter value out of the limits will result in a wrap around. + * [SDK 3.0.2] */ + kIsWrapAround = 1 << 2, + + /** Parameter should be displayed as list in generic editor or automation editing. + * [SDK 3.1.0] */ + kIsList = 1 << 3, + /** Parameter should be NOT displayed and cannot be changed from outside the plug-in. + * It implies that kCanAutomate is NOT set and kIsReadOnly is set. + * [SDK 3.7.0] */ + kIsHidden = 1 << 4, + + /** Parameter is a program change (unitId gives info about associated unit - see \ref + * vst3ProgramLists). + * [SDK 3.0.0] */ + kIsProgramChange = 1 << 15, + + /** Special bypass parameter (only one allowed): plug-in can handle bypass. + * Highly recommended to export a bypass parameter for effect plug-in. + * [SDK 3.0.0] */ + kIsBypass = 1 << 16 }; //------------------------------------------------------------------------ }; @@ -83,90 +109,92 @@ const CString kEditor = "editor"; //------------------------------------------------------------------------ /** Flags used for IComponentHandler::restartComponent */ -enum RestartFlags +enum RestartFlags : int32 { /** The Component should be reloaded - * The host has to unload completely the plug-in (controller/processor) and reload it. - * [SDK 3.0.0] */ + * The host has to unload completely the plug-in (controller/processor) and reload it. + * [SDK 3.0.0] */ kReloadComponent = 1 << 0, - /** Input / Output Bus configuration has changed - * The plug-in informs the host that either the bus configuration or the bus count has changed. - * The host has to deactivate the plug-in, asks the plug-in for its wanted new bus configurations, - * adapts its processing graph and reactivate the plug-in. - * [SDK 3.0.0] */ - kIoChanged = 1 << 1, + /** Input/Output Bus configuration has changed + * The plug-in informs the host that either the bus configuration or the bus count has changed. + * The host has to deactivate the plug-in, asks the plug-in for its wanted new bus + * configurations, adapts its processing graph and reactivate the plug-in. + * [SDK 3.0.0] */ + kIoChanged = 1 << 1, /** Multiple parameter values have changed (as result of a program change for example) - * The host invalidates all caches of parameter values and asks the edit controller for the current values. - * [SDK 3.0.0] */ - kParamValuesChanged = 1 << 2, + * The host invalidates all caches of parameter values and asks the edit controller for the + * current values. + * [SDK 3.0.0] */ + kParamValuesChanged = 1 << 2, /** Latency has changed - * The plug informs the host that its latency has changed, getLatencySamples should return the new latency after setActive (true) was called - * The host has to deactivate and reactivate the plug-in, then afterwards the host could ask for the current latency (getLatencySamples) - * See IAudioProcessor::getLatencySamples - * [SDK 3.0.0] */ + * The plug informs the host that its latency has changed, getLatencySamples should return the new latency after setActive (true) was called + * The host has to deactivate and reactivate the plug-in, then afterwards the host could ask for the current latency (getLatencySamples) + * See IAudioProcessor::getLatencySamples + * [SDK 3.0.0] */ kLatencyChanged = 1 << 3, - /** Parameter titles, default values or flags (ParameterFlags) have changed - * The host invalidates all caches of parameter infos and asks the edit controller for the current infos. - * [SDK 3.0.0] */ - kParamTitlesChanged = 1 << 4, + /** Parameter titles (title, shortTitle and units), default values, stepCount or flags (ParameterFlags) have changed + * The host invalidates all caches of parameter infos and asks the edit controller for the + * current infos. + * [SDK 3.0.0] */ + kParamTitlesChanged = 1 << 4, /** MIDI Controllers and/or Program Changes Assignments have changed - * The plug-in informs the host that its MIDI-CC mapping has changed (for example after a MIDI learn or new loaded preset) - * or if the stepCount or UnitID of a ProgramChange parameter has changed. - * The host has to rebuild the MIDI-CC => parameter mapping (getMidiControllerAssignment) - * and reread program changes parameters (stepCount and associated unitID) - * [SDK 3.0.1] */ + * The plug-in informs the host that its MIDI-CC mapping has changed (for example after a MIDI learn or new loaded preset) + * or if the stepCount or UnitID of a ProgramChange parameter has changed. + * The host has to rebuild the MIDI-CC => parameter mapping (getMidiControllerAssignment) + * and reread program changes parameters (stepCount and associated unitID) + * [SDK 3.0.1] */ kMidiCCAssignmentChanged = 1 << 5, /** Note Expression has changed (info, count, PhysicalUIMapping, ...) - * Either the note expression type info, the count of note expressions or the physical UI mapping has changed. - * The host invalidates all caches of note expression infos and asks the edit controller for the current ones. - * See INoteExpressionController, NoteExpressionTypeInfo and INoteExpressionPhysicalUIMapping - * [SDK 3.5.0] */ + * Either the note expression type info, the count of note expressions or the physical UI mapping has changed. + * The host invalidates all caches of note expression infos and asks the edit controller for the current ones. + * See INoteExpressionController, NoteExpressionTypeInfo and INoteExpressionPhysicalUIMapping + * [SDK 3.5.0] */ kNoteExpressionChanged = 1 << 6, /** Input / Output bus titles have changed - * The host invalidates all caches of bus titles and asks the edit controller for the current titles. - * [SDK 3.5.0] */ + * The host invalidates all caches of bus titles and asks the edit controller for the current titles. + * [SDK 3.5.0] */ kIoTitlesChanged = 1 << 7, /** Prefetch support has changed - * The plug-in informs the host that its PrefetchSupport has changed - * The host has to deactivate the plug-in, calls IPrefetchableSupport::getPrefetchableSupport - * and reactivate the plug-in. - * See IPrefetchableSupport - * [SDK 3.6.1] */ + * The plug-in informs the host that its PrefetchSupport has changed + * The host has to deactivate the plug-in, calls IPrefetchableSupport::getPrefetchableSupport + * and reactivate the plug-in. + * See IPrefetchableSupport + * [SDK 3.6.1] */ kPrefetchableSupportChanged = 1 << 8, /** RoutingInfo has changed - * The plug-in informs the host that its internal routing (relation of an event-input-channel to - * an audio-output-bus) has changed. The host asks the plug-in for the new routing with - * IComponent::getRoutingInfo, \ref vst3Routing - * See IComponent - * [SDK 3.6.6] */ + * The plug-in informs the host that its internal routing (relation of an event-input-channel to + * an audio-output-bus) has changed. The host asks the plug-in for the new routing with + * IComponent::getRoutingInfo, \ref vst3Routing + * See IComponent + * [SDK 3.6.6] */ kRoutingInfoChanged = 1 << 9, /** Key switches has changed (info, count) - * Either the Key switches info, the count of Key switches has changed. - * The host invalidates all caches of Key switches infos and asks the edit controller - * (IKeyswitchController) for the current ones. - * See IKeyswitchController - * [SDK 3.7.3] */ + * Either the Key switches info, the count of Key switches has changed. + * The host invalidates all caches of Key switches infos and asks the edit controller + * (IKeyswitchController) for the current ones. + * See IKeyswitchController + * [SDK 3.7.3] */ kKeyswitchChanged = 1 << 10, /** Mapping of ParamID has changed - * The Plug-in informs the host that its parameters ID has changed. This has to be called by the - * edit controller in the method setComponentState or setState (during projects loading) when the - * plug-in detects that the given state was associated to an older version of the plug-in, or to a - * plug-in to replace (for ex. migrating VST2 => VST3), with a different set of parameter IDs, then - * the host could remap any used parameters like automation by asking the IRemapParamID interface - * (which extends IEditController). - * See IRemapParamID - * [SDK 3.7.11] */ + * The Plug-in informs the host that its parameters ID has changed. This has to be called by the + * edit controller in the method setComponentState or setState (during projects loading) when the + * plug-in detects that the given state was associated to an older version of the plug-in, or to a + * plug-in to replace (for ex. migrating VST2 => VST3), with a different set of parameter IDs, then + * the host could remap any used parameters like automation by asking the IRemapParamID interface + * (which extends IEditController). + * See IRemapParamID + * [SDK 3.7.11] */ kParamIDMappingChanged = 1 << 11 }; @@ -187,20 +215,21 @@ class IComponentHandler : public FUnknown public: //------------------------------------------------------------------------ /** To be called before calling a performEdit (e.g. on mouse-click-down event). - This must be called in the UI-Thread context! */ - virtual tresult PLUGIN_API beginEdit (ParamID id) = 0; + * This must be called in the UI-Thread context! */ + virtual tresult PLUGIN_API beginEdit (ParamID id /*in*/) = 0; /** Called between beginEdit and endEdit to inform the handler that a given parameter has a new * value. This must be called in the UI-Thread context! */ - virtual tresult PLUGIN_API performEdit (ParamID id, ParamValue valueNormalized) = 0; + virtual tresult PLUGIN_API performEdit (ParamID id /*in*/, + ParamValue valueNormalized /*in*/) = 0; /** To be called after calling a performEdit (e.g. on mouse-click-up event). - This must be called in the UI-Thread context! */ - virtual tresult PLUGIN_API endEdit (ParamID id) = 0; + * This must be called in the UI-Thread context! */ + virtual tresult PLUGIN_API endEdit (ParamID id /*in*/) = 0; /** Instructs host to restart the component. This must be called in the UI-Thread context! - \param flags is a combination of RestartFlags */ - virtual tresult PLUGIN_API restartComponent (int32 flags) = 0; + * @param[in] flags is a combination of RestartFlags */ + virtual tresult PLUGIN_API restartComponent (int32 flags /*in*/) = 0; //------------------------------------------------------------------------ static const FUID iid; @@ -220,10 +249,11 @@ One part handles: - Setting dirty state of the plug-in - Requesting the host to open the editor -The other part handles parameter group editing from the plug-in UI. It wraps a set of \ref IComponentHandler::beginEdit / -\ref Steinberg::Vst::IComponentHandler::performEdit / \ref Steinberg::Vst::IComponentHandler::endEdit functions (see \ref IComponentHandler) -which should use the same timestamp in the host when writing automation. -This allows for better synchronizing of multiple parameter changes at once. +The other part handles parameter group editing from the plug-in UI. It wraps a set of \ref +IComponentHandler::beginEdit / \ref Steinberg::Vst::IComponentHandler::performEdit / \ref +Steinberg::Vst::IComponentHandler::endEdit functions (see \ref IComponentHandler) which should use +the same timestamp in the host when writing automation. This allows for better synchronizing of +multiple parameter changes at once. \section IComponentHandler2Example Examples of different use cases @@ -269,25 +299,28 @@ hostHandler2->finishGroupEdit (); class IComponentHandler2 : public FUnknown { public: - //------------------------------------------------------------------------ - /** Tells host that the plug-in is dirty (something besides parameters has changed since last save), - if true the host should apply a save before quitting. */ - virtual tresult PLUGIN_API setDirty (TBool state) = 0; +//------------------------------------------------------------------------ + /** Tells host that the plug-in is dirty (something besides parameters has changed since last + * save), if true the host should apply a save before quitting. */ + virtual tresult PLUGIN_API setDirty (TBool state /*in*/) = 0; - /** Tells host that it should open the plug-in editor the next time it's possible. - You should use this instead of showing an alert and blocking the program flow (especially on loading projects). */ + /** Tells host that it should open the plug-in editor the next time it's possible. You should + * use this instead of showing an alert and blocking the program flow (especially on loading + * projects). */ virtual tresult PLUGIN_API requestOpenEditor (FIDString name = ViewType::kEditor) = 0; - //------------------------------------------------------------------------ +//------------------------------------------------------------------------ /** Starts the group editing (call before a \ref IComponentHandler::beginEdit), - the host will keep the current timestamp at this call and will use it for all \ref IComponentHandler::beginEdit - / \ref IComponentHandler::performEdit / \ref IComponentHandler::endEdit calls until a \ref finishGroupEdit (). */ + * the host will keep the current timestamp at this call and will use it for all + * \ref IComponentHandler::beginEdit, \ref IComponentHandler::performEdit, + * \ref IComponentHandler::endEdit calls until a \ref finishGroupEdit (). */ virtual tresult PLUGIN_API startGroupEdit () = 0; - /** Finishes the group editing started by a \ref startGroupEdit (call after a \ref IComponentHandler::endEdit). */ + /** Finishes the group editing started by a \ref startGroupEdit (call after a \ref + * IComponentHandler::endEdit). */ virtual tresult PLUGIN_API finishGroupEdit () = 0; - //------------------------------------------------------------------------ +//------------------------------------------------------------------------ static const FUID iid; }; @@ -322,8 +355,8 @@ class IComponentHandlerBusActivation : public FUnknown public: //------------------------------------------------------------------------ /** request the host to activate or deactivate a specific bus. */ - virtual tresult PLUGIN_API requestBusActivation (MediaType type, BusDirection dir, int32 index, - TBool state) = 0; + virtual tresult PLUGIN_API requestBusActivation (MediaType type /*in*/, BusDirection dir /*in*/, + int32 index /*in*/, TBool state /*in*/) = 0; //------------------------------------------------------------------------ static const FUID iid; @@ -342,10 +375,10 @@ DECLARE_CLASS_IID (IComponentHandlerBusActivation, 0x067D02C1, 0x5B4E274D, 0xA92 Allows the plug-in to request the host to create a progress for some specific tasks which take some time. The host can visualize the progress as read-only UI elements. For example, after loading a project where a plug-in needs to load extra -data (e.g. samples) in a background thread, this enables the host to get and visualize the current status of the loading -progress and to inform the user when the loading is finished. -Note: During the progress, the host can unload the plug-in at any time. Make sure that the plug-in -supports this use case. +data (e.g. samples) in a background thread, this enables the host to get and visualize the current +status of the loading progress and to inform the user when the loading is finished. Note: During the +progress, the host can unload the plug-in at any time. Make sure that the plug-in supports this use +case. \section IProgressExample Example @@ -356,18 +389,19 @@ supports this use case. FUnknownPtr progress (componentHandler); if (progress) - progress->start (IProgress::ProgressType::UIBackgroundTask, STR ("Load Samples..."), mProgressID); + progress->start (IProgress::ProgressType::UIBackgroundTask, STR ("Load Samples..."), + mProgressID); // ... myProgressValue += incProgressStep; FUnknownPtr progress (componentHandler); if (progress) - progress->update (mProgressID, myProgressValue); + progress->update (mProgressID, myProgressValue); // ... FUnknownPtr progress (componentHandler); if (progress) - progress->finish (mProgressID); + progress->finish (mProgressID); \endcode \see \ref IComponentHandler @@ -378,20 +412,26 @@ public: //------------------------------------------------------------------------ enum ProgressType : uint32 { - AsyncStateRestoration = 0, ///< plug-in state is restored async (in a background Thread) - UIBackgroundTask ///< a plug-in task triggered by a UI action + /** plug-in state is restored async (in a background Thread) */ + AsyncStateRestoration = 0, + + /** a plug-in task triggered by a UI action */ + UIBackgroundTask }; using ID = uint64; /** Start a new progress of a given type and optional Description. outID is as ID created by the * host to identify this newly created progress (for update and finish method) */ - virtual tresult PLUGIN_API start (ProgressType type, const tchar* optionalDescription, - ID& outID) = 0; + virtual tresult PLUGIN_API start (ProgressType type /*in*/, + const tchar* optionalDescription /*in*/, + ID& outID /*out*/) = 0; + /** Update the progress value (normValue between [0, 1]) associated to the given id */ - virtual tresult PLUGIN_API update (ID id, ParamValue normValue) = 0; + virtual tresult PLUGIN_API update (ID id /*in*/, ParamValue normValue /*in*/) = 0; + /** Finish the progress associated to the given id */ - virtual tresult PLUGIN_API finish (ID id) = 0; + virtual tresult PLUGIN_API finish (ID id /*in*/) = 0; //------------------------------------------------------------------------ static const FUID iid; @@ -406,55 +446,67 @@ DECLARE_CLASS_IID (IProgress, 0x00C9DC5B, 0x9D904254, 0x91A388C8, 0xB4E91B69) - [released: 3.0.0] - [mandatory] -The controller part of an effect or instrument with parameter handling (export, definition, conversion...). -\see \ref IComponent::getControllerClassId, \ref IMidiMapping +The controller part of an effect or instrument with parameter handling (export, definition, +conversion, ...). \see \ref IComponent::getControllerClassId, \ref IMidiMapping */ class IEditController : public IPluginBase { public: //------------------------------------------------------------------------ /** Receives the component state. */ - virtual tresult PLUGIN_API setComponentState (IBStream* state) = 0; + virtual tresult PLUGIN_API setComponentState (IBStream* state /*in*/) = 0; /** Sets the controller state. */ - virtual tresult PLUGIN_API setState (IBStream* state) = 0; + virtual tresult PLUGIN_API setState (IBStream* state /*in*/) = 0; /** Gets the controller state. */ - virtual tresult PLUGIN_API getState (IBStream* state) = 0; + virtual tresult PLUGIN_API getState (IBStream* state /*inout*/) = 0; // parameters ------------------------- /** Returns the number of parameters exported. */ virtual int32 PLUGIN_API getParameterCount () = 0; + /** Gets for a given index the parameter information. */ - virtual tresult PLUGIN_API getParameterInfo (int32 paramIndex, ParameterInfo& info /*out*/) = 0; + virtual tresult PLUGIN_API getParameterInfo (int32 paramIndex /*in*/, + ParameterInfo& info /*out*/) = 0; /** Gets for a given paramID and normalized value its associated string representation. */ - virtual tresult PLUGIN_API getParamStringByValue (ParamID id, ParamValue valueNormalized /*in*/, String128 string /*out*/) = 0; + virtual tresult PLUGIN_API getParamStringByValue (ParamID id /*in*/, + ParamValue valueNormalized /*in*/, + String128 string /*out*/) = 0; + /** Gets for a given paramID and string its normalized value. */ - virtual tresult PLUGIN_API getParamValueByString (ParamID id, TChar* string /*in*/, ParamValue& valueNormalized /*out*/) = 0; + virtual tresult PLUGIN_API getParamValueByString (ParamID id /*in*/, TChar* string /*in*/, + ParamValue& valueNormalized /*out*/) = 0; /** Returns for a given paramID and a normalized value its plain representation - (for example -6 for -6dB - see \ref vst3AutomationIntro). */ - virtual ParamValue PLUGIN_API normalizedParamToPlain (ParamID id, ParamValue valueNormalized) = 0; - /** Returns for a given paramID and a plain value its normalized value. (see \ref vst3AutomationIntro) */ - virtual ParamValue PLUGIN_API plainParamToNormalized (ParamID id, ParamValue plainValue) = 0; + * (for example -6 for -6dB - see \ref vst3AutomationIntro). */ + virtual ParamValue PLUGIN_API normalizedParamToPlain (ParamID id /*in*/, + ParamValue valueNormalized /*in*/) = 0; + + /** Returns for a given paramID and a plain value its normalized value. (see \ref + * vst3AutomationIntro). */ + virtual ParamValue PLUGIN_API plainParamToNormalized (ParamID id /*in*/, + ParamValue plainValue /*in*/) = 0; /** Returns the normalized value of the parameter associated to the paramID. */ - virtual ParamValue PLUGIN_API getParamNormalized (ParamID id) = 0; - /** Sets the normalized value to the parameter associated to the paramID. The controller must never - pass this value-change back to the host via the IComponentHandler. It should update the according - GUI element(s) only!*/ - virtual tresult PLUGIN_API setParamNormalized (ParamID id, ParamValue value) = 0; + virtual ParamValue PLUGIN_API getParamNormalized (ParamID id /*in*/) = 0; + + /** Sets the normalized value to the parameter associated to the paramID. The controller must + * never pass this value-change back to the host via the IComponentHandler. + * It should update the according GUI element(s) only! */ + virtual tresult PLUGIN_API setParamNormalized (ParamID id /*in*/, ParamValue value /*in*/) = 0; // handler ---------------------------- /** Gets from host a handler which allows the Plugin-in to communicate with the host. - Note: This is mandatory if the host is using the IEditController! */ - virtual tresult PLUGIN_API setComponentHandler (IComponentHandler* handler) = 0; + * Note: This is mandatory if the host is using the IEditController! */ + virtual tresult PLUGIN_API setComponentHandler (IComponentHandler* handler /*in*/) = 0; // view ------------------------------- - /** Creates the editor view of the plug-in, currently only "editor" is supported, see \ref ViewType. - The life time of the editor view will never exceed the life time of this controller instance. */ - virtual IPlugView* PLUGIN_API createView (FIDString name) = 0; + /** Creates the editor view of the plug-in, currently only "editor" is supported, see \ref + * ViewType. The life time of the editor view will never exceed the life time of this controller + * instance. */ + virtual IPlugView* PLUGIN_API createView (FIDString name /*in*/) = 0; //------------------------------------------------------------------------ static const FUID iid; @@ -462,23 +514,23 @@ public: DECLARE_CLASS_IID (IEditController, 0xDCD7BBE3, 0x7742448D, 0xA874AACC, 0x979C759E) +//------------------------------------------------------------------------ +/** \defgroup vst3typedef VST 3 Data Types */ +/*@{*/ +//------------------------------------------------------------------------ +/** Knob Mode Type */ +using KnobMode = int32; +/*@}*/ + //------------------------------------------------------------------------ /** Knob Mode */ -enum KnobModes +enum KnobModes : KnobMode { kCircularMode = 0, ///< Circular with jump to clicked position kRelativCircularMode, ///< Circular without jump to clicked position kLinearMode ///< Linear: depending on vertical movement }; -//------------------------------------------------------------------------ -/** \defgroup vst3typedef VST 3 Data Types */ -/*@{*/ -//------------------------------------------------------------------------ -/** Knob Mode Type */ -typedef int32 KnobMode; -/*@}*/ - //------------------------------------------------------------------------ /** Edit controller component interface extension: Vst::IEditController2 \ingroup vstIPlug vst310 @@ -495,20 +547,21 @@ and to open the plug-in about box or help documentation. class IEditController2 : public FUnknown { public: - /** Host could set the Knob Mode for the plug-in. Return kResultFalse means not supported mode. \see KnobModes. */ - virtual tresult PLUGIN_API setKnobMode (KnobMode mode) = 0; + /** Host could set the Knob Mode for the plug-in. Return kResultFalse means not supported mode. + * \see KnobModes. */ + virtual tresult PLUGIN_API setKnobMode (KnobMode mode /*in*/) = 0; - /** Host could ask to open the plug-in help (could be: opening a PDF document or link to a web page). - The host could call it with onlyCheck set to true for testing support of open Help. - Return kResultFalse means not supported function. */ - virtual tresult PLUGIN_API openHelp (TBool onlyCheck) = 0; + /** Host could ask to open the plug-in help (could be: opening a PDF document or link to a web + * page). The host could call it with onlyCheck set to true for testing support of open Help. + * Return kResultFalse means not supported function. */ + virtual tresult PLUGIN_API openHelp (TBool onlyCheck /*in*/) = 0; /** Host could ask to open the plug-in about box. - The host could call it with onlyCheck set to true for testing support of open AboutBox. - Return kResultFalse means not supported function. */ - virtual tresult PLUGIN_API openAboutBox (TBool onlyCheck) = 0; + * The host could call it with onlyCheck set to true for testing support of open AboutBox. + * Return kResultFalse means not supported function. */ + virtual tresult PLUGIN_API openAboutBox (TBool onlyCheck /*in*/) = 0; - //------------------------------------------------------------------------ +//------------------------------------------------------------------------ static const FUID iid; }; @@ -527,13 +580,13 @@ restrictions that can be avoided in software. Controller data in particular come and often ignored semantics. On top of this they can interfere with regular parameter automation and the host is unaware of what happens in the plug-in when passing MIDI controllers directly. -So any functionality that is to be controlled by MIDI controllers must be exported as regular parameter. -The host will transform incoming MIDI controller data using this interface and transmit them as regular -parameter change. This allows the host to automate them in the same way as other parameters. -CtrlNumber can be a typical MIDI controller value extended to some others values like pitchbend or -aftertouch (see \ref ControllerNumbers). -If the mapping has changed, the plug-in must call IComponentHandler::restartComponent (kMidiCCAssignmentChanged) -to inform the host about this change. +So any functionality that is to be controlled by MIDI controllers must be exported as regular +parameter. The host will transform incoming MIDI controller data using this interface and transmit +them as regular parameter change. This allows the host to automate them in the same way as other +parameters. CtrlNumber can be a typical MIDI controller value extended to some others values like +pitchbend or aftertouch (see \ref ControllerNumbers). If the mapping has changed, the plug-in must +call IComponentHandler::restartComponent (kMidiCCAssignmentChanged) to inform the host about this +change. \section IMidiMappingExample Example @@ -542,28 +595,33 @@ to inform the host about this change. // in myeditcontroller.h class MyEditController: public EditControllerEx1, public IMidiMapping { - //... - //---IMidiMapping--------------------------- - tresult PLUGIN_API getMidiControllerAssignment (int32 busIndex, int16 channel, CtrlNumber midiControllerNumber, ParamID& id) SMTG_OVERRIDE; - //---Interface--------- - OBJ_METHODS (MyEditController, EditControllerEx1) - DEFINE_INTERFACES - DEF_INTERFACE (IMidiMapping) - END_DEFINE_INTERFACES (MyEditController) - REFCOUNT_METHODS (MyEditController) + //... + //---IMidiMapping--------------------------- + tresult PLUGIN_API getMidiControllerAssignment (int32 busIndex, int16 channel, + CtrlNumber midiControllerNumber, + ParamID& id) override; + //---Interface--------- + OBJ_METHODS (MyEditController, EditControllerEx1) + DEFINE_INTERFACES + DEF_INTERFACE (IMidiMapping) + END_DEFINE_INTERFACES (MyEditController) + REFCOUNT_METHODS (MyEditController) }; //-------------------------------------- // in myeditcontroller.cpp -tresult PLUGIN_API MyEditController::getMidiControllerAssignment (int32 busIndex, int16 midiChannel, CtrlNumber midiControllerNumber, ParamID& tag) +tresult PLUGIN_API MyEditController::getMidiControllerAssignment (int32 busIndex, + int16 midiChannel, + CtrlNumber midiControllerNumber, + ParamID& tag) { - // for my first Event bus and for MIDI channel 0 and for MIDI CC Volume only - if (busIndex == 0 && midiChannel == 0 && midiControllerNumber == kCtrlVolume) - { - tag = kGainId; - return kResultTrue; - } - return kResultFalse; + // for my first Event bus and for MIDI channel 0 and for MIDI CC Volume only + if (busIndex == 0 && midiChannel == 0 && midiControllerNumber == kCtrlVolume) + { + tag = kGainId; + return kResultTrue; + } + return kResultFalse; } \endcode @@ -571,16 +629,20 @@ tresult PLUGIN_API MyEditController::getMidiControllerAssignment (int32 busIndex class IMidiMapping : public FUnknown { public: - /** Gets an (preferred) associated ParamID for a given Input Event Bus index, channel and MIDI Controller. - * @param[in] busIndex - index of Input Event Bus - * @param[in] channel - channel of the bus - * @param[in] midiControllerNumber - see \ref ControllerNumbers for expected values (could be bigger than 127) - * @param[in] id - return the associated ParamID to the given midiControllerNumber - */ - virtual tresult PLUGIN_API getMidiControllerAssignment (int32 busIndex, int16 channel, - CtrlNumber midiControllerNumber, ParamID& id/*out*/) = 0; + /** Gets an (preferred) associated ParamID for a given Input Event Bus index, channel and MIDI + * Controller. + * @param[in] busIndex - index of Input Event Bus + * @param[in] channel - channel of the bus + * @param[in] midiControllerNumber - see \ref ControllerNumbers for expected values (could be + * bigger than 127) + * @param[out] id - return the associated ParamID to the given midiControllerNumber + */ + virtual tresult PLUGIN_API getMidiControllerAssignment (int32 busIndex /*in*/, + int16 channel /*in*/, + CtrlNumber midiControllerNumber /*in*/, + ParamID& id /*out*/) = 0; - //------------------------------------------------------------------------ +//------------------------------------------------------------------------ static const FUID iid; }; @@ -595,9 +657,9 @@ DECLARE_CLASS_IID (IMidiMapping, 0xDF0FF9F7, 0x49B74669, 0xB63AB732, 0x7ADBF5E5) - [optional] If this interface is implemented by the edit controller, and when performing edits from outside -the plug-in (host / remote) of a not automatable and not read-only, and not hidden flagged parameter (kind of helper parameter), -the host will start with a beginEditFromHost before calling setParamNormalized and end with an endEditFromHost. -Here the sequence that the host will call: +the plug-in (host / remote) of a not automatable and not read-only, and not hidden flagged parameter +(kind of helper parameter), the host will start with a beginEditFromHost before calling +setParamNormalized and end with an endEditFromHost. Here the sequence that the host will call: \section IEditControllerExample Example @@ -610,18 +672,19 @@ plugEditController->setParamNormalized (id, value + 0.1); plugEditController->endEditFromHost (id); \endcode -\see \ref IEditController +\see \ref IEditController */ class IEditControllerHostEditing : public FUnknown { public: - /** Called before a setParamNormalized sequence, a endEditFromHost will be call at the end of the editing action. */ - virtual tresult PLUGIN_API beginEditFromHost (ParamID paramID) = 0; + /** Called before a setParamNormalized sequence, a endEditFromHost will be call at the end of + * the editing action. */ + virtual tresult PLUGIN_API beginEditFromHost (ParamID paramID /*in*/) = 0; /** Called after a beginEditFromHost and a sequence of setParamNormalized. */ - virtual tresult PLUGIN_API endEditFromHost (ParamID paramID) = 0; + virtual tresult PLUGIN_API endEditFromHost (ParamID paramID /*in*/) = 0; - //------------------------------------------------------------------------ +//------------------------------------------------------------------------ static const FUID iid; }; @@ -641,7 +704,7 @@ class IComponentHandlerSystemTime : public FUnknown public: //------------------------------------------------------------------------ /** get the current systemTime (the same as the one used in ProcessContext::systemTime). */ - virtual tresult PLUGIN_API getSystemTime (int64& systemTime) = 0; + virtual tresult PLUGIN_API getSystemTime (int64& systemTime /*out*/) = 0; //------------------------------------------------------------------------ static const FUID iid; }; diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstremapparamid.h b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstremapparamid.h index bf655d4e31..aafe9531c0 100644 --- a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstremapparamid.h +++ b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstremapparamid.h @@ -54,8 +54,10 @@ public: * @param[in] pluginToReplaceUID - TUID of plug-in (processor) that will be replaced * @param[in] oldParamID - paramID (or index for VST 2 plug-ins) to be replaced * @param[out] newParamID - contains the associated paramID to be used - * Return kResultTrue means that a compatible parameter is available - * Return kResultFalse means that NO compatible parameter is available + * + * @return kResultTrue if a compatible parameter is available (newParamID has the appropriate + * value, it could be the same than oldParamID), or kResultFalse if no compatible parameter is + * available (newParamID is undefined) */ virtual tresult PLUGIN_API getCompatibleParamID (const TUID pluginToReplaceUID /*in*/, ParamID oldParamID /*in*/, @@ -66,6 +68,7 @@ public: DECLARE_CLASS_IID (IRemapParamID, 0x2B88021E, 0x6286B646, 0xB49DF76A, 0x5663061C) + //------------------------------------------------------------------------ } // namespace Vst } // namespace Steinberg diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vstspeaker.h b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vstspeaker.h index ad70211d1a..077cd03c37 100644 --- a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vstspeaker.h +++ b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vstspeaker.h @@ -271,16 +271,20 @@ const SpeakerArrangement k70_2 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeake const SpeakerArrangement k71_2 = k70_2 | kSpeakerLfe; const SpeakerArrangement k91Atmos = k71_2; // 9.1 Dolby Atmos (3D) +/** L R C Ls Rs Sl Sr Tfl Tfr */ // 7.0.2 (~ITU 2+7+0.0) +const SpeakerArrangement k70_2_TF = k70Music | kSpeakerTfl | kSpeakerTfr; + +/** L R C Lfe Ls Rs Sl Sr Tfl Tfr */ // 7.1.2 (~ITU 2+7+0.1) +const SpeakerArrangement k71_2_TF = k70_2_TF | kSpeakerLfe; + /** L R C Ls Rs Sl Sr Tfl Tfr Trc */ // 7.0.3 (ITU 3+7+0.0 Sound System F) -const SpeakerArrangement k70_3 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | - kSpeakerSl | kSpeakerSr | kSpeakerTfl | kSpeakerTfr | kSpeakerTrc; +const SpeakerArrangement k70_3 = k70_2_TF | kSpeakerTrc; /** L R C Lfe Ls Rs Sl Sr Tfl Tfr Trc Lfe2 */ // 7.2.3 (ITU 3+7+0.2 Sound System F) const SpeakerArrangement k72_3 = k70_3 | kSpeakerLfe | kSpeakerLfe2; /** L R C Ls Rs Sl Sr Tfl Tfr Trl Trr */ // 7.0.4 (ITU 4+7+0.0 Sound System J) -const SpeakerArrangement k70_4 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr | - kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr; +const SpeakerArrangement k70_4 = k70_2_TF | kSpeakerTrl | kSpeakerTrr; /** L R C Lfe Ls Rs Sl Sr Tfl Tfr Trl Trr */ // 7.1.4 (ITU 4+7+0.1 Sound System J) const SpeakerArrangement k71_4 = k70_4 | kSpeakerLfe; @@ -502,6 +506,8 @@ const CString kString50_4_1 = "5.0.4.1"; const CString kString51_4_1 = "5.1.4.1"; const CString kString70_2 = "7.0.2"; const CString kString71_2 = "7.1.2"; +const CString kString70_2_TF = "7.0.2 Top Front"; +const CString kString71_2_TF = "7.1.2 Top Front"; const CString kString70_3 = "7.0.3"; const CString kString72_3 = "7.2.3"; const CString kString70_4 = "7.0.4"; @@ -605,6 +611,8 @@ const CString kString50_4_1S = "L R C Ls Rs Tfl Tfr Trl Trr Bfc"; const CString kString51_4_1S = "L R C LFE Ls Rs Tfl Tfr Trl Trr Bfc"; const CString kString70_2S = "L R C Ls Rs Sl Sr Tsl Tsr"; const CString kString71_2S = "L R C LFE Ls Rs Sl Sr Tsl Tsr"; +const CString kString70_2_TFS = "L R C Ls Rs Sl Sr Tfl Tfr"; +const CString kString71_2_TFS = "L R C LFE Ls Rs Sl Sr Tfl Tfr"; const CString kString70_3S = "L R C Ls Rs Sl Sr Tfl Tfr Trc"; const CString kString72_3S = "L R C LFE Ls Rs Sl Sr Tfl Tfr Trc LFE2"; const CString kString70_4S = "L R C Ls Rs Sl Sr Tfl Tfr Trl Trr"; @@ -939,6 +947,10 @@ inline SpeakerArrangement getSpeakerArrangementFromString (CString arrStr) return k70_2; if (!strcmp8 (arrStr, kString71_2)) return k71_2; + if (!strcmp8 (arrStr, kString70_2_TF)) + return k70_2_TF; + if (!strcmp8 (arrStr, kString71_2_TF)) + return k71_2_TF; if (!strcmp8 (arrStr, kString70_3)) return k70_3; if (!strcmp8 (arrStr, kString72_3)) @@ -1097,6 +1109,8 @@ inline CString getSpeakerArrangementString (SpeakerArrangement arr, bool withSpe case k51_6: return withSpeakersName ? kString51_6S : kString51_6; case k70_2: return withSpeakersName ? kString70_2S : kString70_2; case k71_2: return withSpeakersName ? kString71_2S : kString71_2; + case k70_2_TF: return withSpeakersName ? kString70_2_TFS : kString70_2_TF; + case k71_2_TF: return withSpeakersName ? kString71_2_TFS : kString71_2_TF; case k70_3: return withSpeakersName ? kString70_3S : kString70_3; case k72_3: return withSpeakersName ? kString72_3S : kString72_3; case k70_4: return withSpeakersName ? kString70_4S : kString70_4; diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vsttypes.h b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vsttypes.h index 243f02aa72..797cd24bb4 100644 --- a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vsttypes.h +++ b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vsttypes.h @@ -24,17 +24,18 @@ namespace Vst { //------------------------------------------------------------------------ /** VST 3 SDK Version */ #ifndef kVstVersionString -#define kVstVersionString "VST 3.7.11" ///< SDK version for PClassInfo2 +#define kVstVersionString "VST 3.7.12" ///< SDK version for PClassInfo2 #endif #define kVstVersionMajor 3 #define kVstVersionMinor 7 -#define kVstVersionSub 11 +#define kVstVersionSub 12 #define VST_VERSION ((kVstVersionMajor << 16) | (kVstVersionMinor << 8) | kVstVersionSub) // Versions History which allows to write such code: // #if VST_VERSION >= VST_3_6_5_VERSION +#define VST_3_7_12_VERSION 0x03070C #define VST_3_7_11_VERSION 0x03070B #define VST_3_7_10_VERSION 0x03070A #define VST_3_7_9_VERSION 0x030709 @@ -124,6 +125,7 @@ static SMTG_CONSTEXPR const uint32 SDKVersion = // Versions History which allows to write such code: // if constexpr (SDKVersion >= SDKVersion_3_6_5) { ... } +static SMTG_CONSTEXPR const uint32 SDKVersion_3_7_12 = VST_3_7_12_VERSION; static SMTG_CONSTEXPR const uint32 SDKVersion_3_7_11 = VST_3_7_11_VERSION; static SMTG_CONSTEXPR const uint32 SDKVersion_3_7_10 = VST_3_7_10_VERSION; static SMTG_CONSTEXPR const uint32 SDKVersion_3_7_9 = VST_3_7_9_VERSION; diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/samples/vst-utilities/moduleinfotool/source/main.cpp b/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/samples/vst-utilities/moduleinfotool/source/main.cpp index b18b92fcd5..a48e1eef01 100644 --- a/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/samples/vst-utilities/moduleinfotool/source/main.cpp +++ b/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/samples/vst-utilities/moduleinfotool/source/main.cpp @@ -353,7 +353,7 @@ int run (int argc, char* argv[]) { writeToFile = true; #if SMTG_OS_WINDOWS - auto tmp = VST3::StringConvert::convert (valueMap[optOutputPath]); + auto tmp = Vst::StringConvert::convert (valueMap[optOutputPath]); auto outputFile = reinterpret_cast (tmp.data ()); #else auto outputFile = valueMap[optOutputPath]; @@ -400,7 +400,7 @@ Utf8Args toUtf8Args (int argc, wchar_t* wargv[]) for (int i = 0; i < argc; i++) { auto str = reinterpret_cast (wargv[i]); - utf8Args.push_back (VST3::StringConvert::convert (str)); + utf8Args.push_back (Steinberg::Vst::StringConvert::convert (str)); } return utf8Args; diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/commonstringconvert.cpp b/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/commonstringconvert.cpp new file mode 100644 index 0000000000..28eacf1c69 --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/commonstringconvert.cpp @@ -0,0 +1,121 @@ +//----------------------------------------------------------------------------- +// Flags : clang-format SMTGSequencer +// Project : VST SDK +// +// Category : Helpers +// Filename : public.sdk/source/common/commonstringconvert.cpp +// Created by : Steinberg, 07/2024 +// Description : c++11 unicode string convert functions +// +//----------------------------------------------------------------------------- +// LICENSE +// (c) 2024, Steinberg Media Technologies GmbH, All Rights Reserved +//----------------------------------------------------------------------------- +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// * Neither the name of the Steinberg Media Technologies nor the names of its +// contributors may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. +//----------------------------------------------------------------------------- + +#include "commonstringconvert.h" + +#include +#include +#include + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +#elif defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable : 4996) +#endif + +//------------------------------------------------------------------------ +namespace Steinberg { +namespace StringConvert { + +//------------------------------------------------------------------------ +namespace { + +#if defined(_MSC_VER) && _MSC_VER >= 1900 +#define USE_WCHAR_AS_UTF16TYPE +using UTF16Type = wchar_t; +#else +using UTF16Type = char16_t; +#endif + +using Converter = std::wstring_convert, UTF16Type>; + +//------------------------------------------------------------------------ +Converter& converter () +{ + static Converter conv; + return conv; +} + +//------------------------------------------------------------------------ +} // anonymous + +//------------------------------------------------------------------------ +std::u16string convert (const std::string& utf8Str) +{ +#if defined(USE_WCHAR_AS_UTF16TYPE) + auto wstr = converter ().from_bytes (utf8Str); + return {wstr.data (), wstr.data () + wstr.size ()}; +#else + return converter ().from_bytes (utf8Str); +#endif +} + +//------------------------------------------------------------------------ +std::string convert (const std::u16string& str) +{ + return converter ().to_bytes (reinterpret_cast (str.data ()), + reinterpret_cast (str.data () + str.size ())); +} + +//------------------------------------------------------------------------ +std::string convert (const char* str, uint32_t max) +{ + std::string result; + if (str) + { + result.reserve (max); + for (uint32_t i = 0; i < max; ++i, ++str) + { + if (*str == 0) + break; + result += *str; + } + } + return result; +} + +//------------------------------------------------------------------------ +} // StringConvert +} // Steinberg + +#ifdef __clang__ +#pragma clang diagnostic pop +#elif defined(_MSC_VER) +#pragma warning(pop) +#endif diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/commonstringconvert.h b/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/commonstringconvert.h new file mode 100644 index 0000000000..2b2d8ca0e5 --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/commonstringconvert.h @@ -0,0 +1,94 @@ +//----------------------------------------------------------------------------- +// Flags : clang-format SMTGSequencer +// Project : VST SDK +// +// Category : stringconvert +// Filename : public.sdk/source/common/commonstringconvert.h +// Created by : Steinberg, 07/2024 +// Description : read file routine +// +//----------------------------------------------------------------------------- +// LICENSE +// (c) 2024, Steinberg Media Technologies GmbH, All Rights Reserved +//----------------------------------------------------------------------------- +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// * Neither the name of the Steinberg Media Technologies nor the names of its +// contributors may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. +//----------------------------------------------------------------------------- + +#pragma once + +#include +#include + +namespace Steinberg { +namespace StringConvert { + +//------------------------------------------------------------------------ +/** + * convert an UTF-8 string to an UTF-16 string + * + * @param utf8Str UTF-8 string + * + * @return UTF-16 string + */ +std::u16string convert (const std::string& utf8Str); + +//------------------------------------------------------------------------ +/** + * convert an UTF-16 string to an UTF-8 string + * + * @param str UTF-16 string + * + * @return UTF-8 string + */ +std::string convert (const std::u16string& str); + +//------------------------------------------------------------------------ +/** + * convert a ASCII string buffer to an UTF-8 string + * + * @param str ASCII string buffer + * @param max maximum characters in str + * + * @return UTF-8 string + */ +std::string convert (const char* str, uint32_t max); + +//------------------------------------------------------------------------ +/** + * convert a number to an UTF-16 string + * + * @param value number + * + * @return UTF-16 string + */ +template +std::u16string toString (NumberT value) +{ + auto u8str = std::to_string (value); + return StringConvert::convert (u8str); +} + +//------------------------------------------------------------------------ +} // namespace StringConvert +} // namespace Steinberg diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.cpp b/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.cpp index 24c18869ff..add9a2b1ba 100644 --- a/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.cpp +++ b/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.cpp @@ -51,7 +51,6 @@ CPluginView::CPluginView (const ViewRect* _rect) //------------------------------------------------------------------------ CPluginView::~CPluginView () { - setFrame (nullptr); } //------------------------------------------------------------------------ @@ -97,4 +96,5 @@ tresult PLUGIN_API CPluginView::getSize (ViewRect* size) return kInvalidArgument; } -} // end of namespace +//------------------------------------------------------------------------ +} // namespace Steinberg diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/readfile.cpp b/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/readfile.cpp index f1f0216ed4..ae082a88ce 100644 --- a/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/readfile.cpp +++ b/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/readfile.cpp @@ -9,7 +9,7 @@ // //----------------------------------------------------------------------------- // LICENSE -// (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved +// (c) 2024, Steinberg Media Technologies GmbH, All Rights Reserved //----------------------------------------------------------------------------- // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: @@ -40,11 +40,14 @@ #include "pluginterfaces/base/fplatform.h" #if SMTG_OS_WINDOWS -#include "public.sdk/source/vst/utility/stringconvert.h" +#include "commonstringconvert.h" #endif #include + +#if !SMTG_CPP17 #include +#endif namespace Steinberg { @@ -52,7 +55,7 @@ namespace Steinberg { std::string readFile (const std::string& path) { #if SMTG_OS_WINDOWS - auto u16Path = VST3::StringConvert::convert (path); + auto u16Path = StringConvert::convert (path); std::ifstream file (reinterpret_cast (u16Path.data ()), std::ios_base::in | std::ios_base::binary); #else @@ -74,7 +77,7 @@ std::string readFile (const std::string& path) std::stringstream buffer; buffer << file.rdbuf (); return buffer.str (); -#endif +#endif // SMTG_CPP17 } //------------------------------------------------------------------------ diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/readfile.h b/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/readfile.h index 8fe2ab925e..34ff7ff20f 100644 --- a/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/readfile.h +++ b/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/readfile.h @@ -9,7 +9,7 @@ // //----------------------------------------------------------------------------- // LICENSE -// (c) 2023, Steinberg Media Technologies GmbH, All Rights Reserved +// (c) 2024, Steinberg Media Technologies GmbH, All Rights Reserved //----------------------------------------------------------------------------- // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/hostclasses.cpp b/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/hostclasses.cpp index 266c08c3b3..78f52e0743 100644 --- a/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/hostclasses.cpp +++ b/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/hostclasses.cpp @@ -53,7 +53,7 @@ HostApplication::HostApplication () //----------------------------------------------------------------------------- tresult PLUGIN_API HostApplication::getName (String128 name) { - return VST3::StringConvert::convert ("My VST3 HostApplication", name) ? kResultTrue : + return StringConvert::convert ("My VST3 HostApplication", name) ? kResultTrue : kInternalError; } diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/module.cpp b/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/module.cpp index 88d910f6ff..28f819b46d 100644 --- a/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/module.cpp +++ b/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/module.cpp @@ -37,6 +37,7 @@ #include "module.h" #include "public.sdk/source/vst/utility/stringconvert.h" #include "public.sdk/source/vst/utility/optional.h" +#include "pluginterfaces/base/funknownimpl.h" #include #include @@ -69,18 +70,21 @@ FactoryInfo& FactoryInfo::operator= (PFactoryInfo&& other) noexcept //------------------------------------------------------------------------ std::string FactoryInfo::vendor () const noexcept { + namespace StringConvert = Steinberg::Vst::StringConvert; return StringConvert::convert (info.vendor, PFactoryInfo::kNameSize); } //------------------------------------------------------------------------ std::string FactoryInfo::url () const noexcept { + namespace StringConvert = Steinberg::Vst::StringConvert; return StringConvert::convert (info.url, PFactoryInfo::kURLSize); } //------------------------------------------------------------------------ std::string FactoryInfo::email () const noexcept { + namespace StringConvert = Steinberg::Vst::StringConvert; return StringConvert::convert (info.email, PFactoryInfo::kEmailSize); } @@ -145,8 +149,8 @@ PluginFactory::ClassInfos PluginFactory::classInfos () const noexcept Optional factoryInfo; ClassInfos classes; classes.reserve (count); - auto f3 = Steinberg::FUnknownPtr (factory); - auto f2 = Steinberg::FUnknownPtr (factory); + auto f3 = Steinberg::U::cast (factory); + auto f2 = Steinberg::U::cast (factory); Steinberg::PClassInfo ci; Steinberg::PClassInfo2 ci2; Steinberg::PClassInfoW ci3; @@ -228,6 +232,7 @@ Steinberg::uint32 ClassInfo::classFlags () const noexcept //------------------------------------------------------------------------ ClassInfo::ClassInfo (const PClassInfo& info) noexcept { + namespace StringConvert = Steinberg::Vst::StringConvert; data.classID = info.cid; data.cardinality = info.cardinality; data.category = StringConvert::convert (info.category, PClassInfo::kCategorySize); @@ -237,6 +242,7 @@ ClassInfo::ClassInfo (const PClassInfo& info) noexcept //------------------------------------------------------------------------ ClassInfo::ClassInfo (const PClassInfo2& info) noexcept { + namespace StringConvert = Steinberg::Vst::StringConvert; data.classID = info.cid; data.cardinality = info.cardinality; data.category = StringConvert::convert (info.category, PClassInfo::kCategorySize); @@ -252,6 +258,7 @@ ClassInfo::ClassInfo (const PClassInfo2& info) noexcept //------------------------------------------------------------------------ ClassInfo::ClassInfo (const PClassInfoW& info) noexcept { + namespace StringConvert = Steinberg::Vst::StringConvert; data.classID = info.cid; data.cardinality = info.cardinality; data.category = StringConvert::convert (info.category, PClassInfo::kCategorySize); diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/module_linux.cpp b/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/module_linux.cpp index 96b87979ac..2b08d7e888 100644 --- a/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/module_linux.cpp +++ b/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/module_linux.cpp @@ -35,8 +35,11 @@ //----------------------------------------------------------------------------- #include "module.h" -#include "../utility/optional.h" -#include "../utility/stringconvert.h" +#include "public.sdk/source/vst/utility/optional.h" +#include "public.sdk/source/vst/utility/stringconvert.h" + +#include "pluginterfaces/base/funknownimpl.h" + #include #include #include @@ -62,12 +65,12 @@ #include namespace filesystem = std::experimental::filesystem; -#else // USE_FILESYSTEM == 0 +#else // USE_EXPERIMENTAL_FS == 0 #include namespace filesystem = std::filesystem; -#endif // USE_FILESYSTEM +#endif // USE_EXPERIMENTAL_FS //------------------------------------------------------------------------ extern "C" { @@ -215,7 +218,7 @@ public: errorDescription = "Calling 'ModuleEntry' failed"; return false; } - auto f = Steinberg::FUnknownPtr (owned (factoryProc ())); + auto f = Steinberg::U::cast (owned (factoryProc ())); if (!f) { errorDescription = "Calling 'GetPluginFactory' returned nullptr"; diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/module_mac.mm b/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/module_mac.mm index 8532906728..4d8062ee54 100644 --- a/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/module_mac.mm +++ b/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/module_mac.mm @@ -286,7 +286,7 @@ void getApplicationModules (Module::PathList& result) //------------------------------------------------------------------------ void getModuleSnapshots (const std::string& path, Module::SnapshotList& result) { - auto nsString = [NSString stringWithUTF8String:path.data ()]; + auto* nsString = [NSString stringWithUTF8String:path.data ()]; if (!nsString) return; auto bundleUrl = [NSURL fileURLWithPath:nsString]; @@ -372,7 +372,7 @@ Module::SnapshotList Module::getSnapshots (const std::string& modulePath) //------------------------------------------------------------------------ Optional Module::getModuleInfoPath (const std::string& modulePath) { - auto nsString = [NSString stringWithUTF8String:modulePath.data ()]; + auto* nsString = [NSString stringWithUTF8String:modulePath.data ()]; if (!nsString) return {}; auto bundleUrl = [NSURL fileURLWithPath:nsString]; diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/module_win32.cpp b/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/module_win32.cpp index ae1d03a7da..c3f276598d 100644 --- a/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/module_win32.cpp +++ b/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/module_win32.cpp @@ -34,9 +34,11 @@ // OF THE POSSIBILITY OF SUCH DAMAGE. //----------------------------------------------------------------------------- -#include "../utility/optional.h" -#include "../utility/stringconvert.h" #include "module.h" +#include "public.sdk/source/vst/utility/optional.h" +#include "public.sdk/source/vst/utility/stringconvert.h" + +#include "pluginterfaces/base/funknownimpl.h" #include #include @@ -168,8 +170,11 @@ public: } //--- ----------------------------------------------------------------------- - HINSTANCE loadAsPackage (const std::string& inPath, const char* archString = architectureString) + HINSTANCE loadAsPackage (const std::string& inPath, std::string& errorDescription, + const char* archString = architectureString) { + namespace StringConvert = Steinberg::Vst::StringConvert; + filesystem::path p (inPath); auto filename = p.filename (); p /= "Contents"; @@ -179,34 +184,25 @@ public: HINSTANCE instance = LoadLibraryW (reinterpret_cast (wideStr.data ())); #if SMTG_CPU_ARM_64EC if (instance == nullptr) - instance = loadAsPackage (inPath, architectureArm64XString); + instance = loadAsPackage (inPath, errorDescription, architectureArm64XString); if (instance == nullptr) - instance = loadAsPackage (inPath, architectureX64String); + instance = loadAsPackage (inPath, errorDescription, architectureX64String); #endif + if (instance == nullptr) + getLastError (p.string (), errorDescription); return instance; } //--- ----------------------------------------------------------------------- HINSTANCE loadAsDll (const std::string& inPath, std::string& errorDescription) { + namespace StringConvert = Steinberg::Vst::StringConvert; + auto wideStr = StringConvert::convert (inPath); HINSTANCE instance = LoadLibraryW (reinterpret_cast (wideStr.data ())); if (instance == nullptr) { - auto lastError = GetLastError (); - LPVOID lpMessageBuffer {nullptr}; - if (FormatMessageA (FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, - nullptr, lastError, MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPSTR)&lpMessageBuffer, 0, nullptr) > 0) - { - errorDescription = "LoadLibray failed: " + std::string ((char*)lpMessageBuffer); - LocalFree (lpMessageBuffer); - } - else - { - errorDescription = - "LoadLibrary failed with error number : " + std::to_string (lastError); - } + getLastError (inPath, errorDescription); } else { @@ -218,7 +214,7 @@ public: //--- ----------------------------------------------------------------------- bool load (const std::string& inPath, std::string& errorDescription) override { - // filesystem::u8path is deprecated in C++20 +// filesystem::u8path is deprecated in C++20 #if SMTG_CPP20 const filesystem::path tmp (inPath); #else @@ -227,7 +223,7 @@ public: if (filesystem::is_directory (tmp)) { // try as package (bundle) - mModule = loadAsPackage (inPath); + mModule = loadAsPackage (inPath, errorDescription); } else { @@ -250,7 +246,7 @@ public: errorDescription = "Calling 'InitDll' failed"; return false; } - auto f = Steinberg::FUnknownPtr (owned (factoryProc ())); + auto f = Steinberg::U::cast (owned (factoryProc ())); if (!f) { errorDescription = "Calling 'GetPluginFactory' returned nullptr"; @@ -261,6 +257,27 @@ public: } HINSTANCE mModule {nullptr}; + +private: + //--- ----------------------------------------------------------------------- + void getLastError (const std::string& inPath, std::string& errorDescription) + { + auto lastError = GetLastError (); + LPVOID lpMessageBuffer {nullptr}; + if (FormatMessageA (FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, nullptr, + lastError, MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPSTR)&lpMessageBuffer, 0, nullptr) > 0) + { + errorDescription = "LoadLibraryW failed for path " + inPath + ": " + + std::string ((char*)lpMessageBuffer); + LocalFree (lpMessageBuffer); + } + else + { + errorDescription = "LoadLibraryW failed with error number: " + + std::to_string (lastError) + " for path " + inPath; + } + } }; //------------------------------------------------------------------------ @@ -323,6 +340,8 @@ bool isFolderSymbolicLink (const filesystem::path& p) //------------------------------------------------------------------------ Optional getKnownFolder (REFKNOWNFOLDERID folderID) { + namespace StringConvert = Steinberg::Vst::StringConvert; + PWSTR wideStr {}; if (FAILED (SHGetKnownFolderPath (folderID, 0, nullptr, &wideStr))) return {}; @@ -378,7 +397,7 @@ VST3::Optional resolveShellLink (const filesystem::path& p) void addToPathList (Module::PathList& pathList, const std::string& toAdd) { #if LOG_ENABLE - std::cout << "=> add: " << toAdd << "\n"; + std::cout << "=> add: " << toAdd << "\n"; #endif pathList.push_back (toAdd); @@ -525,6 +544,8 @@ Module::Ptr Module::create (const std::string& path, std::string& errorDescripti //------------------------------------------------------------------------ Module::PathList Module::getModulePaths () { + namespace StringConvert = Steinberg::Vst::StringConvert; + // find plug-ins located in common/VST3 PathList list; if (auto knownFolder = getKnownFolder (FOLDERID_UserProgramFilesCommon)) @@ -546,7 +567,7 @@ Module::PathList Module::getModulePaths () #endif findModules (path, list); } - + // find plug-ins located in VST3 (application folder) WCHAR modulePath[kIPPathNameMax]; GetModuleFileNameW (nullptr, modulePath, kIPPathNameMax); diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/utility/stringconvert.cpp b/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/utility/stringconvert.cpp index 75cf08c0a7..967e34618c 100644 --- a/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/utility/stringconvert.cpp +++ b/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/utility/stringconvert.cpp @@ -12,35 +12,45 @@ //----------------------------------------------------------------------------- // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: -// -// * Redistributions of source code must retain the above copyright notice, +// +// * Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation +// this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // * Neither the name of the Steinberg Media Technologies nor the names of its -// contributors may be used to endorse or promote products derived from this +// contributors may be used to endorse or promote products derived from this // software without specific prior written permission. -// +// // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -// IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE // OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED // OF THE POSSIBILITY OF SUCH DAMAGE. //----------------------------------------------------------------------------- -#include "stringconvert.h" -#include -#include -#include +#include "pluginterfaces/base/fplatform.h" -//------------------------------------------------------------------------ -namespace VST3 { +#if SMTG_OS_WINDOWS +#ifndef _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING +#define _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING +#endif +#endif // SMTG_OS_WINDOWS + +#include "public.sdk/source/vst/utility/stringconvert.h" +#include "public.sdk/source/common/commonstringconvert.h" + +#include +#include +#include + +namespace Steinberg { +namespace Vst { namespace StringConvert { //------------------------------------------------------------------------ @@ -53,6 +63,14 @@ using UTF16Type = wchar_t; using UTF16Type = char16_t; #endif +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +#elif defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable : 4996) +#endif + using Converter = std::wstring_convert, UTF16Type>; //------------------------------------------------------------------------ @@ -62,18 +80,19 @@ Converter& converter () return conv; } +#ifdef __clang__ +#pragma clang diagnostic pop +#elif defined(_MSC_VER) +#pragma warning(pop) +#endif + //------------------------------------------------------------------------ } // anonymous //------------------------------------------------------------------------ std::u16string convert (const std::string& utf8Str) { -#if defined(USE_WCHAR_AS_UTF16TYPE) - auto wstr = converter ().from_bytes (utf8Str); - return {wstr.data (), wstr.data () + wstr.size ()}; -#else - return converter ().from_bytes (utf8Str); -#endif + return Steinberg::StringConvert::convert (utf8Str); } //------------------------------------------------------------------------ @@ -122,27 +141,16 @@ std::string convert (const Steinberg::Vst::TChar* str, uint32_t max) //------------------------------------------------------------------------ std::string convert (const std::u16string& str) { - return converter ().to_bytes (reinterpret_cast (str.data ()), - reinterpret_cast (str.data () + str.size ())); + return Steinberg::StringConvert::convert (str); } //------------------------------------------------------------------------ std::string convert (const char* str, uint32_t max) { - std::string result; - if (str) - { - result.reserve (max); - for (uint32_t i = 0; i < max; ++i, ++str) - { - if (*str == 0) - break; - result += *str; - } - } - return result; + return Steinberg::StringConvert::convert (str, max); } //------------------------------------------------------------------------ -} // String -} // VST3 +} // StringConvert +} // Vst +} // Steinberg diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/utility/stringconvert.h b/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/utility/stringconvert.h index b3bc1ac65a..c9fbc90445 100644 --- a/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/utility/stringconvert.h +++ b/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/utility/stringconvert.h @@ -12,24 +12,24 @@ //----------------------------------------------------------------------------- // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: -// -// * Redistributions of source code must retain the above copyright notice, +// +// * Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation +// this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // * Neither the name of the Steinberg Media Technologies nor the names of its -// contributors may be used to endorse or promote products derived from this +// contributors may be used to endorse or promote products derived from this // software without specific prior written permission. -// +// // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -// IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE // OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED // OF THE POSSIBILITY OF SUCH DAMAGE. //----------------------------------------------------------------------------- @@ -39,19 +39,27 @@ #include "pluginterfaces/vst/vsttypes.h" #include -//------------------------------------------------------------------------ -namespace VST3 { +namespace Steinberg { +namespace Vst { namespace StringConvert { //------------------------------------------------------------------------ /** - * convert an UTF-8 string to an UTF-16 string - * - * @param utf8Str UTF-8 string - * - * @return UTF-16 string + * Forward to Steinberg::StringConvert::convert (...) */ -extern std::u16string convert (const std::string& utf8Str); +std::u16string convert (const std::string& utf8Str); + +//------------------------------------------------------------------------ +/** + * Forward to Steinberg::StringConvert::convert (...) + */ +std::string convert (const std::u16string& str); + +//------------------------------------------------------------------------ +/** + * Forward to Steinberg::StringConvert::convert (...) + */ +std::string convert (const char* str, uint32_t max); //------------------------------------------------------------------------ /** @@ -62,7 +70,7 @@ extern std::u16string convert (const std::string& utf8Str); * * @return true on success */ -extern bool convert (const std::string& utf8Str, Steinberg::Vst::String128 str); +bool convert (const std::string& utf8Str, Steinberg::Vst::String128 str); //------------------------------------------------------------------------ /** @@ -74,7 +82,7 @@ extern bool convert (const std::string& utf8Str, Steinberg::Vst::String128 str); * * @return true on success */ -extern bool convert (const std::string& utf8Str, Steinberg::Vst::TChar* str, +bool convert (const std::string& utf8Str, Steinberg::Vst::TChar* str, uint32_t maxCharacters); //------------------------------------------------------------------------ @@ -85,7 +93,7 @@ extern bool convert (const std::string& utf8Str, Steinberg::Vst::TChar* str, * * @return UTF-8 string */ -extern std::string convert (const Steinberg::Vst::TChar* str); +std::string convert (const Steinberg::Vst::TChar* str); //------------------------------------------------------------------------ /** @@ -96,28 +104,7 @@ extern std::string convert (const Steinberg::Vst::TChar* str); * * @return UTF-8 string */ -extern std::string convert (const Steinberg::Vst::TChar* str, uint32_t max); - -//------------------------------------------------------------------------ -/** - * convert an UTF-16 string to an UTF-8 string - * - * @param str UTF-16 string - * - * @return UTF-8 string - */ -extern std::string convert (const std::u16string& str); - -//------------------------------------------------------------------------ -/** - * convert a ASCII string buffer to an UTF-8 string - * - * @param str ASCII string buffer - * @param max maximum characters in str - * - * @return UTF-8 string - */ -extern std::string convert (const char* str, uint32_t max); +std::string convert (const Steinberg::Vst::TChar* str, uint32_t max); //------------------------------------------------------------------------ } // StringConvert @@ -133,15 +120,92 @@ inline const Steinberg::Vst::TChar* toTChar (const std::u16string& str) * convert a number to an UTF-16 string * * @param value number - * + * * @return UTF-16 string */ -template +template std::u16string toString (NumberT value) { auto u8str = std::to_string (value); return StringConvert::convert (u8str); } +//------------------------------------------------------------------------ +} // Vst +} // Steinberg + +//------------------------------------------------------------------------ +// Deprecated VST3 namespace +//------------------------------------------------------------------------ +namespace VST3 { +namespace StringConvert { + +//------------------------------------------------------------------------ +SMTG_DEPRECATED_MSG ("Use Steinberg::Vst::StringConvert::convert (...)") +inline std::u16string convert (const std::string& utf8Str) +{ + return Steinberg::Vst::StringConvert::convert (utf8Str); +} + +//------------------------------------------------------------------------ +SMTG_DEPRECATED_MSG ("Use Steinberg::Vst::StringConvert::convert (...)") +inline std::string convert (const std::u16string& str) +{ + return Steinberg::Vst::StringConvert::convert (str); +} + +//------------------------------------------------------------------------ +SMTG_DEPRECATED_MSG ("Use Steinberg::Vst::StringConvert::convert (...)") +inline std::string convert (const char* str, uint32_t max) +{ + return Steinberg::Vst::StringConvert::convert (str, max); +} + +//------------------------------------------------------------------------ +SMTG_DEPRECATED_MSG ("Use Steinberg::Vst::StringConvert::convert (...)") +inline bool convert (const std::string& utf8Str, Steinberg::Vst::String128 str) +{ + return Steinberg::Vst::StringConvert::convert (utf8Str, str); +} + +//------------------------------------------------------------------------ +SMTG_DEPRECATED_MSG ("Use Steinberg::Vst::StringConvert::convert (...)") +inline bool convert (const std::string& utf8Str, Steinberg::Vst::TChar* str, uint32_t maxCharacters) +{ + return Steinberg::Vst::StringConvert::convert (utf8Str, str, maxCharacters); +} + +//------------------------------------------------------------------------ +SMTG_DEPRECATED_MSG ("Use Steinberg::Vst::StringConvert::convert (...)") +inline std::string convert (const Steinberg::Vst::TChar* str) +{ + return Steinberg::Vst::StringConvert::convert (str); +} + +//------------------------------------------------------------------------ +SMTG_DEPRECATED_MSG ("Use Steinberg::Vst::StringConvert::convert (...)") +inline std::string convert (const Steinberg::Vst::TChar* str, uint32_t max) +{ + return Steinberg::Vst::StringConvert::convert (str, max); +} + +//------------------------------------------------------------------------ +} // StringConvert + +//------------------------------------------------------------------------ +SMTG_DEPRECATED_MSG ("Use Steinberg::Vst::toTChar (...)") +inline const Steinberg::Vst::TChar* toTChar (const std::u16string& str) +{ + return Steinberg::Vst::toTChar (str); +} + +//------------------------------------------------------------------------ +template +SMTG_DEPRECATED_MSG ("Use Steinberg::Vst::toString (...)") +std::u16string toString (NumberT value) +{ + return Steinberg::Vst::toString (value); +} + //------------------------------------------------------------------------ } // VST3 diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/utility/vst2persistence.cpp b/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/utility/vst2persistence.cpp index a6ccdb0098..5179628629 100644 --- a/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/utility/vst2persistence.cpp +++ b/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/utility/vst2persistence.cpp @@ -520,7 +520,7 @@ Optional tryVst2StateLoad (Steinberg::IBStream& stream, int32_t numPrograms; if (!(state >> numPrograms)) return {}; - if (numPrograms < 1) + if (numPrograms < 1 && fxMagic == bankMagic) return {}; int32_t currentProgram = 0; diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponentbase.cpp b/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponentbase.cpp index d2e5ffb1d9..e93faf4553 100644 --- a/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponentbase.cpp +++ b/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponentbase.cpp @@ -36,6 +36,7 @@ #include "vstcomponentbase.h" #include "base/source/fstring.h" +#include "pluginterfaces/base/funknownimpl.h" namespace Steinberg { namespace Vst { @@ -129,8 +130,7 @@ tresult PLUGIN_API ComponentBase::notify (IMessage* message) //------------------------------------------------------------------------ IMessage* ComponentBase::allocateMessage () const { - FUnknownPtr hostApp (hostContext); - if (hostApp) + if (auto hostApp = U::cast (hostContext)) return Vst::allocateMessage (hostApp); return nullptr; } diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vsteditcontroller.cpp b/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vsteditcontroller.cpp index be32db509d..afdf97aec5 100644 --- a/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vsteditcontroller.cpp +++ b/modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vsteditcontroller.cpp @@ -36,6 +36,7 @@ #include "public.sdk/source/vst/vsteditcontroller.h" #include "base/source/updatehandler.h" +#include "pluginterfaces/base/funknownimpl.h" #include "pluginterfaces/base/ustring.h" #include @@ -363,8 +364,7 @@ tresult PLUGIN_API EditControllerEx1::getUnitInfo (int32 unitIndex, UnitInfo& in tresult EditControllerEx1::notifyUnitSelection () { tresult result = kResultFalse; - FUnknownPtr unitHandler (componentHandler); - if (unitHandler) + if (auto unitHandler = U::cast (componentHandler)) result = unitHandler->notifyUnitSelection (selectedUnit); return result; } @@ -389,8 +389,7 @@ ProgramList* EditControllerEx1::getProgramList (ProgramListID listId) const tresult EditControllerEx1::notifyProgramListChange (ProgramListID listId, int32 programIndex) { tresult result = kResultFalse; - FUnknownPtr unitHandler (componentHandler); - if (unitHandler) + if (auto unitHandler = U::cast (componentHandler)) result = unitHandler->notifyProgramListChange (listId, programIndex); return result; } @@ -478,8 +477,7 @@ void PLUGIN_API EditControllerEx1::update (FUnknown* changedUnknown, int32 /*mes auto* programList = FCast (changedUnknown); if (programList) { - FUnknownPtr unitHandler (componentHandler); - if (unitHandler) + if (auto unitHandler = U::cast (componentHandler)) unitHandler->notifyProgramListChange (programList->getID (), kAllProgramInvalid); } } diff --git a/modules/juce_audio_processors/format_types/juce_VST3Headers.h b/modules/juce_audio_processors/format_types/juce_VST3Headers.h index b8eb6dcddd..db2c4f11d7 100644 --- a/modules/juce_audio_processors/format_types/juce_VST3Headers.h +++ b/modules/juce_audio_processors/format_types/juce_VST3Headers.h @@ -38,6 +38,11 @@ #error To build JUCE VST3 plug-ins on BSD you must use an external BSD-compatible VST3 SDK with JUCE_CUSTOM_VST3_SDK=1 #endif +// It's important to include this *before* any of the Steinberg headers. +// On Windows, the VST3 headers might end up defining `stricmp` as `_stricmp` before including +// or , which prevents the use of stricmp in JUCE source. +#include + // Wow, those Steinberg guys really don't worry too much about compiler warnings. JUCE_BEGIN_IGNORE_WARNINGS_LEVEL_MSVC (0, 4505 4702 6011 6031 6221 6386 6387 6330 6001 28199) @@ -83,7 +88,8 @@ JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-W#warnings", "-Wunused-but-set-variable", "-Wunused-function", "-Wunused-parameter", - "-Wzero-as-null-pointer-constant") + "-Wzero-as-null-pointer-constant", + "-Wdangling-else") #undef DEVELOPMENT #define DEVELOPMENT 0 // This avoids a Clang warning in Steinberg code about unused values @@ -157,10 +163,10 @@ JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-W#warnings", #include #endif -#pragma push_macro ("True") -#undef True -#pragma push_macro ("False") -#undef False + #pragma push_macro ("True") + #undef True + #pragma push_macro ("False") + #undef False JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wmultichar", "-Wfour-char-constants") @@ -173,6 +179,7 @@ JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-W#warnings", #include #include #include + #include #include #include #include @@ -190,8 +197,8 @@ JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-W#warnings", JUCE_END_IGNORE_WARNINGS_GCC_LIKE -#pragma pop_macro ("True") -#pragma pop_macro ("False") + #pragma pop_macro ("True") + #pragma pop_macro ("False") #if VST_VERSION >= 0x03060c // 3.6.12 #include