1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-09 23:34:20 +00:00

VST3: Update SDK to 3.7.12

This commit is contained in:
Anthony Nicholls 2024-08-30 11:51:51 +01:00
parent c49fe0b6be
commit 9b3a513ae3
59 changed files with 1455 additions and 386 deletions

View file

@ -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"

View file

@ -914,6 +914,9 @@
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source\main.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@ -3498,6 +3501,7 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\fstrdefs.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\ftypes.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknown.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknownimpl.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\futils.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\fvariant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\ibstream.h"/>
@ -3541,6 +3545,7 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vstpshpack4.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vstspeaker.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vsttypes.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\pluginview.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\readfile.h"/>

View file

@ -1603,6 +1603,9 @@
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source\main.cpp">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.cpp">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.cpp">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClCompile>
@ -5082,6 +5085,9 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknown.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknownimpl.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\futils.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base</Filter>
</ClInclude>
@ -5211,6 +5217,9 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vsttypes.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClInclude>

View file

@ -914,6 +914,9 @@
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source\main.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@ -3498,6 +3501,7 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\fstrdefs.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\ftypes.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknown.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknownimpl.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\futils.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\fvariant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\ibstream.h"/>
@ -3541,6 +3545,7 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vstpshpack4.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vstspeaker.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vsttypes.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\pluginview.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\readfile.h"/>

View file

@ -1603,6 +1603,9 @@
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source\main.cpp">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.cpp">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.cpp">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClCompile>
@ -5082,6 +5085,9 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknown.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknownimpl.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\futils.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base</Filter>
</ClInclude>
@ -5211,6 +5217,9 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vsttypes.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClInclude>

View file

@ -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"

View file

@ -874,6 +874,9 @@
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source\main.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@ -3070,6 +3073,7 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\fstrdefs.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\ftypes.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknown.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknownimpl.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\futils.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\fvariant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\ibstream.h"/>
@ -3113,6 +3117,7 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vstpshpack4.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vstspeaker.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vsttypes.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\pluginview.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\readfile.h"/>

View file

@ -1420,6 +1420,9 @@
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source\main.cpp">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.cpp">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.cpp">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClCompile>
@ -4440,6 +4443,9 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknown.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknownimpl.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\futils.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base</Filter>
</ClInclude>
@ -4569,6 +4575,9 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vsttypes.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClInclude>

View file

@ -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"

View file

@ -882,6 +882,9 @@
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source\main.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@ -3250,6 +3253,7 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\fstrdefs.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\ftypes.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknown.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknownimpl.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\futils.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\fvariant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\ibstream.h"/>
@ -3293,6 +3297,7 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vstpshpack4.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vstspeaker.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vsttypes.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\pluginview.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\readfile.h"/>

View file

@ -1495,6 +1495,9 @@
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source\main.cpp">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.cpp">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.cpp">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClCompile>
@ -4716,6 +4719,9 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknown.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknownimpl.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\futils.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base</Filter>
</ClInclude>
@ -4845,6 +4851,9 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vsttypes.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClInclude>

View file

@ -882,6 +882,9 @@
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source\main.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@ -3250,6 +3253,7 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\fstrdefs.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\ftypes.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknown.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknownimpl.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\futils.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\fvariant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\ibstream.h"/>
@ -3293,6 +3297,7 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vstpshpack4.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vstspeaker.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vsttypes.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\pluginview.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\readfile.h"/>

View file

@ -1495,6 +1495,9 @@
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source\main.cpp">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.cpp">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.cpp">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClCompile>
@ -4716,6 +4719,9 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknown.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknownimpl.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\futils.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base</Filter>
</ClInclude>
@ -4845,6 +4851,9 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vsttypes.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClInclude>

View file

@ -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"

View file

@ -874,6 +874,9 @@
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source\main.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@ -3161,6 +3164,7 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\fstrdefs.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\ftypes.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknown.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknownimpl.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\futils.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\fvariant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\ibstream.h"/>
@ -3204,6 +3208,7 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vstpshpack4.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vstspeaker.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vsttypes.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\pluginview.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\readfile.h"/>

View file

@ -1450,6 +1450,9 @@
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source\main.cpp">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.cpp">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.cpp">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClCompile>
@ -4581,6 +4584,9 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknown.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknownimpl.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\futils.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base</Filter>
</ClInclude>
@ -4710,6 +4716,9 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vsttypes.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClInclude>

View file

@ -890,6 +890,9 @@
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source\main.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@ -3346,6 +3349,7 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\fstrdefs.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\ftypes.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknown.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknownimpl.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\futils.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\fvariant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\ibstream.h"/>
@ -3389,6 +3393,7 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vstpshpack4.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vstspeaker.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vsttypes.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\pluginview.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\readfile.h"/>

View file

@ -1516,6 +1516,9 @@
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source\main.cpp">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.cpp">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.cpp">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClCompile>
@ -4830,6 +4833,9 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknown.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknownimpl.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\futils.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base</Filter>
</ClInclude>
@ -4959,6 +4965,9 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vsttypes.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClInclude>

View file

@ -890,6 +890,9 @@
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source\main.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@ -3346,6 +3349,7 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\fstrdefs.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\ftypes.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknown.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknownimpl.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\futils.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\fvariant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\ibstream.h"/>
@ -3389,6 +3393,7 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vstpshpack4.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vstspeaker.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vsttypes.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\pluginview.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\readfile.h"/>

View file

@ -1516,6 +1516,9 @@
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source\main.cpp">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.cpp">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.cpp">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClCompile>
@ -4830,6 +4833,9 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknown.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknownimpl.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\futils.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base</Filter>
</ClInclude>
@ -4959,6 +4965,9 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vsttypes.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClInclude>

View file

@ -873,6 +873,9 @@
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source\main.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@ -3137,6 +3140,7 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\fstrdefs.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\ftypes.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknown.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknownimpl.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\futils.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\fvariant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\ibstream.h"/>
@ -3180,6 +3184,7 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vstpshpack4.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vstspeaker.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vsttypes.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\pluginview.h"/>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\readfile.h"/>

View file

@ -1447,6 +1447,9 @@
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source\main.cpp">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.cpp">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.cpp">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClCompile>
@ -4548,6 +4551,9 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknown.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\funknownimpl.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base\futils.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base</Filter>
</ClInclude>
@ -4677,6 +4683,9 @@
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst\vsttypes.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\commonstringconvert.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common\memorystream.h">
<Filter>JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common</Filter>
</ClInclude>

View file

@ -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 <juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/coreiids.cpp>
#include <juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.cpp>
#include <juce_audio_processors/format_types/VST3_SDK/public.sdk/samples/vst-utilities/moduleinfotool/source/main.cpp>
#include <juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/commonstringconvert.cpp>
#include <juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.cpp>
#include <juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/readfile.cpp>
#include <juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/module.cpp>

View file

@ -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|
---
<div id='300'/>

View file

@ -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;

View file

@ -39,6 +39,7 @@
#include "base/source/fobject.h"
#include "base/thread/include/flock.h"
#include <functional>
#include <vector>
#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<void (FObject*, bool)>;
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;

View file

@ -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;

View file

@ -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<size_t> (-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<Steinberg::IString> (var.getObject ()))
if (string->isWideString ())
assign (string->getText16 ());
else
assign (string->getText8 ());
return true;
default:
remove ();
}

View file

@ -45,6 +45,7 @@
#include "base/source/fobject.h"
#include <cstdarg>
#include <cstdlib>
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);}

View file

@ -72,7 +72,10 @@ inline IPtr<FUnknown> 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);
}

View file

@ -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

View file

@ -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 {

View file

@ -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);

View file

@ -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 <size_t N>
inline explicit FUID (const char (&uid)[N])
{

View file

@ -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 <atomic>
#include <type_traits>
//------------------------------------------------------------------------
#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<U::Directly<IFoo>>
{
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<IFoo> (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::Directly<IBar>, U::Indirectly<IFoo>>
{
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<FooImpl, U::Directly<ITest>>
{
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<U::Directly<IFoo>>
{
AlternativeFooImpl (int dummy = 0) : dummy {dummy} {}
void bar () override {}
int dummy;
};
struct AlternativeTestImpl : public U::Extends<AlternativeFooImpl, U::Directly<ITest>>
{
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 <typename UnknownT>
static void destroy (UnknownT* ptr)
{
if (!!ptr)
ptr->release ();
}
};
template <typename Base, typename D, typename I>
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 <uint32 t1, uint32 t2, uint32 t3, uint32 t4>
struct UID
{
enum : int8
{
l1_1 = static_cast<int8> ((t1 & 0xFF000000) >> 24),
l1_2 = static_cast<int8> ((t1 & 0x00FF0000) >> 16),
l1_3 = static_cast<int8> ((t1 & 0x0000FF00) >> 8),
l1_4 = static_cast<int8> ((t1 & 0x000000FF)),
l2_1 = static_cast<int8> ((t2 & 0xFF000000) >> 24),
l2_2 = static_cast<int8> ((t2 & 0x00FF0000) >> 16),
l2_3 = static_cast<int8> ((t2 & 0x0000FF00) >> 8),
l2_4 = static_cast<int8> ((t2 & 0x000000FF)),
l3_1 = static_cast<int8> ((t3 & 0xFF000000) >> 24),
l3_2 = static_cast<int8> ((t3 & 0x00FF0000) >> 16),
l3_3 = static_cast<int8> ((t3 & 0x0000FF00) >> 8),
l3_4 = static_cast<int8> ((t3 & 0x000000FF)),
l4_1 = static_cast<int8> ((t4 & 0xFF000000) >> 24),
l4_2 = static_cast<int8> ((t4 & 0x00FF0000) >> 16),
l4_3 = static_cast<int8> ((t4 & 0x0000FF00) >> 8),
l4_4 = static_cast<int8> ((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 <typename T>
const TUID& getTUID ()
{
return ::Steinberg::getTUID<T> ();
}
/**
* 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 <typename I>
IPtr<I> cast (Unknown* u)
{
I* out = nullptr;
return u && u->queryInterface (getTUID<I> (), reinterpret_cast<void**> (&out)) == kResultOk ?
owned (out) :
nullptr;
}
/** Casts to Unknown* and then to the specified interface. */
template <typename I, typename S, typename T, typename U>
IPtr<I> cast (ImplementsImpl<S, T, U>* u)
{
return cast<I> (u->unknownCast ());
}
/** Casts to Unknown* and then to the specified interface. */
template <typename I, typename T>
IPtr<I> cast (const IPtr<T>& u)
{
return cast<I> (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<int32> 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 <typename T>
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 <typename... T>
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 <typename... T>
struct Indirectly
{
};
template <typename Base, typename D, typename I>
class ImplementsImpl
{
static_assert (sizeof (Base) == -1, "use U::Directly and U::Indirectly to specify interfaces");
};
template <typename Base, typename... DirectInterfaces, typename... IndirectInterfaces>
class ImplementsImpl<Base, Indirectly<IndirectInterfaces...>, Directly<DirectInterfaces...>>
{
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 <typename BaseClass, typename I, typename... DirectIFs, typename... IndirectIFs>
class ImplementsImpl<BaseClass, Directly<I, DirectIFs...>, Indirectly<IndirectIFs...>>
: 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<BaseClass, Directly<I, DirectIFs...>, Indirectly<IndirectIFs...>>;
template <typename... Args>
ImplementsImpl (Args&&... args) : BaseClass {std::forward<Args> (args)...}
{
}
tresult PLUGIN_API queryInterface (const TUID tuid, void** obj) override
{
if (!obj)
return kInvalidArgument;
if (queryInterfaceImpl<I, DirectIFs...> (tuid, *obj) ||
queryInterfaceImpl<IndirectIFs...> (tuid, *obj))
{
static_cast<Unknown*> (*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<Unknown*> (static_cast<I*> (this)); }
//------------------------------------------------------------------------
private:
template <typename Interface>
inline constexpr bool match (const TUID tuid) const noexcept
{
return reinterpret_cast<const uint64*> (tuid)[0] ==
reinterpret_cast<const uint64*> (getTUID<Interface> ())[0] &&
reinterpret_cast<const uint64*> (tuid)[1] ==
reinterpret_cast<const uint64*> (getTUID<Interface> ())[1];
}
template <int = 0>
inline constexpr bool queryInterfaceImpl (const TUID, void*&) const noexcept
{
return false;
}
template <typename Interface, typename... RemainingInterfaces>
inline bool queryInterfaceImpl (const TUID tuid, void*& obj) noexcept
{
if (match<Interface> (tuid) || match<Unknown> (tuid))
{
obj = static_cast<Interface*> (this->unknownCast ());
return true;
}
obj = getInterface<RemainingInterfaces...> (tuid);
return obj != nullptr;
}
template <int = 0>
inline constexpr void* getInterface (const TUID) const noexcept
{
return nullptr;
}
template <typename Interface, typename... RemainingInterfaces>
inline void* getInterface (const TUID tuid) noexcept
{
return match<Interface> (tuid) ? static_cast<Interface*> (this) :
getInterface<RemainingInterfaces...> (tuid);
}
};
/** This typedef enables using a custom base class with the interface implementation. */
template <typename BaseClass, typename D, typename I = Indirectly<>>
using Extends = ImplementsImpl<BaseClass, D, I>;
/** This typedef provides the interface implementation. */
template <typename D, typename I = Indirectly<>>
using Implements = ImplementsImpl<Detail::QueryInterfaceEnd<Detail::RefCounted>, D, I>;
/** This typedef provides the interface implementation for objects which should not be destroyed via
* FUnknown::release (like singletons). */
template <typename D, typename I = Indirectly<>>
using ImplementsNonDestroyable =
ImplementsImpl<Detail::QueryInterfaceEnd<Detail::NonDestroyable>, 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

View file

@ -18,6 +18,7 @@
#include "pluginterfaces/base/fstrdefs.h"
#include "pluginterfaces/base/funknown.h"
#include <cstdlib>
//------------------------------------------------------------------------
namespace Steinberg {
@ -249,9 +250,9 @@ inline void FVariant::empty ()
if (type & kOwner)
{
if ((type & kString8) && string8)
delete[] string8;
free (const_cast<char8*> (string8)); // should match DELETESTR8
else if ((type & kString16) && string16)
delete[] string16;
free (const_cast<char16*> (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<char8*> (malloc (strlen (variant.string8) + 1)); // should match NEWSTR8
strcpy (const_cast<char8*> (string8), variant.string8);
type |= kOwner;
}
else if ((type & kString16) && variant.string16)
{
auto len = static_cast<size_t> (strlen16 (variant.string16));
string16 = new char16[len + 1];
string16 = static_cast<char16*> (malloc ((len + 1) * sizeof (char16))); // should match NEWSTR16
char16* tmp = const_cast<char16*> (string16);
memcpy (tmp, variant.string16, len * sizeof (char16));
tmp[len] = 0;

View file

@ -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;

View file

@ -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<IProgress> 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<IProgress> progress (componentHandler);
if (progress)
progress->update (mProgressID, myProgressValue);
progress->update (mProgressID, myProgressValue);
// ...
FUnknownPtr<IProgress> 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;
};

View file

@ -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

View file

@ -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;

View file

@ -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;

View file

@ -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<const wchar_t*> (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<const Steinberg::Vst::TChar*> (wargv[i]);
utf8Args.push_back (VST3::StringConvert::convert (str));
utf8Args.push_back (Steinberg::Vst::StringConvert::convert (str));
}
return utf8Args;

View file

@ -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 <codecvt>
#include <istream>
#include <locale>
#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<std::codecvt_utf8_utf16<UTF16Type>, 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<const UTF16Type*> (str.data ()),
reinterpret_cast<const UTF16Type*> (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

View file

@ -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 <cstdint>
#include <string>
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 <typename NumberT>
std::u16string toString (NumberT value)
{
auto u8str = std::to_string (value);
return StringConvert::convert (u8str);
}
//------------------------------------------------------------------------
} // namespace StringConvert
} // namespace Steinberg

View file

@ -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

View file

@ -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 <fstream>
#if !SMTG_CPP17
#include <sstream>
#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<const wchar_t*> (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
}
//------------------------------------------------------------------------

View file

@ -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:

View file

@ -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;
}

View file

@ -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 <sstream>
#include <utility>
@ -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> factoryInfo;
ClassInfos classes;
classes.reserve (count);
auto f3 = Steinberg::FUnknownPtr<Steinberg::IPluginFactory3> (factory);
auto f2 = Steinberg::FUnknownPtr<Steinberg::IPluginFactory2> (factory);
auto f3 = Steinberg::U::cast<Steinberg::IPluginFactory3> (factory);
auto f2 = Steinberg::U::cast<Steinberg::IPluginFactory2> (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);

View file

@ -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 <algorithm>
#include <dlfcn.h>
#include <sys/types.h>
@ -62,12 +65,12 @@
#include <experimental/filesystem>
namespace filesystem = std::experimental::filesystem;
#else // USE_FILESYSTEM == 0
#else // USE_EXPERIMENTAL_FS == 0
#include <filesystem>
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<Steinberg::IPluginFactory> (owned (factoryProc ()));
auto f = Steinberg::U::cast<Steinberg::IPluginFactory> (owned (factoryProc ()));
if (!f)
{
errorDescription = "Calling 'GetPluginFactory' returned nullptr";

View file

@ -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<std::string> 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];

View file

@ -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 <shlobj.h>
#include <windows.h>
@ -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<LPCWSTR> (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<LPCWSTR> (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<Steinberg::IPluginFactory> (owned (factoryProc ()));
auto f = Steinberg::U::cast<Steinberg::IPluginFactory> (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<std::string> getKnownFolder (REFKNOWNFOLDERID folderID)
{
namespace StringConvert = Steinberg::Vst::StringConvert;
PWSTR wideStr {};
if (FAILED (SHGetKnownFolderPath (folderID, 0, nullptr, &wideStr)))
return {};
@ -378,7 +397,7 @@ VST3::Optional<filesystem::path> 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);

View file

@ -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 <codecvt>
#include <locale>
#include <istream>
#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 <codecvt>
#include <istream>
#include <locale>
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<std::codecvt_utf8_utf16<UTF16Type>, 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<const UTF16Type*> (str.data ()),
reinterpret_cast<const UTF16Type*> (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

View file

@ -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 <string>
//------------------------------------------------------------------------
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<typename NumberT>
template <typename NumberT>
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 <typename NumberT>
SMTG_DEPRECATED_MSG ("Use Steinberg::Vst::toString (...)")
std::u16string toString (NumberT value)
{
return Steinberg::Vst::toString (value);
}
//------------------------------------------------------------------------
} // VST3

View file

@ -520,7 +520,7 @@ Optional<Vst2xState> tryVst2StateLoad (Steinberg::IBStream& stream,
int32_t numPrograms;
if (!(state >> numPrograms))
return {};
if (numPrograms < 1)
if (numPrograms < 1 && fxMagic == bankMagic)
return {};
int32_t currentProgram = 0;

View file

@ -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<IHostApplication> hostApp (hostContext);
if (hostApp)
if (auto hostApp = U::cast<IHostApplication> (hostContext))
return Vst::allocateMessage (hostApp);
return nullptr;
}

View file

@ -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 <cstdio>
@ -363,8 +364,7 @@ tresult PLUGIN_API EditControllerEx1::getUnitInfo (int32 unitIndex, UnitInfo& in
tresult EditControllerEx1::notifyUnitSelection ()
{
tresult result = kResultFalse;
FUnknownPtr<IUnitHandler> unitHandler (componentHandler);
if (unitHandler)
if (auto unitHandler = U::cast<IUnitHandler> (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<IUnitHandler> unitHandler (componentHandler);
if (unitHandler)
if (auto unitHandler = U::cast<IUnitHandler> (componentHandler))
result = unitHandler->notifyProgramListChange (listId, programIndex);
return result;
}
@ -478,8 +477,7 @@ void PLUGIN_API EditControllerEx1::update (FUnknown* changedUnknown, int32 /*mes
auto* programList = FCast<ProgramList> (changedUnknown);
if (programList)
{
FUnknownPtr<IUnitHandler> unitHandler (componentHandler);
if (unitHandler)
if (auto unitHandler = U::cast<IUnitHandler> (componentHandler))
unitHandler->notifyProgramListChange (programList->getID (), kAllProgramInvalid);
}
}

View file

@ -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
// <cstring> or <string.h>, which prevents the use of stricmp in JUCE source.
#include <cstring>
// 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 <base/source/flock.cpp>
#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 <pluginterfaces/gui/iplugviewcontentscalesupport.h>
#include <pluginterfaces/vst/ivstchannelcontextinfo.h>
#include <pluginterfaces/vst/ivstmidicontrollers.h>
#include <public.sdk/source/common/commonstringconvert.cpp>
#include <public.sdk/source/common/memorystream.cpp>
#include <public.sdk/source/common/pluginview.cpp>
#include <public.sdk/source/vst/hosting/hostclasses.cpp>
@ -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 <public.sdk/source/vst/hosting/pluginterfacesupport.cpp>