diff --git a/src/Directory.Build.props b/src/Directory.Build.props
index 3155c22..a2fffe6 100644
--- a/src/Directory.Build.props
+++ b/src/Directory.Build.props
@@ -1,6 +1,6 @@
- 3.7.7
+ 3.7.12
$(VstVersion.Replace(".", ""))
\ No newline at end of file
diff --git a/src/NPlug.Tests/Snapshots/TestSamplePlugins.TestSimpleDelay.verified.txt b/src/NPlug.Tests/Snapshots/TestSamplePlugins.TestSimpleDelay.verified.txt
index dbb402c..ca86aca 100644
--- a/src/NPlug.Tests/Snapshots/TestSamplePlugins.TestSimpleDelay.verified.txt
+++ b/src/NPlug.Tests/Snapshots/TestSamplePlugins.TestSimpleDelay.verified.txt
@@ -1,4 +1,4 @@
-* Loading module...
+* Loading module...
{CurrentDirectory}nplug_validator_proxy.vst3
@@ -14,7 +14,7 @@
category = Audio Module Class
subCategories = Fx
version = 0.0
- sdkVersion = VST 3.7.7
+ sdkVersion = VST 3.7.12
cid = 7A130E07004A408DA1D897B671F36CA1
Class Info 1:
@@ -22,7 +22,7 @@
category = Component Controller Class
subCategories =
version = 0.0
- sdkVersion = VST 3.7.7
+ sdkVersion = VST 3.7.12
cid = 484E783B5F4742F4A19F96C1FD42FB45
* Checking snapshots...
diff --git a/src/NPlug.Tests/Snapshots/TestSamplePlugins.TestSimpleProgramChangePlugin.verified.txt b/src/NPlug.Tests/Snapshots/TestSamplePlugins.TestSimpleProgramChangePlugin.verified.txt
index 34f7569..124c5a8 100644
--- a/src/NPlug.Tests/Snapshots/TestSamplePlugins.TestSimpleProgramChangePlugin.verified.txt
+++ b/src/NPlug.Tests/Snapshots/TestSamplePlugins.TestSimpleProgramChangePlugin.verified.txt
@@ -1,4 +1,4 @@
-* Loading module...
+* Loading module...
{CurrentDirectory}nplug_validator_proxy.vst3
@@ -14,7 +14,7 @@
category = Audio Module Class
subCategories = Fx
version = 0.0
- sdkVersion = VST 3.7.7
+ sdkVersion = VST 3.7.12
cid = D2D46DF833974ACF9008DF3396B890F2
Class Info 1:
@@ -22,7 +22,7 @@
category = Component Controller Class
subCategories =
version = 0.0
- sdkVersion = VST 3.7.7
+ sdkVersion = VST 3.7.12
cid = 59C17896478B4AF186D83BA0817149D5
* Checking snapshots...
diff --git a/src/NPlug/Interop/LibVst.IComponentHandlerSystemTime.cs b/src/NPlug/Interop/LibVst.IComponentHandlerSystemTime.cs
new file mode 100644
index 0000000..98643a4
--- /dev/null
+++ b/src/NPlug/Interop/LibVst.IComponentHandlerSystemTime.cs
@@ -0,0 +1,18 @@
+// Copyright (c) Alexandre Mutel. All rights reserved.
+// Licensed under the BSD-Clause 2 license.
+// See license.txt file in the project root for full license information.
+namespace NPlug.Interop;
+
+
+using System;
+
+internal static unsafe partial class LibVst
+{
+ public partial struct IComponentHandlerSystemTime
+ {
+ private static partial ComResult getSystemTime_ToManaged(IComponentHandlerSystemTime* self, long* systemTime)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/src/NPlug/Interop/LibVst.IDataExchangeHandler.cs b/src/NPlug/Interop/LibVst.IDataExchangeHandler.cs
new file mode 100644
index 0000000..fb84485
--- /dev/null
+++ b/src/NPlug/Interop/LibVst.IDataExchangeHandler.cs
@@ -0,0 +1,33 @@
+// Copyright (c) Alexandre Mutel. All rights reserved.
+// Licensed under the BSD-Clause 2 license.
+// See license.txt file in the project root for full license information.
+namespace NPlug.Interop;
+
+
+using System;
+
+internal static unsafe partial class LibVst
+{
+ public partial struct IDataExchangeHandler
+ {
+ private static partial ComResult openQueue_ToManaged(IDataExchangeHandler* self, LibVst.IAudioProcessor* processor, uint blockSize, uint numBlocks, uint alignment, LibVst.DataExchangeUserContextID userContextID, LibVst.DataExchangeQueueID* outID)
+ {
+ throw new NotImplementedException();
+ }
+
+ private static partial ComResult closeQueue_ToManaged(IDataExchangeHandler* self, LibVst.DataExchangeQueueID queueID)
+ {
+ throw new NotImplementedException();
+ }
+
+ private static partial ComResult lockBlock_ToManaged(IDataExchangeHandler* self, LibVst.DataExchangeQueueID queueId, LibVst.DataExchangeBlock* block)
+ {
+ throw new NotImplementedException();
+ }
+
+ private static partial ComResult freeBlock_ToManaged(IDataExchangeHandler* self, LibVst.DataExchangeQueueID queueId, LibVst.DataExchangeBlockID blockID, byte sendToController)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/src/NPlug/Interop/LibVst.IDataExchangeReceiver.cs b/src/NPlug/Interop/LibVst.IDataExchangeReceiver.cs
new file mode 100644
index 0000000..eb7e9bb
--- /dev/null
+++ b/src/NPlug/Interop/LibVst.IDataExchangeReceiver.cs
@@ -0,0 +1,28 @@
+// Copyright (c) Alexandre Mutel. All rights reserved.
+// Licensed under the BSD-Clause 2 license.
+// See license.txt file in the project root for full license information.
+namespace NPlug.Interop;
+
+
+using System;
+
+internal static unsafe partial class LibVst
+{
+ public partial struct IDataExchangeReceiver
+ {
+ private static partial void queueOpened_ToManaged(IDataExchangeReceiver* self, LibVst.DataExchangeUserContextID userContextID, uint blockSize, byte* dispatchOnBackgroundThread)
+ {
+ throw new NotImplementedException();
+ }
+
+ private static partial void queueClosed_ToManaged(IDataExchangeReceiver* self, LibVst.DataExchangeUserContextID userContextID)
+ {
+ throw new NotImplementedException();
+ }
+
+ private static partial void onDataExchangeBlocksReceived_ToManaged(IDataExchangeReceiver* self, LibVst.DataExchangeUserContextID userContextID, uint numBlocks, LibVst.DataExchangeBlock* blocks, byte onBackgroundThread)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/src/NPlug/Interop/LibVst.IRemapParamID.cs b/src/NPlug/Interop/LibVst.IRemapParamID.cs
new file mode 100644
index 0000000..1d068a8
--- /dev/null
+++ b/src/NPlug/Interop/LibVst.IRemapParamID.cs
@@ -0,0 +1,18 @@
+// Copyright (c) Alexandre Mutel. All rights reserved.
+// Licensed under the BSD-Clause 2 license.
+// See license.txt file in the project root for full license information.
+namespace NPlug.Interop;
+
+
+using System;
+
+internal static unsafe partial class LibVst
+{
+ public partial struct IRemapParamID
+ {
+ private static partial ComResult getCompatibleParamID_ToManaged(IRemapParamID* self, Guid* pluginToReplaceUID, LibVst.ParamID oldParamID, LibVst.ParamID* newParamID)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/src/NPlug/Interop/LibVst.generated.cs b/src/NPlug/Interop/LibVst.generated.cs
index 5750a16..0637699 100644
--- a/src/NPlug/Interop/LibVst.generated.cs
+++ b/src/NPlug/Interop/LibVst.generated.cs
@@ -30,7 +30,7 @@ namespace NPlug.Interop;
internal static partial class LibVst
{
- public const string SdkVersion = "VST 3.7.7";
+ public const string SdkVersion = "VST 3.7.12";
public const string AudioEffectCategory = "Audio Module Class";
@@ -4490,6 +4490,31 @@ public enum VirtualKeyCodes
///
KEY_F19,
+ ///
+ /// multimedia keys
+ ///
+ KEY_F20,
+
+ ///
+ /// multimedia keys
+ ///
+ KEY_F21,
+
+ ///
+ /// multimedia keys
+ ///
+ KEY_F22,
+
+ ///
+ /// multimedia keys
+ ///
+ KEY_F23,
+
+ ///
+ /// multimedia keys
+ ///
+ KEY_F24,
+
///
/// Win-Key on Windows, Ctrl-Key on macOS
///
@@ -4523,7 +4548,7 @@ public enum KeyModifier
kCommandKey = 1 << 2,
///
- /// Wndows: win key, macOS: ctrl key
+ /// Windows: win key, macOS: ctrl key
///
kControlKey = 1 << 3,
}
@@ -4605,6 +4630,14 @@ public enum StandardColor
kDkGray = kGray70,
}
+ ///
+ /// A base class which hides the FUnknown::iid static var
+ ///
+ [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 16)]
+ public unsafe partial struct HideIIDBase
+ {
+ }
+
///
/// Attribute list used in IMessage and IStreamAttributes: Vst::IAttributeList
///
@@ -5205,7 +5238,7 @@ public unsafe partial struct AttrID
/// UString128 tmp (string);
/// char ascii[128];
/// tmp.toAscii (ascii, 128);
- /// if (!strncmp (ascii, StateType::kProject, strlen (StateType::kProject)))
+ /// if (strncmp (ascii, StateType::kProject, strlen (StateType::kProject)) == 0)
/// {
/// // we are in project loading context...
/// }
@@ -8264,6 +8297,24 @@ public enum SpeakerArrangement : ulong
kSpeakerACN15 = 1UL << 49,
+ kSpeakerACN16 = 1UL << 50,
+
+ kSpeakerACN17 = 1UL << 51,
+
+ kSpeakerACN18 = 1UL << 52,
+
+ kSpeakerACN19 = 1UL << 53,
+
+ kSpeakerACN20 = 1UL << 54,
+
+ kSpeakerACN21 = 1UL << 55,
+
+ kSpeakerACN22 = 1UL << 56,
+
+ kSpeakerACN23 = 1UL << 57,
+
+ kSpeakerACN24 = 1UL << 58,
+
kSpeakerTsl = 1UL << 24,
kSpeakerTsr = 1UL << 25,
@@ -8292,12 +8343,18 @@ public enum SpeakerArrangement : ulong
kSpeakerBrr = 1UL << 37,
+ kSpeakerLw = 1UL << 59,
+
+ kSpeakerRw = 1UL << 60,
+
kEmpty = 0,
kMono = kSpeakerM,
kStereo = kSpeakerL | kSpeakerR,
+ kStereoWide = kSpeakerLw | kSpeakerRw,
+
kStereoSurround = kSpeakerLs | kSpeakerRs,
kStereoCenter = kSpeakerLc | kSpeakerRc,
@@ -8318,41 +8375,41 @@ public enum SpeakerArrangement : ulong
k30Cine = kSpeakerL | kSpeakerR | kSpeakerC,
- k31Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe,
+ k31Cine = k30Cine | kSpeakerLfe,
k30Music = kSpeakerL | kSpeakerR | kSpeakerCs,
- k31Music = kSpeakerL | kSpeakerR | kSpeakerLfe | kSpeakerCs,
+ k31Music = k30Music | kSpeakerLfe,
k40Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerCs,
- k41Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerCs,
+ k41Cine = k40Cine | kSpeakerLfe,
k40Music = kSpeakerL | kSpeakerR | kSpeakerLs | kSpeakerRs,
- k41Music = kSpeakerL | kSpeakerR | kSpeakerLfe | kSpeakerLs | kSpeakerRs,
+ k41Music = k40Music | kSpeakerLfe,
k50 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs,
- k51 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs,
+ k51 = k50 | kSpeakerLfe,
k60Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerCs,
- k61Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerCs,
+ k61Cine = k60Cine | kSpeakerLfe,
k60Music = kSpeakerL | kSpeakerR | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr,
- k61Music = kSpeakerL | kSpeakerR | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr,
+ k61Music = k60Music | kSpeakerLfe,
k70Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerLc | kSpeakerRc,
- k71Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerLc | kSpeakerRc,
+ k71Cine = k70Cine | kSpeakerLfe,
k71CineFullFront = k71Cine,
k70Music = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr,
- k71Music = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr,
+ k71Music = k70Music | kSpeakerLfe,
k71CineFullRear = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerLcs | kSpeakerRcs,
@@ -8362,19 +8419,19 @@ public enum SpeakerArrangement : ulong
k80Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerLc | kSpeakerRc | kSpeakerCs,
- k81Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerLc | kSpeakerRc | kSpeakerCs,
+ k81Cine = k80Cine | kSpeakerLfe,
k80Music = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerCs | kSpeakerSl | kSpeakerSr,
- k81Music = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerCs | kSpeakerSl | kSpeakerSr,
+ k81Music = k80Music | kSpeakerLfe,
k90Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerLc | kSpeakerRc | kSpeakerSl | kSpeakerSr,
- k91Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerLc | kSpeakerRc | kSpeakerSl | kSpeakerSr,
+ k91Cine = k90Cine | kSpeakerLfe,
k100Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerLc | kSpeakerRc | kSpeakerCs | kSpeakerSl | kSpeakerSr,
- k101Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerLc | kSpeakerRc | kSpeakerCs | kSpeakerSl | kSpeakerSr,
+ k101Cine = k100Cine | kSpeakerLfe,
kAmbi1stOrderACN = kSpeakerACN0 | kSpeakerACN1 | kSpeakerACN2 | kSpeakerACN3,
@@ -8382,6 +8439,14 @@ public enum SpeakerArrangement : ulong
kAmbi3rdOrderACN = kAmbi2cdOrderACN | kSpeakerACN9 | kSpeakerACN10 | kSpeakerACN11 | kSpeakerACN12 | kSpeakerACN13 | kSpeakerACN14 | kSpeakerACN15,
+ kAmbi4thOrderACN = kAmbi3rdOrderACN | kSpeakerACN16 | kSpeakerACN17 | kSpeakerACN18 | kSpeakerACN19 | kSpeakerACN20 | kSpeakerACN21 | kSpeakerACN22 | kSpeakerACN23 | kSpeakerACN24,
+
+ kAmbi5thOrderACN = 0x000FFFFFFFFF,
+
+ kAmbi6thOrderACN = 0x0001FFFFFFFFFFFF,
+
+ kAmbi7thOrderACN = 0xFFFFFFFFFFFFFFFF,
+
k80Cube = kSpeakerL | kSpeakerR | kSpeakerLs | kSpeakerRs | kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr,
k40_4 = k80Cube,
@@ -8396,13 +8461,19 @@ public enum SpeakerArrangement : ulong
k50_2 = k70CineFrontHigh,
- k71CineFrontHigh = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerTfl | kSpeakerTfr,
+ k71CineFrontHigh = k70CineFrontHigh | kSpeakerLfe,
k71MPEG3D = k71CineFrontHigh,
k51_2 = k71CineFrontHigh,
- k71CineSideHigh = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerTsl | kSpeakerTsr,
+ k70CineSideHigh = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerTsl | kSpeakerTsr,
+
+ k50_2_TS = k70CineSideHigh,
+
+ k71CineSideHigh = k70CineSideHigh | kSpeakerLfe,
+
+ k51_2_TS = k71CineSideHigh,
k81MPEG3D = kSpeakerL | kSpeakerR | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerTfl | kSpeakerTfc | kSpeakerTfr | kSpeakerBfc,
@@ -8412,47 +8483,59 @@ public enum SpeakerArrangement : ulong
k50_4 = k90,
- k91 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr,
+ k91 = k90 | kSpeakerLfe,
k51_4 = k91,
- k50_4_1 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | kSpeakerBfc,
+ k50_4_1 = k50_4 | kSpeakerBfc,
- k51_4_1 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | kSpeakerBfc,
+ k51_4_1 = k50_4_1 | kSpeakerLfe,
k70_2 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr | kSpeakerTsl | kSpeakerTsr,
- k71_2 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr | kSpeakerTsl | kSpeakerTsr,
+ k71_2 = k70_2 | kSpeakerLfe,
k91Atmos = k71_2,
- k70_3 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr | kSpeakerTfl | kSpeakerTfr | kSpeakerTrc,
+ k70_2_TF = k70Music | kSpeakerTfl | kSpeakerTfr,
+
+ k71_2_TF = k70_2_TF | kSpeakerLfe,
- k72_3 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr | kSpeakerTfl | kSpeakerTfr | kSpeakerTrc | kSpeakerLfe2,
+ k70_3 = k70_2_TF | kSpeakerTrc,
- k70_4 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr | kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr,
+ k72_3 = k70_3 | kSpeakerLfe | kSpeakerLfe2,
- k71_4 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr | kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr,
+ k70_4 = k70_2_TF | kSpeakerTrl | kSpeakerTrr,
+
+ k71_4 = k70_4 | kSpeakerLfe,
k111MPEG3D = k71_4,
k70_6 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr | kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | kSpeakerTsl | kSpeakerTsr,
- k71_6 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr | kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | kSpeakerTsl | kSpeakerTsr,
+ k71_6 = k70_6 | kSpeakerLfe,
k90_4 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerLc | kSpeakerRc | kSpeakerSl | kSpeakerSr | kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr,
- k91_4 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerLc | kSpeakerRc | kSpeakerSl | kSpeakerSr | kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr,
+ k91_4 = k90_4 | kSpeakerLfe,
k90_6 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerLc | kSpeakerRc | kSpeakerSl | kSpeakerSr | kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | kSpeakerTsl | kSpeakerTsr,
- k91_6 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerLc | kSpeakerRc | kSpeakerSl | kSpeakerSr | kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | kSpeakerTsl | kSpeakerTsr,
+ k91_6 = k90_6 | kSpeakerLfe,
+
+ k90_4_W = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerLw | kSpeakerRw | kSpeakerSl | kSpeakerSr | kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr,
+
+ k91_4_W = k90_4_W | kSpeakerLfe,
+
+ k90_6_W = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerLw | kSpeakerRw | kSpeakerSl | kSpeakerSr | kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | kSpeakerTsl | kSpeakerTsr,
+
+ k91_6_W = k90_6_W | kSpeakerLfe,
k100 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerTc | kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr,
k50_5 = k100,
- k101 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerTc | kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr,
+ k101 = k50_5 | kSpeakerLfe,
k101MPEG3D = k101,
@@ -8466,7 +8549,7 @@ public enum SpeakerArrangement : ulong
k50_6 = k110,
- k111 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerTc | kSpeakerTfl | kSpeakerTfc | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr,
+ k111 = k110 | kSpeakerLfe,
k51_6 = k111,
@@ -8476,7 +8559,7 @@ public enum SpeakerArrangement : ulong
k130 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr | kSpeakerTc | kSpeakerTfl | kSpeakerTfc | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr,
- k131 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr | kSpeakerTc | kSpeakerTfl | kSpeakerTfc | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr,
+ k131 = k130 | kSpeakerLfe,
k140 = kSpeakerL | kSpeakerR | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr | kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | kSpeakerBfl | kSpeakerBfr | kSpeakerBrl | kSpeakerBrr,
@@ -8492,7 +8575,27 @@ public enum SpeakerArrangement : ulong
k50_5_3 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerTfl | kSpeakerTfc | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | kSpeakerBfl | kSpeakerBfc | kSpeakerBfr,
- k51_5_3 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerTfl | kSpeakerTfc | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | kSpeakerBfl | kSpeakerBfc | kSpeakerBfr,
+ k51_5_3 = k50_5_3 | kSpeakerLfe,
+
+ k50_2_2 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerTsl | kSpeakerTsr | kSpeakerBfl | kSpeakerBfr,
+
+ k50_4_2 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | kSpeakerBfl | kSpeakerBfr,
+
+ k70_4_2 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr | kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | kSpeakerBfl | kSpeakerBfr,
+
+ k50_5_Sony = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerTfl | kSpeakerTfc | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr,
+
+ k40_2_2 = kSpeakerC | kSpeakerSl | kSpeakerSr | kSpeakerCs | kSpeakerTsl | kSpeakerTsr | kSpeakerBsl | kSpeakerBsr,
+
+ k40_4_2 = kSpeakerL | kSpeakerR | kSpeakerLs | kSpeakerRs | kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | kSpeakerBfl | kSpeakerBfr,
+
+ k50_3_2 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerTfl | kSpeakerTfc | kSpeakerTfr | kSpeakerBfl | kSpeakerBfr,
+
+ k30_5_2 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerTfl | kSpeakerTfc | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | kSpeakerBfl | kSpeakerBfr,
+
+ k40_4_4 = kSpeakerL | kSpeakerR | kSpeakerLs | kSpeakerRs | kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | kSpeakerBfl | kSpeakerBfr | kSpeakerBrl | kSpeakerBrr,
+
+ k50_4_4 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | kSpeakerBfl | kSpeakerBfr | kSpeakerBrl | kSpeakerBrr,
}
///
@@ -10227,16 +10330,38 @@ public static ref readonly Guid IId
}
///
- /// Host callback interface for an edit controller: Vst::IComponentHandler
+ /// Host Data Exchange handler interface: Vst::IDataExchangeHandler
///
///
- /// vstIHost vst300- [host imp]
- /// - [released: 3.0.0]
- /// - [mandatory]Allow transfer of parameter editing to component (processor) via host and support automation.
- /// Cause the host to react on configuration changes (restartComponent).
+ /// vstHost vst379- [host imp]
+ /// - [context interface]
+ /// - [released: 3.7.9]
+ /// - [optional]The IDataExchangeHandler implements a direct and thread-safe connection from the realtime
+ /// audio context of the audio processor to the non-realtime audio context of the edit controller.
+ /// This should be used when the edit controller needs continuous data from the audio process for
+ /// visualization or other use-cases. To circumvent the bottleneck on the main thread it is possible
+ /// to configure the connection in a way that the calls to the edit controller will happen on a
+ /// background thread.Opening a queue:
+ /// The main operation for a plug-in is to open a queue via the handler before the plug-in is activated
+ /// (but it must be connected to the edit controller via the IConnectionPoint when the plug-in is using
+ /// the recommended separation of edit controller and audio processor). The best place to do this is in
+ /// the IAudioProcessor::setupProcessing method as this is also the place where the plug-in knows the
+ /// sample rate and maximum block size which the plug-in may need to calculate the queue block size.
+ /// When a queue is opened the edit controller gets a notification about it and the controller can
+ /// decide if it wishes to receive the data on the main thread or the background thread.Sending data:
+ /// In the IAudioProcessor::process call the plug-in can now lock a block from the handler, fill it and
+ /// when done free the block via the handler which then sends the block to the edit controller. The edit
+ /// controller then receives the block either on the main thread or on a background thread depending on
+ /// the setup of the queue.
+ /// The host guarantees that all blocks are send before the plug-in is deactivated.Closing a queue:
+ /// The audio processor must close an opened queue and this has to be done after the processor was
+ /// deactivated and before it is disconnected from the edit controller (see IConnectionPoint).What to do when the queue is full and no block can be locked?
+ /// The plug-in needs to be prepared for this situation as constraints in the overall system may cause
+ /// the queue to get full. If you need to get this information to the controller you can declare a
+ /// hidden parameter which you set to a special value and send this parameter change in your audio
+ /// process method.
///
- ///
- public unsafe partial struct IComponentHandler : INativeGuid, INativeUnknown, INativeVtbl
+ public unsafe partial struct IDataExchangeHandler : INativeGuid, INativeUnknown, INativeVtbl
{
public static Guid* NativeGuid => (Guid*)Unsafe.AsPointer(ref Unsafe.AsRef(in IId));
@@ -10248,10 +10373,10 @@ public unsafe partial struct IComponentHandler : INativeGuid, INativeUnknown, IN
public static void InitializeVtbl(void** vtbl)
{
FUnknown.InitializeVtbl(vtbl);
- vtbl[3] = (delegate*unmanaged[MemberFunction])&beginEdit_Wrapper;
- vtbl[4] = (delegate*unmanaged[MemberFunction])&performEdit_Wrapper;
- vtbl[5] = (delegate*unmanaged[MemberFunction])&endEdit_Wrapper;
- vtbl[6] = (delegate*unmanaged[MemberFunction])&restartComponent_Wrapper;
+ vtbl[3] = (delegate*unmanaged[MemberFunction])&openQueue_Wrapper;
+ vtbl[4] = (delegate*unmanaged[MemberFunction])&closeQueue_Wrapper;
+ vtbl[5] = (delegate*unmanaged[MemberFunction])&lockBlock_Wrapper;
+ vtbl[6] = (delegate*unmanaged[MemberFunction])&freeBlock_Wrapper;
}
// --------------------------------------------------------------
@@ -10267,7 +10392,7 @@ public static void InitializeVtbl(void** vtbl)
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public ComResult queryInterface(Guid* _iid, void** obj)
{
- return Unsafe.As(ref this).queryInterface(_iid, obj);
+ return Unsafe.As(ref this).queryInterface(_iid, obj);
}
///
@@ -10280,7 +10405,7 @@ public ComResult queryInterface(Guid* _iid, void** obj)
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public uint addRef()
{
- return Unsafe.As(ref this).addRef();
+ return Unsafe.As(ref this).addRef();
}
///
@@ -10290,94 +10415,122 @@ public uint addRef()
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public uint release()
{
- return Unsafe.As(ref this).release();
+ return Unsafe.As(ref this).release();
}
///
- /// To be called before calling a performEdit (e.g. on mouse-click-down event).
- /// This must be called in the UI-Thread context!
+ /// open a new queue
///
+ /// the processor who wants to open the queue
+ /// size of one block
+ /// number of blocks in the queue
+ /// data alignment, if zero will use the platform default alignment if any
+ /// an identifier internal to the processor
+ /// on return the ID of the queue
+ /// kResultTrue on success
+ ///
+ /// only allowed to be called from the main thread when the component is not active but
+ /// initialized and connected (see IConnectionPoint)
+ ///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- public ComResult beginEdit(LibVst.ParamID id)
+ public ComResult openQueue(LibVst.IAudioProcessor* processor, uint blockSize, uint numBlocks, uint alignment, LibVst.DataExchangeUserContextID userContextID, LibVst.DataExchangeQueueID* outID)
{
if (InteropHelper.IsTracerEnabled)
{
- var __self__ = (LibVst.IComponentHandler*)Unsafe.AsPointer(ref this);
- var __evt__ = new ManagedToNativeEvent((IntPtr)__self__, nameof(IComponentHandler), "beginEdit");
- var __result__ = ((delegate*unmanaged[MemberFunction])Vtbl[3])(__self__, id);
+ var __self__ = (LibVst.IDataExchangeHandler*)Unsafe.AsPointer(ref this);
+ var __evt__ = new ManagedToNativeEvent((IntPtr)__self__, nameof(IDataExchangeHandler), "openQueue");
+ var __result__ = ((delegate*unmanaged[MemberFunction])Vtbl[3])(__self__, processor, blockSize, numBlocks, alignment, userContextID, outID);
__evt__.Result = __result__;
__evt__.Dispose();
return __result__;
}
else
{
- return ((delegate*unmanaged[MemberFunction])Vtbl[3])((LibVst.IComponentHandler*)Unsafe.AsPointer(ref this), id);
+ return ((delegate*unmanaged[MemberFunction])Vtbl[3])((LibVst.IDataExchangeHandler*)Unsafe.AsPointer(ref this), processor, blockSize, numBlocks, alignment, userContextID, outID);
}
}
///
- /// 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!
+ /// close a queue
///
+ /// the ID of the queue to close
+ /// kResultTrue on success
+ ///
+ /// closes and frees all memory of a previously opened queue
+ /// if there are locked blocks in the queue, they are freed and made invalidonly allowed to be called from the main thread when the component is not active but
+ /// initialized and connected
+ ///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- public ComResult performEdit(LibVst.ParamID id, LibVst.ParamValue valueNormalized)
+ public ComResult closeQueue(LibVst.DataExchangeQueueID queueID)
{
if (InteropHelper.IsTracerEnabled)
{
- var __self__ = (LibVst.IComponentHandler*)Unsafe.AsPointer(ref this);
- var __evt__ = new ManagedToNativeEvent((IntPtr)__self__, nameof(IComponentHandler), "performEdit");
- var __result__ = ((delegate*unmanaged[MemberFunction])Vtbl[4])(__self__, id, valueNormalized);
+ var __self__ = (LibVst.IDataExchangeHandler*)Unsafe.AsPointer(ref this);
+ var __evt__ = new ManagedToNativeEvent((IntPtr)__self__, nameof(IDataExchangeHandler), "closeQueue");
+ var __result__ = ((delegate*unmanaged[MemberFunction])Vtbl[4])(__self__, queueID);
__evt__.Result = __result__;
__evt__.Dispose();
return __result__;
}
else
{
- return ((delegate*unmanaged[MemberFunction])Vtbl[4])((LibVst.IComponentHandler*)Unsafe.AsPointer(ref this), id, valueNormalized);
+ return ((delegate*unmanaged[MemberFunction])Vtbl[4])((LibVst.IDataExchangeHandler*)Unsafe.AsPointer(ref this), queueID);
}
}
///
- /// To be called after calling a performEdit (e.g. on mouse-click-up event).
- /// This must be called in the UI-Thread context!
+ /// lock a block if available
///
+ /// the ID of the queue
+ /// on return will contain the data pointer and size of the block
+ /// kResultTrue if a free block was found and kOutOfMemory if all blocks are locked
+ ///
+ /// only allowed to be called from within the IAudioProcessor::process call
+ ///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- public ComResult endEdit(LibVst.ParamID id)
+ public ComResult lockBlock(LibVst.DataExchangeQueueID queueId, LibVst.DataExchangeBlock* block)
{
if (InteropHelper.IsTracerEnabled)
{
- var __self__ = (LibVst.IComponentHandler*)Unsafe.AsPointer(ref this);
- var __evt__ = new ManagedToNativeEvent((IntPtr)__self__, nameof(IComponentHandler), "endEdit");
- var __result__ = ((delegate*unmanaged[MemberFunction])Vtbl[5])(__self__, id);
+ var __self__ = (LibVst.IDataExchangeHandler*)Unsafe.AsPointer(ref this);
+ var __evt__ = new ManagedToNativeEvent((IntPtr)__self__, nameof(IDataExchangeHandler), "lockBlock");
+ var __result__ = ((delegate*unmanaged[MemberFunction])Vtbl[5])(__self__, queueId, block);
__evt__.Result = __result__;
__evt__.Dispose();
return __result__;
}
else
{
- return ((delegate*unmanaged[MemberFunction])Vtbl[5])((LibVst.IComponentHandler*)Unsafe.AsPointer(ref this), id);
+ return ((delegate*unmanaged[MemberFunction])Vtbl[5])((LibVst.IDataExchangeHandler*)Unsafe.AsPointer(ref this), queueId, block);
}
}
///
- /// Instructs host to restart the component. This must be called in the UI-Thread context!
+ /// free a previously locked block
///
- /// is a combination of RestartFlags
+ /// the ID of the queue
+ /// the ID of the block
+ /// if true the block data will be send to the IEditController otherwise
+ /// it will be discarded
+ /// kResultTrue on success
+ ///
+ /// only allowed to be called from within the IAudioProcessor::process call
+ ///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- public ComResult restartComponent(int flags)
+ public ComResult freeBlock(LibVst.DataExchangeQueueID queueId, LibVst.DataExchangeBlockID blockID, byte sendToController)
{
if (InteropHelper.IsTracerEnabled)
{
- var __self__ = (LibVst.IComponentHandler*)Unsafe.AsPointer(ref this);
- var __evt__ = new ManagedToNativeEvent((IntPtr)__self__, nameof(IComponentHandler), "restartComponent");
- var __result__ = ((delegate*unmanaged[MemberFunction])Vtbl[6])(__self__, flags);
+ var __self__ = (LibVst.IDataExchangeHandler*)Unsafe.AsPointer(ref this);
+ var __evt__ = new ManagedToNativeEvent((IntPtr)__self__, nameof(IDataExchangeHandler), "freeBlock");
+ var __result__ = ((delegate*unmanaged[MemberFunction])Vtbl[6])(__self__, queueId, blockID, sendToController);
__evt__.Result = __result__;
__evt__.Dispose();
return __result__;
}
else
{
- return ((delegate*unmanaged[MemberFunction])Vtbl[6])((LibVst.IComponentHandler*)Unsafe.AsPointer(ref this), flags);
+ return ((delegate*unmanaged[MemberFunction])Vtbl[6])((LibVst.IDataExchangeHandler*)Unsafe.AsPointer(ref this), queueId, blockID, sendToController);
}
}
@@ -10385,20 +10538,30 @@ public ComResult restartComponent(int flags)
// CCW methods
// --------------------------------------------------------------
///
- /// To be called before calling a performEdit (e.g. on mouse-click-down event).
- /// This must be called in the UI-Thread context!
+ /// open a new queue
///
- private static partial ComResult beginEdit_ToManaged(IComponentHandler* self, LibVst.ParamID id);
+ /// the processor who wants to open the queue
+ /// size of one block
+ /// number of blocks in the queue
+ /// data alignment, if zero will use the platform default alignment if any
+ /// an identifier internal to the processor
+ /// on return the ID of the queue
+ /// kResultTrue on success
+ ///
+ /// only allowed to be called from the main thread when the component is not active but
+ /// initialized and connected (see IConnectionPoint)
+ ///
+ private static partial ComResult openQueue_ToManaged(IDataExchangeHandler* self, LibVst.IAudioProcessor* processor, uint blockSize, uint numBlocks, uint alignment, LibVst.DataExchangeUserContextID userContextID, LibVst.DataExchangeQueueID* outID);
[UnmanagedCallersOnly(CallConvs = new Type[] { typeof(CallConvMemberFunction)})]
- private static int beginEdit_Wrapper(IComponentHandler* self, uint id)
+ private static int openQueue_Wrapper(IDataExchangeHandler* self, LibVst.IAudioProcessor* processor, uint blockSize, uint numBlocks, uint alignment, uint userContextID, LibVst.DataExchangeQueueID* outID)
{
if (InteropHelper.IsTracerEnabled)
{
- var __evt__ = new NativeToManagedEvent((IntPtr)self, nameof(IComponentHandler), "beginEdit");
+ var __evt__ = new NativeToManagedEvent((IntPtr)self, nameof(IDataExchangeHandler), "openQueue");
try
{
- return beginEdit_ToManaged(self, id);
+ return openQueue_ToManaged(self, processor, blockSize, numBlocks, alignment, userContextID, outID);
}
catch (Exception ex)
{
@@ -10414,7 +10577,7 @@ private static int beginEdit_Wrapper(IComponentHandler* self, uint id)
{
try
{
- return beginEdit_ToManaged(self, id);
+ return openQueue_ToManaged(self, processor, blockSize, numBlocks, alignment, userContextID, outID);
}
catch (Exception ex)
{
@@ -10424,20 +10587,26 @@ private static int beginEdit_Wrapper(IComponentHandler* self, uint id)
}
///
- /// 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!
+ /// close a queue
///
- private static partial ComResult performEdit_ToManaged(IComponentHandler* self, LibVst.ParamID id, LibVst.ParamValue valueNormalized);
+ /// the ID of the queue to close
+ /// kResultTrue on success
+ ///
+ /// closes and frees all memory of a previously opened queue
+ /// if there are locked blocks in the queue, they are freed and made invalidonly allowed to be called from the main thread when the component is not active but
+ /// initialized and connected
+ ///
+ private static partial ComResult closeQueue_ToManaged(IDataExchangeHandler* self, LibVst.DataExchangeQueueID queueID);
[UnmanagedCallersOnly(CallConvs = new Type[] { typeof(CallConvMemberFunction)})]
- private static int performEdit_Wrapper(IComponentHandler* self, uint id, double valueNormalized)
+ private static int closeQueue_Wrapper(IDataExchangeHandler* self, uint queueID)
{
if (InteropHelper.IsTracerEnabled)
{
- var __evt__ = new NativeToManagedEvent((IntPtr)self, nameof(IComponentHandler), "performEdit");
+ var __evt__ = new NativeToManagedEvent((IntPtr)self, nameof(IDataExchangeHandler), "closeQueue");
try
{
- return performEdit_ToManaged(self, id, valueNormalized);
+ return closeQueue_ToManaged(self, queueID);
}
catch (Exception ex)
{
@@ -10453,7 +10622,7 @@ private static int performEdit_Wrapper(IComponentHandler* self, uint id, double
{
try
{
- return performEdit_ToManaged(self, id, valueNormalized);
+ return closeQueue_ToManaged(self, queueID);
}
catch (Exception ex)
{
@@ -10463,20 +10632,25 @@ private static int performEdit_Wrapper(IComponentHandler* self, uint id, double
}
///
- /// To be called after calling a performEdit (e.g. on mouse-click-up event).
- /// This must be called in the UI-Thread context!
+ /// lock a block if available
///
- private static partial ComResult endEdit_ToManaged(IComponentHandler* self, LibVst.ParamID id);
+ /// the ID of the queue
+ /// on return will contain the data pointer and size of the block
+ /// kResultTrue if a free block was found and kOutOfMemory if all blocks are locked
+ ///
+ /// only allowed to be called from within the IAudioProcessor::process call
+ ///
+ private static partial ComResult lockBlock_ToManaged(IDataExchangeHandler* self, LibVst.DataExchangeQueueID queueId, LibVst.DataExchangeBlock* block);
[UnmanagedCallersOnly(CallConvs = new Type[] { typeof(CallConvMemberFunction)})]
- private static int endEdit_Wrapper(IComponentHandler* self, uint id)
+ private static int lockBlock_Wrapper(IDataExchangeHandler* self, uint queueId, LibVst.DataExchangeBlock* block)
{
if (InteropHelper.IsTracerEnabled)
{
- var __evt__ = new NativeToManagedEvent((IntPtr)self, nameof(IComponentHandler), "endEdit");
+ var __evt__ = new NativeToManagedEvent((IntPtr)self, nameof(IDataExchangeHandler), "lockBlock");
try
{
- return endEdit_ToManaged(self, id);
+ return lockBlock_ToManaged(self, queueId, block);
}
catch (Exception ex)
{
@@ -10492,7 +10666,7 @@ private static int endEdit_Wrapper(IComponentHandler* self, uint id)
{
try
{
- return endEdit_ToManaged(self, id);
+ return lockBlock_ToManaged(self, queueId, block);
}
catch (Exception ex)
{
@@ -10502,20 +10676,27 @@ private static int endEdit_Wrapper(IComponentHandler* self, uint id)
}
///
- /// Instructs host to restart the component. This must be called in the UI-Thread context!
+ /// free a previously locked block
///
- /// is a combination of RestartFlags
- private static partial ComResult restartComponent_ToManaged(IComponentHandler* self, int flags);
+ /// the ID of the queue
+ /// the ID of the block
+ /// if true the block data will be send to the IEditController otherwise
+ /// it will be discarded
+ /// kResultTrue on success
+ ///
+ /// only allowed to be called from within the IAudioProcessor::process call
+ ///
+ private static partial ComResult freeBlock_ToManaged(IDataExchangeHandler* self, LibVst.DataExchangeQueueID queueId, LibVst.DataExchangeBlockID blockID, byte sendToController);
[UnmanagedCallersOnly(CallConvs = new Type[] { typeof(CallConvMemberFunction)})]
- private static int restartComponent_Wrapper(IComponentHandler* self, int flags)
+ private static int freeBlock_Wrapper(IDataExchangeHandler* self, uint queueId, uint blockID, byte sendToController)
{
if (InteropHelper.IsTracerEnabled)
{
- var __evt__ = new NativeToManagedEvent((IntPtr)self, nameof(IComponentHandler), "restartComponent");
+ var __evt__ = new NativeToManagedEvent((IntPtr)self, nameof(IDataExchangeHandler), "freeBlock");
try
{
- return restartComponent_ToManaged(self, flags);
+ return freeBlock_ToManaged(self, queueId, blockID, sendToController);
}
catch (Exception ex)
{
@@ -10531,7 +10712,7 @@ private static int restartComponent_Wrapper(IComponentHandler* self, int flags)
{
try
{
- return restartComponent_ToManaged(self, flags);
+ return freeBlock_ToManaged(self, queueId, blockID, sendToController);
}
catch (Exception ex)
{
@@ -10541,7 +10722,7 @@ private static int restartComponent_Wrapper(IComponentHandler* self, int flags)
}
///
- /// DECLARE_CLASS_IID (IComponentHandler, 0x93A0BEA3, 0x0BD045DB, 0x8E890B0C, 0xC1E46AC6)
+ /// DECLARE_CLASS_IID (IDataExchangeHandler, 0x36D551BD, 0x6FF54F08, 0xB48E830D, 0x8BD5A03B)
///
public static ref readonly Guid IId
{
@@ -10549,78 +10730,81 @@ public static ref readonly Guid IId
get
{
return ref Unsafe.As(ref MemoryMarshal.GetReference((OperatingSystem.IsWindows()
- ? new ReadOnlySpan(new byte[] { 0xa3, 0xbe, 0xa0, 0x93, 0xd0, 0x0b, 0xdb, 0x45, 0x8e, 0x89, 0x0b, 0x0c, 0xc1, 0xe4, 0x6a, 0xc6 })
- : new ReadOnlySpan(new byte[] { 0x93, 0xa0, 0xbe, 0xa3, 0x0b, 0xd0, 0x45, 0xdb, 0x8e, 0x89, 0x0b, 0x0c, 0xc1, 0xe4, 0x6a, 0xc6 })
+ ? new ReadOnlySpan(new byte[] { 0xbd, 0x51, 0xd5, 0x36, 0xf5, 0x6f, 0x08, 0x4f, 0xb4, 0x8e, 0x83, 0x0d, 0x8b, 0xd5, 0xa0, 0x3b })
+ : new ReadOnlySpan(new byte[] { 0x36, 0xd5, 0x51, 0xbd, 0x6f, 0xf5, 0x4f, 0x08, 0xb4, 0x8e, 0x83, 0x0d, 0x8b, 0xd5, 0xa0, 0x3b })
)));
}
}
}
+ public partial record struct DataExchangeUserContextID(uint Value)
+ {
+ public static implicit operator uint(DataExchangeUserContextID value) => value.Value;
+
+ public static implicit operator DataExchangeUserContextID(uint value) => new(value);
+ }
+
+ public partial record struct DataExchangeQueueID(uint Value)
+ {
+ public static implicit operator uint(DataExchangeQueueID value) => value.Value;
+
+ public static implicit operator DataExchangeQueueID(uint value) => new(value);
+ }
+
///
- /// Extended host callback interface for an edit controller: Vst::IComponentHandler2
+ ///
+ ///
+ [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 16)]
+ public unsafe partial struct DataExchangeBlock
+ {
+ ///
+ /// pointer to the memory buffer
+ ///
+ public void* data;
+
+ ///
+ /// size of the memory buffer
+ ///
+ public uint size;
+
+ ///
+ /// block identifier
+ ///
+ public LibVst.DataExchangeBlockID blockID;
+ }
+
+ public partial record struct DataExchangeBlockID(uint Value)
+ {
+ public static implicit operator uint(DataExchangeBlockID value) => value.Value;
+
+ public static implicit operator DataExchangeBlockID(uint value) => new(value);
+ }
+
+ ///
+ /// Data Exchange Receiver interface: Vst::IDataExchangeReceiver
///
///
- /// vstIHost vst310- [host imp]
- /// - [extends IComponentHandler]
- /// - [released: 3.1.0]
- /// - [optional]One part handles:
- /// - Setting dirty state of the plug-in
- /// - Requesting the host to open the editorThe 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. IComponentHandler2Example Examples of different use cases@code {.cpp}
- /// //--------------------------------------
- /// // we are in the editcontroller...
- /// // in case of multiple switch buttons (with associated ParamID 1 and 3)
- /// // on mouse down :
- /// hostHandler2->startGroupEdit ();
- /// hostHandler->beginEdit (1);
- /// hostHandler->beginEdit (3);
- /// hostHandler->performEdit (1, 1.0);
- /// hostHandler->performEdit (3, 0.0); // the opposite of paramID 1 for example
- /// ....
- /// // on mouse up :
- /// hostHandler->endEdit (1);
- /// hostHandler->endEdit (3);
- /// hostHandler2->finishGroupEdit ();
- /// ....
- /// ....
- /// //--------------------------------------
- /// // in case of multiple faders (with associated ParamID 1 and 3)
- /// // on mouse down :
- /// hostHandler2->startGroupEdit ();
- /// hostHandler->beginEdit (1);
- /// hostHandler->beginEdit (3);
- /// hostHandler2->finishGroupEdit ();
- /// ....
- /// // on mouse move :
- /// hostHandler2->startGroupEdit ();
- /// hostHandler->performEdit (1, x); // x the wanted value
- /// hostHandler->performEdit (3, x);
- /// hostHandler2->finishGroupEdit ();
- /// ....
- /// // on mouse up :
- /// hostHandler2->startGroupEdit ();
- /// hostHandler->endEdit (1);
- /// hostHandler->endEdit (3);
- /// hostHandler2->finishGroupEdit ();
- /// @endcode
+ /// vstPlug vst379- [plug imp]
+ /// - [released: 3.7.9
+ /// - [optional]The receiver interface is required to receive data from the realtime audio process via the
+ /// IDataExchangeHandler.
///
- ///
- public unsafe partial struct IComponentHandler2 : INativeGuid, INativeUnknown, INativeVtbl
+ ///
+ public unsafe partial struct IDataExchangeReceiver : INativeGuid, INativeUnknown, INativeVtbl
{
public static Guid* NativeGuid => (Guid*)Unsafe.AsPointer(ref Unsafe.AsRef(in IId));
public void** Vtbl;
- public static int VtblCount => 7;
+ public static int VtblCount => 6;
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void InitializeVtbl(void** vtbl)
{
FUnknown.InitializeVtbl(vtbl);
- vtbl[3] = (delegate*unmanaged[MemberFunction])&setDirty_Wrapper;
- vtbl[4] = (delegate*unmanaged[MemberFunction])&requestOpenEditor_Wrapper;
- vtbl[5] = (delegate*unmanaged[MemberFunction])&startGroupEdit_Wrapper;
- vtbl[6] = (delegate*unmanaged[MemberFunction])&finishGroupEdit_Wrapper;
+ vtbl[3] = (delegate*unmanaged[MemberFunction])&queueOpened_Wrapper;
+ vtbl[4] = (delegate*unmanaged[MemberFunction])&queueClosed_Wrapper;
+ vtbl[5] = (delegate*unmanaged[MemberFunction])&onDataExchangeBlocksReceived_Wrapper;
}
// --------------------------------------------------------------
@@ -10636,7 +10820,7 @@ public static void InitializeVtbl(void** vtbl)
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public ComResult queryInterface(Guid* _iid, void** obj)
{
- return Unsafe.As(ref this).queryInterface(_iid, obj);
+ return Unsafe.As(ref this).queryInterface(_iid, obj);
}
///
@@ -10649,7 +10833,7 @@ public ComResult queryInterface(Guid* _iid, void** obj)
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public uint addRef()
{
- return Unsafe.As(ref this).addRef();
+ return Unsafe.As(ref this).addRef();
}
///
@@ -10659,57 +10843,722 @@ public uint addRef()
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public uint release()
{
- return Unsafe.As(ref this).release();
+ return Unsafe.As(ref this).release();
}
///
- /// 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.
+ /// queue opened notification
///
+ /// the user context ID of the queue
+ /// the size of one block of the queue
+ /// if true on output the blocks are dispatched on a
+ /// background thread [defaults to false in which case the
+ /// blocks are dispatched on the main thread]
+ ///
+ /// called on the main thread when the processor has opened a queue
+ ///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- public ComResult setDirty(byte state)
+ public void queueOpened(LibVst.DataExchangeUserContextID userContextID, uint blockSize, byte* dispatchOnBackgroundThread)
{
if (InteropHelper.IsTracerEnabled)
{
- var __self__ = (LibVst.IComponentHandler2*)Unsafe.AsPointer(ref this);
- var __evt__ = new ManagedToNativeEvent((IntPtr)__self__, nameof(IComponentHandler2), "setDirty");
- var __result__ = ((delegate*unmanaged[MemberFunction])Vtbl[3])(__self__, state);
- __evt__.Result = __result__;
+ var __self__ = (LibVst.IDataExchangeReceiver*)Unsafe.AsPointer(ref this);
+ var __evt__ = new ManagedToNativeEvent((IntPtr)__self__, nameof(IDataExchangeReceiver), "queueOpened");
+ ((delegate*unmanaged[MemberFunction])Vtbl[3])(__self__, userContextID, blockSize, dispatchOnBackgroundThread);
__evt__.Dispose();
- return __result__;
}
else
{
- return ((delegate*unmanaged[MemberFunction])Vtbl[3])((LibVst.IComponentHandler2*)Unsafe.AsPointer(ref this), state);
+ ((delegate*unmanaged[MemberFunction])Vtbl[3])((LibVst.IDataExchangeReceiver*)Unsafe.AsPointer(ref this), userContextID, blockSize, dispatchOnBackgroundThread);
}
}
///
- /// 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).
+ /// queue closed notification
///
+ /// the user context ID of the queue
+ ///
+ /// called on the main thread when the processor has closed a queue
+ ///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- public ComResult requestOpenEditor(LibVst.FIDString name)
+ public void queueClosed(LibVst.DataExchangeUserContextID userContextID)
{
if (InteropHelper.IsTracerEnabled)
{
- var __self__ = (LibVst.IComponentHandler2*)Unsafe.AsPointer(ref this);
- var __evt__ = new ManagedToNativeEvent((IntPtr)__self__, nameof(IComponentHandler2), "requestOpenEditor");
- var __result__ = ((delegate*unmanaged[MemberFunction])Vtbl[4])(__self__, name);
- __evt__.Result = __result__;
+ var __self__ = (LibVst.IDataExchangeReceiver*)Unsafe.AsPointer(ref this);
+ var __evt__ = new ManagedToNativeEvent((IntPtr)__self__, nameof(IDataExchangeReceiver), "queueClosed");
+ ((delegate*unmanaged[MemberFunction])Vtbl[4])(__self__, userContextID);
__evt__.Dispose();
- return __result__;
}
else
{
- return ((delegate*unmanaged[MemberFunction])Vtbl[4])((LibVst.IComponentHandler2*)Unsafe.AsPointer(ref this), name);
+ ((delegate*unmanaged[MemberFunction])Vtbl[4])((LibVst.IDataExchangeReceiver*)Unsafe.AsPointer(ref this), userContextID);
}
}
///
- /// 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 ().
+ /// one or more blocks were received
///
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ /// the user context ID of the queue
+ /// number of blocks
+ /// the blocks
+ /// true if the call is done on a background thread
+ ///
+ /// called either on the main thread or a background thread depending on the
+ /// dispatchOnBackgroundThread value in the queueOpened call.the data of the blocks are only valid inside this call and the blocks only become available
+ /// to the queue afterwards.
+ ///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public void onDataExchangeBlocksReceived(LibVst.DataExchangeUserContextID userContextID, uint numBlocks, LibVst.DataExchangeBlock* blocks, byte onBackgroundThread)
+ {
+ if (InteropHelper.IsTracerEnabled)
+ {
+ var __self__ = (LibVst.IDataExchangeReceiver*)Unsafe.AsPointer(ref this);
+ var __evt__ = new ManagedToNativeEvent((IntPtr)__self__, nameof(IDataExchangeReceiver), "onDataExchangeBlocksReceived");
+ ((delegate*unmanaged[MemberFunction])Vtbl[5])(__self__, userContextID, numBlocks, blocks, onBackgroundThread);
+ __evt__.Dispose();
+ }
+ else
+ {
+ ((delegate*unmanaged[MemberFunction])Vtbl[5])((LibVst.IDataExchangeReceiver*)Unsafe.AsPointer(ref this), userContextID, numBlocks, blocks, onBackgroundThread);
+ }
+ }
+
+ // --------------------------------------------------------------
+ // CCW methods
+ // --------------------------------------------------------------
+ ///
+ /// queue opened notification
+ ///
+ /// the user context ID of the queue
+ /// the size of one block of the queue
+ /// if true on output the blocks are dispatched on a
+ /// background thread [defaults to false in which case the
+ /// blocks are dispatched on the main thread]
+ ///
+ /// called on the main thread when the processor has opened a queue
+ ///
+ private static partial void queueOpened_ToManaged(IDataExchangeReceiver* self, LibVst.DataExchangeUserContextID userContextID, uint blockSize, byte* dispatchOnBackgroundThread);
+
+ [UnmanagedCallersOnly(CallConvs = new Type[] { typeof(CallConvMemberFunction)})]
+ private static void queueOpened_Wrapper(IDataExchangeReceiver* self, uint userContextID, uint blockSize, byte* dispatchOnBackgroundThread)
+ {
+ if (InteropHelper.IsTracerEnabled)
+ {
+ var __evt__ = new NativeToManagedEvent((IntPtr)self, nameof(IDataExchangeReceiver), "queueOpened");
+ try
+ {
+ queueOpened_ToManaged(self, userContextID, blockSize, dispatchOnBackgroundThread);
+ }
+ catch (Exception ex)
+ {
+ __evt__.Exception = ex;
+ }
+ finally
+ {
+ __evt__.Dispose();
+ }
+ }
+ else
+ {
+ try
+ {
+ queueOpened_ToManaged(self, userContextID, blockSize, dispatchOnBackgroundThread);
+ }
+ catch
+ {
+ }
+ }
+ }
+
+ ///
+ /// queue closed notification
+ ///
+ /// the user context ID of the queue
+ ///
+ /// called on the main thread when the processor has closed a queue
+ ///
+ private static partial void queueClosed_ToManaged(IDataExchangeReceiver* self, LibVst.DataExchangeUserContextID userContextID);
+
+ [UnmanagedCallersOnly(CallConvs = new Type[] { typeof(CallConvMemberFunction)})]
+ private static void queueClosed_Wrapper(IDataExchangeReceiver* self, uint userContextID)
+ {
+ if (InteropHelper.IsTracerEnabled)
+ {
+ var __evt__ = new NativeToManagedEvent((IntPtr)self, nameof(IDataExchangeReceiver), "queueClosed");
+ try
+ {
+ queueClosed_ToManaged(self, userContextID);
+ }
+ catch (Exception ex)
+ {
+ __evt__.Exception = ex;
+ }
+ finally
+ {
+ __evt__.Dispose();
+ }
+ }
+ else
+ {
+ try
+ {
+ queueClosed_ToManaged(self, userContextID);
+ }
+ catch
+ {
+ }
+ }
+ }
+
+ ///
+ /// one or more blocks were received
+ ///
+ /// the user context ID of the queue
+ /// number of blocks
+ /// the blocks
+ /// true if the call is done on a background thread
+ ///
+ /// called either on the main thread or a background thread depending on the
+ /// dispatchOnBackgroundThread value in the queueOpened call.the data of the blocks are only valid inside this call and the blocks only become available
+ /// to the queue afterwards.
+ ///
+ private static partial void onDataExchangeBlocksReceived_ToManaged(IDataExchangeReceiver* self, LibVst.DataExchangeUserContextID userContextID, uint numBlocks, LibVst.DataExchangeBlock* blocks, byte onBackgroundThread);
+
+ [UnmanagedCallersOnly(CallConvs = new Type[] { typeof(CallConvMemberFunction)})]
+ private static void onDataExchangeBlocksReceived_Wrapper(IDataExchangeReceiver* self, uint userContextID, uint numBlocks, LibVst.DataExchangeBlock* blocks, byte onBackgroundThread)
+ {
+ if (InteropHelper.IsTracerEnabled)
+ {
+ var __evt__ = new NativeToManagedEvent((IntPtr)self, nameof(IDataExchangeReceiver), "onDataExchangeBlocksReceived");
+ try
+ {
+ onDataExchangeBlocksReceived_ToManaged(self, userContextID, numBlocks, blocks, onBackgroundThread);
+ }
+ catch (Exception ex)
+ {
+ __evt__.Exception = ex;
+ }
+ finally
+ {
+ __evt__.Dispose();
+ }
+ }
+ else
+ {
+ try
+ {
+ onDataExchangeBlocksReceived_ToManaged(self, userContextID, numBlocks, blocks, onBackgroundThread);
+ }
+ catch
+ {
+ }
+ }
+ }
+
+ ///
+ /// DECLARE_CLASS_IID (IDataExchangeReceiver, 0x45A759DC, 0x84FA4907, 0xABCB6175, 0x2FC786B6)
+ ///
+ public static ref readonly Guid IId
+ {
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ get
+ {
+ return ref Unsafe.As(ref MemoryMarshal.GetReference((OperatingSystem.IsWindows()
+ ? new ReadOnlySpan(new byte[] { 0xdc, 0x59, 0xa7, 0x45, 0xfa, 0x84, 0x07, 0x49, 0xab, 0xcb, 0x61, 0x75, 0x2f, 0xc7, 0x86, 0xb6 })
+ : new ReadOnlySpan(new byte[] { 0x45, 0xa7, 0x59, 0xdc, 0x84, 0xfa, 0x49, 0x07, 0xab, 0xcb, 0x61, 0x75, 0x2f, 0xc7, 0x86, 0xb6 })
+ )));
+ }
+ }
+ }
+
+ ///
+ /// Host callback interface for an edit controller: Vst::IComponentHandler
+ ///
+ ///
+ /// vstIHost vst300- [host imp]
+ /// - [released: 3.0.0]
+ /// - [mandatory]Allow transfer of parameter editing to component (processor) via host and support automation.
+ /// Cause the host to react on configuration changes (restartComponent).
+ ///
+ ///
+ public unsafe partial struct IComponentHandler : INativeGuid, INativeUnknown, INativeVtbl
+ {
+ public static Guid* NativeGuid => (Guid*)Unsafe.AsPointer(ref Unsafe.AsRef(in IId));
+
+ public void** Vtbl;
+
+ public static int VtblCount => 7;
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static void InitializeVtbl(void** vtbl)
+ {
+ FUnknown.InitializeVtbl(vtbl);
+ vtbl[3] = (delegate*unmanaged[MemberFunction])&beginEdit_Wrapper;
+ vtbl[4] = (delegate*unmanaged[MemberFunction])&performEdit_Wrapper;
+ vtbl[5] = (delegate*unmanaged[MemberFunction])&endEdit_Wrapper;
+ vtbl[6] = (delegate*unmanaged[MemberFunction])&restartComponent_Wrapper;
+ }
+
+ // --------------------------------------------------------------
+ // RCW methods
+ // --------------------------------------------------------------
+ ///
+ /// Query for a pointer to the specified interface.
+ /// Returns kResultOk on success or kNoInterface if the object does not implement the interface.
+ /// The object has to call addRef when returning an interface.
+ ///
+ /// : (out) On return, *obj points to the requested interface
+ /// : (in) 16 Byte interface identifier (-> FUID)
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public ComResult queryInterface(Guid* _iid, void** obj)
+ {
+ return Unsafe.As(ref this).queryInterface(_iid, obj);
+ }
+
+ ///
+ /// Adds a reference and returns the new reference count.
+ ///
+ ///
+ /// Remarks:
+ /// The initial reference count after creating an object is 1.
+ ///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public uint addRef()
+ {
+ return Unsafe.As(ref this).addRef();
+ }
+
+ ///
+ /// Releases a reference and returns the new reference count.
+ /// If the reference count reaches zero, the object will be destroyed in memory.
+ ///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public uint release()
+ {
+ return Unsafe.As(ref this).release();
+ }
+
+ ///
+ /// To be called before calling a performEdit (e.g. on mouse-click-down event).
+ /// This must be called in the UI-Thread context!
+ ///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public ComResult beginEdit(LibVst.ParamID id)
+ {
+ if (InteropHelper.IsTracerEnabled)
+ {
+ var __self__ = (LibVst.IComponentHandler*)Unsafe.AsPointer(ref this);
+ var __evt__ = new ManagedToNativeEvent((IntPtr)__self__, nameof(IComponentHandler), "beginEdit");
+ var __result__ = ((delegate*unmanaged[MemberFunction])Vtbl[3])(__self__, id);
+ __evt__.Result = __result__;
+ __evt__.Dispose();
+ return __result__;
+ }
+ else
+ {
+ return ((delegate*unmanaged[MemberFunction])Vtbl[3])((LibVst.IComponentHandler*)Unsafe.AsPointer(ref this), id);
+ }
+ }
+
+ ///
+ /// 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!
+ ///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public ComResult performEdit(LibVst.ParamID id, LibVst.ParamValue valueNormalized)
+ {
+ if (InteropHelper.IsTracerEnabled)
+ {
+ var __self__ = (LibVst.IComponentHandler*)Unsafe.AsPointer(ref this);
+ var __evt__ = new ManagedToNativeEvent((IntPtr)__self__, nameof(IComponentHandler), "performEdit");
+ var __result__ = ((delegate*unmanaged[MemberFunction])Vtbl[4])(__self__, id, valueNormalized);
+ __evt__.Result = __result__;
+ __evt__.Dispose();
+ return __result__;
+ }
+ else
+ {
+ return ((delegate*unmanaged[MemberFunction])Vtbl[4])((LibVst.IComponentHandler*)Unsafe.AsPointer(ref this), id, valueNormalized);
+ }
+ }
+
+ ///
+ /// To be called after calling a performEdit (e.g. on mouse-click-up event).
+ /// This must be called in the UI-Thread context!
+ ///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public ComResult endEdit(LibVst.ParamID id)
+ {
+ if (InteropHelper.IsTracerEnabled)
+ {
+ var __self__ = (LibVst.IComponentHandler*)Unsafe.AsPointer(ref this);
+ var __evt__ = new ManagedToNativeEvent((IntPtr)__self__, nameof(IComponentHandler), "endEdit");
+ var __result__ = ((delegate*unmanaged[MemberFunction])Vtbl[5])(__self__, id);
+ __evt__.Result = __result__;
+ __evt__.Dispose();
+ return __result__;
+ }
+ else
+ {
+ return ((delegate*unmanaged[MemberFunction])Vtbl[5])((LibVst.IComponentHandler*)Unsafe.AsPointer(ref this), id);
+ }
+ }
+
+ ///
+ /// Instructs host to restart the component. This must be called in the UI-Thread context!
+ ///
+ /// is a combination of RestartFlags
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public ComResult restartComponent(int flags)
+ {
+ if (InteropHelper.IsTracerEnabled)
+ {
+ var __self__ = (LibVst.IComponentHandler*)Unsafe.AsPointer(ref this);
+ var __evt__ = new ManagedToNativeEvent((IntPtr)__self__, nameof(IComponentHandler), "restartComponent");
+ var __result__ = ((delegate*unmanaged[MemberFunction])Vtbl[6])(__self__, flags);
+ __evt__.Result = __result__;
+ __evt__.Dispose();
+ return __result__;
+ }
+ else
+ {
+ return ((delegate*unmanaged[MemberFunction])Vtbl[6])((LibVst.IComponentHandler*)Unsafe.AsPointer(ref this), flags);
+ }
+ }
+
+ // --------------------------------------------------------------
+ // CCW methods
+ // --------------------------------------------------------------
+ ///
+ /// To be called before calling a performEdit (e.g. on mouse-click-down event).
+ /// This must be called in the UI-Thread context!
+ ///
+ private static partial ComResult beginEdit_ToManaged(IComponentHandler* self, LibVst.ParamID id);
+
+ [UnmanagedCallersOnly(CallConvs = new Type[] { typeof(CallConvMemberFunction)})]
+ private static int beginEdit_Wrapper(IComponentHandler* self, uint id)
+ {
+ if (InteropHelper.IsTracerEnabled)
+ {
+ var __evt__ = new NativeToManagedEvent((IntPtr)self, nameof(IComponentHandler), "beginEdit");
+ try
+ {
+ return beginEdit_ToManaged(self, id);
+ }
+ catch (Exception ex)
+ {
+ __evt__.Exception = ex;
+ return (ComResult)ex;
+ }
+ finally
+ {
+ __evt__.Dispose();
+ }
+ }
+ else
+ {
+ try
+ {
+ return beginEdit_ToManaged(self, id);
+ }
+ catch (Exception ex)
+ {
+ return (ComResult)ex;
+ }
+ }
+ }
+
+ ///
+ /// 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!
+ ///
+ private static partial ComResult performEdit_ToManaged(IComponentHandler* self, LibVst.ParamID id, LibVst.ParamValue valueNormalized);
+
+ [UnmanagedCallersOnly(CallConvs = new Type[] { typeof(CallConvMemberFunction)})]
+ private static int performEdit_Wrapper(IComponentHandler* self, uint id, double valueNormalized)
+ {
+ if (InteropHelper.IsTracerEnabled)
+ {
+ var __evt__ = new NativeToManagedEvent((IntPtr)self, nameof(IComponentHandler), "performEdit");
+ try
+ {
+ return performEdit_ToManaged(self, id, valueNormalized);
+ }
+ catch (Exception ex)
+ {
+ __evt__.Exception = ex;
+ return (ComResult)ex;
+ }
+ finally
+ {
+ __evt__.Dispose();
+ }
+ }
+ else
+ {
+ try
+ {
+ return performEdit_ToManaged(self, id, valueNormalized);
+ }
+ catch (Exception ex)
+ {
+ return (ComResult)ex;
+ }
+ }
+ }
+
+ ///
+ /// To be called after calling a performEdit (e.g. on mouse-click-up event).
+ /// This must be called in the UI-Thread context!
+ ///
+ private static partial ComResult endEdit_ToManaged(IComponentHandler* self, LibVst.ParamID id);
+
+ [UnmanagedCallersOnly(CallConvs = new Type[] { typeof(CallConvMemberFunction)})]
+ private static int endEdit_Wrapper(IComponentHandler* self, uint id)
+ {
+ if (InteropHelper.IsTracerEnabled)
+ {
+ var __evt__ = new NativeToManagedEvent((IntPtr)self, nameof(IComponentHandler), "endEdit");
+ try
+ {
+ return endEdit_ToManaged(self, id);
+ }
+ catch (Exception ex)
+ {
+ __evt__.Exception = ex;
+ return (ComResult)ex;
+ }
+ finally
+ {
+ __evt__.Dispose();
+ }
+ }
+ else
+ {
+ try
+ {
+ return endEdit_ToManaged(self, id);
+ }
+ catch (Exception ex)
+ {
+ return (ComResult)ex;
+ }
+ }
+ }
+
+ ///
+ /// Instructs host to restart the component. This must be called in the UI-Thread context!
+ ///
+ /// is a combination of RestartFlags
+ private static partial ComResult restartComponent_ToManaged(IComponentHandler* self, int flags);
+
+ [UnmanagedCallersOnly(CallConvs = new Type[] { typeof(CallConvMemberFunction)})]
+ private static int restartComponent_Wrapper(IComponentHandler* self, int flags)
+ {
+ if (InteropHelper.IsTracerEnabled)
+ {
+ var __evt__ = new NativeToManagedEvent((IntPtr)self, nameof(IComponentHandler), "restartComponent");
+ try
+ {
+ return restartComponent_ToManaged(self, flags);
+ }
+ catch (Exception ex)
+ {
+ __evt__.Exception = ex;
+ return (ComResult)ex;
+ }
+ finally
+ {
+ __evt__.Dispose();
+ }
+ }
+ else
+ {
+ try
+ {
+ return restartComponent_ToManaged(self, flags);
+ }
+ catch (Exception ex)
+ {
+ return (ComResult)ex;
+ }
+ }
+ }
+
+ ///
+ /// DECLARE_CLASS_IID (IComponentHandler, 0x93A0BEA3, 0x0BD045DB, 0x8E890B0C, 0xC1E46AC6)
+ ///
+ public static ref readonly Guid IId
+ {
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ get
+ {
+ return ref Unsafe.As(ref MemoryMarshal.GetReference((OperatingSystem.IsWindows()
+ ? new ReadOnlySpan(new byte[] { 0xa3, 0xbe, 0xa0, 0x93, 0xd0, 0x0b, 0xdb, 0x45, 0x8e, 0x89, 0x0b, 0x0c, 0xc1, 0xe4, 0x6a, 0xc6 })
+ : new ReadOnlySpan(new byte[] { 0x93, 0xa0, 0xbe, 0xa3, 0x0b, 0xd0, 0x45, 0xdb, 0x8e, 0x89, 0x0b, 0x0c, 0xc1, 0xe4, 0x6a, 0xc6 })
+ )));
+ }
+ }
+ }
+
+ ///
+ /// Extended host callback interface for an edit controller: Vst::IComponentHandler2
+ ///
+ ///
+ /// vstIHost vst310- [host imp]
+ /// - [extends IComponentHandler]
+ /// - [released: 3.1.0]
+ /// - [optional]One part handles:
+ /// - Setting dirty state of the plug-in
+ /// - Requesting the host to open the editorThe 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. IComponentHandler2Example Examples of different use cases@code {.cpp}
+ /// //--------------------------------------
+ /// // we are in the editcontroller...
+ /// // in case of multiple switch buttons (with associated ParamID 1 and 3)
+ /// // on mouse down :
+ /// hostHandler2->startGroupEdit ();
+ /// hostHandler->beginEdit (1);
+ /// hostHandler->beginEdit (3);
+ /// hostHandler->performEdit (1, 1.0);
+ /// hostHandler->performEdit (3, 0.0); // the opposite of paramID 1 for example
+ /// ....
+ /// // on mouse up :
+ /// hostHandler->endEdit (1);
+ /// hostHandler->endEdit (3);
+ /// hostHandler2->finishGroupEdit ();
+ /// ....
+ /// ....
+ /// //--------------------------------------
+ /// // in case of multiple faders (with associated ParamID 1 and 3)
+ /// // on mouse down :
+ /// hostHandler2->startGroupEdit ();
+ /// hostHandler->beginEdit (1);
+ /// hostHandler->beginEdit (3);
+ /// hostHandler2->finishGroupEdit ();
+ /// ....
+ /// // on mouse move :
+ /// hostHandler2->startGroupEdit ();
+ /// hostHandler->performEdit (1, x); // x the wanted value
+ /// hostHandler->performEdit (3, x);
+ /// hostHandler2->finishGroupEdit ();
+ /// ....
+ /// // on mouse up :
+ /// hostHandler2->startGroupEdit ();
+ /// hostHandler->endEdit (1);
+ /// hostHandler->endEdit (3);
+ /// hostHandler2->finishGroupEdit ();
+ /// @endcode
+ ///
+ ///
+ public unsafe partial struct IComponentHandler2 : INativeGuid, INativeUnknown, INativeVtbl
+ {
+ public static Guid* NativeGuid => (Guid*)Unsafe.AsPointer(ref Unsafe.AsRef(in IId));
+
+ public void** Vtbl;
+
+ public static int VtblCount => 7;
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static void InitializeVtbl(void** vtbl)
+ {
+ FUnknown.InitializeVtbl(vtbl);
+ vtbl[3] = (delegate*unmanaged[MemberFunction])&setDirty_Wrapper;
+ vtbl[4] = (delegate*unmanaged[MemberFunction])&requestOpenEditor_Wrapper;
+ vtbl[5] = (delegate*unmanaged[MemberFunction])&startGroupEdit_Wrapper;
+ vtbl[6] = (delegate*unmanaged[MemberFunction])&finishGroupEdit_Wrapper;
+ }
+
+ // --------------------------------------------------------------
+ // RCW methods
+ // --------------------------------------------------------------
+ ///
+ /// Query for a pointer to the specified interface.
+ /// Returns kResultOk on success or kNoInterface if the object does not implement the interface.
+ /// The object has to call addRef when returning an interface.
+ ///
+ /// : (out) On return, *obj points to the requested interface
+ /// : (in) 16 Byte interface identifier (-> FUID)
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public ComResult queryInterface(Guid* _iid, void** obj)
+ {
+ return Unsafe.As(ref this).queryInterface(_iid, obj);
+ }
+
+ ///
+ /// Adds a reference and returns the new reference count.
+ ///
+ ///
+ /// Remarks:
+ /// The initial reference count after creating an object is 1.
+ ///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public uint addRef()
+ {
+ return Unsafe.As(ref this).addRef();
+ }
+
+ ///
+ /// Releases a reference and returns the new reference count.
+ /// If the reference count reaches zero, the object will be destroyed in memory.
+ ///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public uint release()
+ {
+ return Unsafe.As(ref this).release();
+ }
+
+ ///
+ /// 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.
+ ///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public ComResult setDirty(byte state)
+ {
+ if (InteropHelper.IsTracerEnabled)
+ {
+ var __self__ = (LibVst.IComponentHandler2*)Unsafe.AsPointer(ref this);
+ var __evt__ = new ManagedToNativeEvent((IntPtr)__self__, nameof(IComponentHandler2), "setDirty");
+ var __result__ = ((delegate*unmanaged[MemberFunction])Vtbl[3])(__self__, state);
+ __evt__.Result = __result__;
+ __evt__.Dispose();
+ return __result__;
+ }
+ else
+ {
+ return ((delegate*unmanaged[MemberFunction])Vtbl[3])((LibVst.IComponentHandler2*)Unsafe.AsPointer(ref this), state);
+ }
+ }
+
+ ///
+ /// 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).
+ ///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public ComResult requestOpenEditor(LibVst.FIDString name)
+ {
+ if (InteropHelper.IsTracerEnabled)
+ {
+ var __self__ = (LibVst.IComponentHandler2*)Unsafe.AsPointer(ref this);
+ var __evt__ = new ManagedToNativeEvent((IntPtr)__self__, nameof(IComponentHandler2), "requestOpenEditor");
+ var __result__ = ((delegate*unmanaged[MemberFunction])Vtbl[4])(__self__, name);
+ __evt__.Result = __result__;
+ __evt__.Dispose();
+ return __result__;
+ }
+ else
+ {
+ return ((delegate*unmanaged[MemberFunction])Vtbl[4])((LibVst.IComponentHandler2*)Unsafe.AsPointer(ref this), name);
+ }
+ }
+
+ ///
+ /// 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 ().
+ ///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public ComResult startGroupEdit()
{
if (InteropHelper.IsTracerEnabled)
@@ -10752,8 +11601,8 @@ public ComResult finishGroupEdit()
// CCW methods
// --------------------------------------------------------------
///
- /// 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.
+ /// 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.
///
private static partial ComResult setDirty_ToManaged(IComponentHandler2* self, byte state);
@@ -10791,8 +11640,9 @@ private static int setDirty_Wrapper(IComponentHandler2* self, byte state)
}
///
- /// 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).
///
private static partial ComResult requestOpenEditor_ToManaged(IComponentHandler2* self, LibVst.FIDString name);
@@ -10830,7 +11680,8 @@ private static int requestOpenEditor_Wrapper(IComponentHandler2* self, byte* nam
}
///
- /// 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 ().
+ /// 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 ().
///
private static partial ComResult startGroupEdit_ToManaged(IComponentHandler2* self);
@@ -11083,28 +11934,29 @@ public static ref readonly Guid IId
/// - [optional]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. IProgressExample Example@code {.cpp}
+ /// 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. IProgressExample Example@code {.cpp}
/// //--------------------------------------
/// // we are in the editcontroller:
/// // as member: IProgress::ID mProgressID;
///
/// 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
///
///
@@ -11391,7 +12243,8 @@ public partial record struct ID(ulong Value)
///
/// vstIPlug vst300- [plug imp]
/// - [released: 3.0.0]
- /// - [mandatory]The controller part of an effect or instrument with parameter handling (export, definition, conversion...).
+ /// - [mandatory]The controller part of an effect or instrument with parameter handling (export, definition,
+ /// conversion, ...).
///
///
public unsafe partial struct IEditController : INativeGuid, INativeUnknown, INativeVtbl
@@ -11654,7 +12507,7 @@ public double normalizedParamToPlain(LibVst.ParamID id, LibVst.ParamValue valueN
}
///
- /// Returns for a given paramID and a plain value its normalized value. (see @ref vst3AutomationIntro)
+ /// Returns for a given paramID and a plain value its normalized value. (see @ref vst3AutomationIntro).
///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public double plainParamToNormalized(LibVst.ParamID id, LibVst.ParamValue plainValue)
@@ -11694,9 +12547,9 @@ public double getParamNormalized(LibVst.ParamID id)
}
///
- /// 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!
+ /// 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!
///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public ComResult setParamNormalized(LibVst.ParamID id, LibVst.ParamValue value)
@@ -11741,7 +12594,8 @@ public ComResult setComponentHandler(LibVst.IComponentHandler* handler)
///
/// 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.
+ /// 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.
///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public LibVst.IPlugView* createView(LibVst.FIDString name)
@@ -12070,7 +12924,7 @@ private static double normalizedParamToPlain_Wrapper(IEditController* self, uint
}
///
- /// Returns for a given paramID and a plain value its normalized value. (see @ref vst3AutomationIntro)
+ /// Returns for a given paramID and a plain value its normalized value. (see @ref vst3AutomationIntro).
///
private static partial LibVst.ParamValue plainParamToNormalized_ToManaged(IEditController* self, LibVst.ParamID id, LibVst.ParamValue plainValue);
@@ -12146,9 +13000,9 @@ private static double getParamNormalized_Wrapper(IEditController* self, uint id)
}
///
- /// 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!
+ /// 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!
///
private static partial ComResult setParamNormalized_ToManaged(IEditController* self, LibVst.ParamID id, LibVst.ParamValue value);
@@ -12227,7 +13081,8 @@ private static int setComponentHandler_Wrapper(IEditController* self, LibVst.ICo
///
/// 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.
+ /// 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.
///
private static partial LibVst.IPlugView* createView_ToManaged(IEditController* self, LibVst.FIDString name);
@@ -12309,13 +13164,12 @@ public unsafe partial struct ParameterInfo
public LibVst.String128 units;
///
- /// 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)
+ /// number of discrete steps (0: continuous, 1: toggle, discrete value
///
public int stepCount;
///
- /// default normalized value [0,1] (in case of discrete value: defaultNormalizedValue = defDiscreteValue / stepCount)
+ /// default normalized value [0,1]
///
public LibVst.ParamValue defaultNormalizedValue;
@@ -12329,48 +13183,55 @@ public unsafe partial struct ParameterInfo
///
public int flags;
- public enum ParameterFlags
+ public enum ParameterFlags : int
{
///
- /// no flags wanted
+ /// No flags wanted.
+ /// [SDK 3.0.0]
///
kNoFlags = 0,
///
- /// parameter can be automated
+ /// 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)
+ /// 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]
+ /// 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]
+ /// 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
- /// (implies that kCanAutomate is NOT set and kIsReadOnly is set) [SDK 3.7.0]
+ /// 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)
+ /// 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)
+ /// 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,
}
@@ -12473,8 +13334,8 @@ public ComResult setKnobMode(LibVst.KnobMode mode)
}
///
- /// 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.
+ /// 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.
///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
@@ -12497,7 +13358,7 @@ public ComResult openHelp(byte onlyCheck)
///
/// 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.
+ /// The host could call it with onlyCheck set to true for testing support of open AboutBox.
/// Return kResultFalse means not supported function.
///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
@@ -12561,8 +13422,8 @@ private static int setKnobMode_Wrapper(IEditController2* self, int mode)
}
///
- /// 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.
+ /// 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.
///
private static partial ComResult openHelp_ToManaged(IEditController2* self, byte onlyCheck);
@@ -12602,7 +13463,7 @@ private static int openHelp_Wrapper(IEditController2* self, byte onlyCheck)
///
/// 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.
+ /// The host could call it with onlyCheck set to true for testing support of open AboutBox.
/// Return kResultFalse means not supported function.
///
private static partial ComResult openAboutBox_ToManaged(IEditController2* self, byte onlyCheck);
@@ -12673,38 +13534,44 @@ public partial record struct KnobMode(int Value)
/// - [optional]MIDI controllers are not transmitted directly to a VST component. MIDI as hardware protocol has
/// restrictions that can be avoided in software. Controller data in particular come along with unclear
/// 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. IMidiMappingExample Example@code {.cpp}
+ /// 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. IMidiMappingExample Example@code {.cpp}
/// //--------------------------------------
/// // 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
///
@@ -12763,11 +13630,13 @@ public uint release()
}
///
- /// Gets an (preferred) associated ParamID for a given Input Event Bus index, channel and MIDI Controller.
+ /// Gets an (preferred) associated ParamID for a given Input Event Bus index, channel and MIDI
+ /// Controller.
///
/// - index of Input Event Bus
/// - channel of the bus
- /// - see @ref ControllerNumbers for expected values (could be bigger than 127)
+ /// - see @ref ControllerNumbers for expected values (could be
+ /// bigger than 127)
/// - return the associated ParamID to the given midiControllerNumber
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public ComResult getMidiControllerAssignment(int busIndex, short channel, LibVst.CtrlNumber midiControllerNumber, LibVst.ParamID* id)
@@ -12791,11 +13660,13 @@ public ComResult getMidiControllerAssignment(int busIndex, short channel, LibVst
// CCW methods
// --------------------------------------------------------------
///
- /// Gets an (preferred) associated ParamID for a given Input Event Bus index, channel and MIDI Controller.
+ /// Gets an (preferred) associated ParamID for a given Input Event Bus index, channel and MIDI
+ /// Controller.
///
/// - index of Input Event Bus
/// - channel of the bus
- /// - see @ref ControllerNumbers for expected values (could be bigger than 127)
+ /// - see @ref ControllerNumbers for expected values (could be
+ /// bigger than 127)
/// - return the associated ParamID to the given midiControllerNumber
private static partial ComResult getMidiControllerAssignment_ToManaged(IMidiMapping* self, int busIndex, short channel, LibVst.CtrlNumber midiControllerNumber, LibVst.ParamID* id);
@@ -12823,7 +13694,228 @@ private static int getMidiControllerAssignment_Wrapper(IMidiMapping* self, int b
{
try
{
- return getMidiControllerAssignment_ToManaged(self, busIndex, channel, midiControllerNumber, id);
+ return getMidiControllerAssignment_ToManaged(self, busIndex, channel, midiControllerNumber, id);
+ }
+ catch (Exception ex)
+ {
+ return (ComResult)ex;
+ }
+ }
+ }
+
+ ///
+ /// DECLARE_CLASS_IID (IMidiMapping, 0xDF0FF9F7, 0x49B74669, 0xB63AB732, 0x7ADBF5E5)
+ ///
+ public static ref readonly Guid IId
+ {
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ get
+ {
+ return ref Unsafe.As(ref MemoryMarshal.GetReference((OperatingSystem.IsWindows()
+ ? new ReadOnlySpan(new byte[] { 0xf7, 0xf9, 0x0f, 0xdf, 0xb7, 0x49, 0x69, 0x46, 0xb6, 0x3a, 0xb7, 0x32, 0x7a, 0xdb, 0xf5, 0xe5 })
+ : new ReadOnlySpan(new byte[] { 0xdf, 0x0f, 0xf9, 0xf7, 0x49, 0xb7, 0x46, 0x69, 0xb6, 0x3a, 0xb7, 0x32, 0x7a, 0xdb, 0xf5, 0xe5 })
+ )));
+ }
+ }
+ }
+
+ public partial record struct CtrlNumber(short Value)
+ {
+ public static implicit operator short(CtrlNumber value) => value.Value;
+
+ public static implicit operator CtrlNumber(short value) => new(value);
+ }
+
+ ///
+ /// Parameter Editing from host: Vst::IEditControllerHostEditing
+ ///
+ ///
+ /// vstIPlug vst350- [plug imp]
+ /// - [extends IEditController]
+ /// - [released: 3.5.0]
+ /// - [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: IEditControllerExample Example@code {.cpp}
+ /// //------------------------------------------------------------------------
+ /// plugEditController->beginEditFromHost (id);
+ /// plugEditController->setParamNormalized (id, value);
+ /// plugEditController->setParamNormalized (id, value + 0.1);
+ /// // ...
+ /// plugEditController->endEditFromHost (id);
+ /// @endcode
+ ///
+ ///
+ public unsafe partial struct IEditControllerHostEditing : INativeGuid, INativeUnknown, INativeVtbl
+ {
+ public static Guid* NativeGuid => (Guid*)Unsafe.AsPointer(ref Unsafe.AsRef(in IId));
+
+ public void** Vtbl;
+
+ public static int VtblCount => 5;
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static void InitializeVtbl(void** vtbl)
+ {
+ FUnknown.InitializeVtbl(vtbl);
+ vtbl[3] = (delegate*unmanaged[MemberFunction])&beginEditFromHost_Wrapper;
+ vtbl[4] = (delegate*unmanaged[MemberFunction])&endEditFromHost_Wrapper;
+ }
+
+ // --------------------------------------------------------------
+ // RCW methods
+ // --------------------------------------------------------------
+ ///
+ /// Query for a pointer to the specified interface.
+ /// Returns kResultOk on success or kNoInterface if the object does not implement the interface.
+ /// The object has to call addRef when returning an interface.
+ ///
+ /// : (out) On return, *obj points to the requested interface
+ /// : (in) 16 Byte interface identifier (-> FUID)
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public ComResult queryInterface(Guid* _iid, void** obj)
+ {
+ return Unsafe.As(ref this).queryInterface(_iid, obj);
+ }
+
+ ///
+ /// Adds a reference and returns the new reference count.
+ ///
+ ///
+ /// Remarks:
+ /// The initial reference count after creating an object is 1.
+ ///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public uint addRef()
+ {
+ return Unsafe.As(ref this).addRef();
+ }
+
+ ///
+ /// Releases a reference and returns the new reference count.
+ /// If the reference count reaches zero, the object will be destroyed in memory.
+ ///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public uint release()
+ {
+ return Unsafe.As(ref this).release();
+ }
+
+ ///
+ /// Called before a setParamNormalized sequence, a endEditFromHost will be call at the end of
+ /// the editing action.
+ ///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public ComResult beginEditFromHost(LibVst.ParamID paramID)
+ {
+ if (InteropHelper.IsTracerEnabled)
+ {
+ var __self__ = (LibVst.IEditControllerHostEditing*)Unsafe.AsPointer(ref this);
+ var __evt__ = new ManagedToNativeEvent((IntPtr)__self__, nameof(IEditControllerHostEditing), "beginEditFromHost");
+ var __result__ = ((delegate*unmanaged[MemberFunction])Vtbl[3])(__self__, paramID);
+ __evt__.Result = __result__;
+ __evt__.Dispose();
+ return __result__;
+ }
+ else
+ {
+ return ((delegate*unmanaged[MemberFunction])Vtbl[3])((LibVst.IEditControllerHostEditing*)Unsafe.AsPointer(ref this), paramID);
+ }
+ }
+
+ ///
+ /// Called after a beginEditFromHost and a sequence of setParamNormalized.
+ ///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public ComResult endEditFromHost(LibVst.ParamID paramID)
+ {
+ if (InteropHelper.IsTracerEnabled)
+ {
+ var __self__ = (LibVst.IEditControllerHostEditing*)Unsafe.AsPointer(ref this);
+ var __evt__ = new ManagedToNativeEvent((IntPtr)__self__, nameof(IEditControllerHostEditing), "endEditFromHost");
+ var __result__ = ((delegate*unmanaged[MemberFunction])Vtbl[4])(__self__, paramID);
+ __evt__.Result = __result__;
+ __evt__.Dispose();
+ return __result__;
+ }
+ else
+ {
+ return ((delegate*unmanaged[MemberFunction])Vtbl[4])((LibVst.IEditControllerHostEditing*)Unsafe.AsPointer(ref this), paramID);
+ }
+ }
+
+ // --------------------------------------------------------------
+ // CCW methods
+ // --------------------------------------------------------------
+ ///
+ /// Called before a setParamNormalized sequence, a endEditFromHost will be call at the end of
+ /// the editing action.
+ ///
+ private static partial ComResult beginEditFromHost_ToManaged(IEditControllerHostEditing* self, LibVst.ParamID paramID);
+
+ [UnmanagedCallersOnly(CallConvs = new Type[] { typeof(CallConvMemberFunction)})]
+ private static int beginEditFromHost_Wrapper(IEditControllerHostEditing* self, uint paramID)
+ {
+ if (InteropHelper.IsTracerEnabled)
+ {
+ var __evt__ = new NativeToManagedEvent((IntPtr)self, nameof(IEditControllerHostEditing), "beginEditFromHost");
+ try
+ {
+ return beginEditFromHost_ToManaged(self, paramID);
+ }
+ catch (Exception ex)
+ {
+ __evt__.Exception = ex;
+ return (ComResult)ex;
+ }
+ finally
+ {
+ __evt__.Dispose();
+ }
+ }
+ else
+ {
+ try
+ {
+ return beginEditFromHost_ToManaged(self, paramID);
+ }
+ catch (Exception ex)
+ {
+ return (ComResult)ex;
+ }
+ }
+ }
+
+ ///
+ /// Called after a beginEditFromHost and a sequence of setParamNormalized.
+ ///
+ private static partial ComResult endEditFromHost_ToManaged(IEditControllerHostEditing* self, LibVst.ParamID paramID);
+
+ [UnmanagedCallersOnly(CallConvs = new Type[] { typeof(CallConvMemberFunction)})]
+ private static int endEditFromHost_Wrapper(IEditControllerHostEditing* self, uint paramID)
+ {
+ if (InteropHelper.IsTracerEnabled)
+ {
+ var __evt__ = new NativeToManagedEvent((IntPtr)self, nameof(IEditControllerHostEditing), "endEditFromHost");
+ try
+ {
+ return endEditFromHost_ToManaged(self, paramID);
+ }
+ catch (Exception ex)
+ {
+ __evt__.Exception = ex;
+ return (ComResult)ex;
+ }
+ finally
+ {
+ __evt__.Dispose();
+ }
+ }
+ else
+ {
+ try
+ {
+ return endEditFromHost_ToManaged(self, paramID);
}
catch (Exception ex)
{
@@ -12833,7 +13925,7 @@ private static int getMidiControllerAssignment_Wrapper(IMidiMapping* self, int b
}
///
- /// DECLARE_CLASS_IID (IMidiMapping, 0xDF0FF9F7, 0x49B74669, 0xB63AB732, 0x7ADBF5E5)
+ /// DECLARE_CLASS_IID (IEditControllerHostEditing, 0xC1271208, 0x70594098, 0xB9DD34B3, 0x6BB0195E)
///
public static ref readonly Guid IId
{
@@ -12841,54 +13933,35 @@ public static ref readonly Guid IId
get
{
return ref Unsafe.As(ref MemoryMarshal.GetReference((OperatingSystem.IsWindows()
- ? new ReadOnlySpan(new byte[] { 0xf7, 0xf9, 0x0f, 0xdf, 0xb7, 0x49, 0x69, 0x46, 0xb6, 0x3a, 0xb7, 0x32, 0x7a, 0xdb, 0xf5, 0xe5 })
- : new ReadOnlySpan(new byte[] { 0xdf, 0x0f, 0xf9, 0xf7, 0x49, 0xb7, 0x46, 0x69, 0xb6, 0x3a, 0xb7, 0x32, 0x7a, 0xdb, 0xf5, 0xe5 })
+ ? new ReadOnlySpan(new byte[] { 0x08, 0x12, 0x27, 0xc1, 0x59, 0x70, 0x98, 0x40, 0xb9, 0xdd, 0x34, 0xb3, 0x6b, 0xb0, 0x19, 0x5e })
+ : new ReadOnlySpan(new byte[] { 0xc1, 0x27, 0x12, 0x08, 0x70, 0x59, 0x40, 0x98, 0xb9, 0xdd, 0x34, 0xb3, 0x6b, 0xb0, 0x19, 0x5e })
)));
}
}
}
- public partial record struct CtrlNumber(short Value)
- {
- public static implicit operator short(CtrlNumber value) => value.Value;
-
- public static implicit operator CtrlNumber(short value) => new(value);
- }
-
///
- /// Parameter Editing from host: Vst::IEditControllerHostEditing
+ /// Extended plug-in interface IComponentHandler for an edit controller
///
///
- /// vstIPlug vst350- [plug imp]
- /// - [extends IEditController]
- /// - [released: 3.5.0]
- /// - [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: IEditControllerExample Example@code {.cpp}
- /// //------------------------------------------------------------------------
- /// plugEditController->beginEditFromHost (id);
- /// plugEditController->setParamNormalized (id, value);
- /// plugEditController->setParamNormalized (id, value + 0.1);
- /// // ...
- /// plugEditController->endEditFromHost (id);
- /// @endcode
+ /// vstIHost vst379- [host imp]
+ /// - [extends IComponentHandler]
+ /// - [released: 3.7.9]
+ /// - [optional]------------------------------------------------------------------------
///
- ///
- public unsafe partial struct IEditControllerHostEditing : INativeGuid, INativeUnknown, INativeVtbl
+ public unsafe partial struct IComponentHandlerSystemTime : INativeGuid, INativeUnknown, INativeVtbl
{
public static Guid* NativeGuid => (Guid*)Unsafe.AsPointer(ref Unsafe.AsRef(in IId));
public void** Vtbl;
- public static int VtblCount => 5;
+ public static int VtblCount => 4;
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void InitializeVtbl(void** vtbl)
{
FUnknown.InitializeVtbl(vtbl);
- vtbl[3] = (delegate*unmanaged[MemberFunction])&beginEditFromHost_Wrapper;
- vtbl[4] = (delegate*unmanaged[MemberFunction])&endEditFromHost_Wrapper;
+ vtbl[3] = (delegate*unmanaged[MemberFunction])&getSystemTime_Wrapper;
}
// --------------------------------------------------------------
@@ -12904,7 +13977,7 @@ public static void InitializeVtbl(void** vtbl)
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public ComResult queryInterface(Guid* _iid, void** obj)
{
- return Unsafe.As(ref this).queryInterface(_iid, obj);
+ return Unsafe.As(ref this).queryInterface(_iid, obj);
}
///
@@ -12917,7 +13990,7 @@ public ComResult queryInterface(Guid* _iid, void** obj)
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public uint addRef()
{
- return Unsafe.As(ref this).addRef();
+ return Unsafe.As(ref this).addRef();
}
///
@@ -12927,48 +14000,27 @@ public uint addRef()
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public uint release()
{
- return Unsafe.As(ref this).release();
- }
-
- ///
- /// Called before a setParamNormalized sequence, a endEditFromHost will be call at the end of the editing action.
- ///
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- public ComResult beginEditFromHost(LibVst.ParamID paramID)
- {
- if (InteropHelper.IsTracerEnabled)
- {
- var __self__ = (LibVst.IEditControllerHostEditing*)Unsafe.AsPointer(ref this);
- var __evt__ = new ManagedToNativeEvent((IntPtr)__self__, nameof(IEditControllerHostEditing), "beginEditFromHost");
- var __result__ = ((delegate*unmanaged[MemberFunction])Vtbl[3])(__self__, paramID);
- __evt__.Result = __result__;
- __evt__.Dispose();
- return __result__;
- }
- else
- {
- return ((delegate*unmanaged[MemberFunction])Vtbl[3])((LibVst.IEditControllerHostEditing*)Unsafe.AsPointer(ref this), paramID);
- }
+ return Unsafe.As(ref this).release();
}
///
- /// Called after a beginEditFromHost and a sequence of setParamNormalized.
+ /// get the current systemTime (the same as the one used in ProcessContext::systemTime).
///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- public ComResult endEditFromHost(LibVst.ParamID paramID)
+ public ComResult getSystemTime(long* systemTime)
{
if (InteropHelper.IsTracerEnabled)
{
- var __self__ = (LibVst.IEditControllerHostEditing*)Unsafe.AsPointer(ref this);
- var __evt__ = new ManagedToNativeEvent((IntPtr)__self__, nameof(IEditControllerHostEditing), "endEditFromHost");
- var __result__ = ((delegate*unmanaged[MemberFunction])Vtbl[4])(__self__, paramID);
+ var __self__ = (LibVst.IComponentHandlerSystemTime*)Unsafe.AsPointer(ref this);
+ var __evt__ = new ManagedToNativeEvent((IntPtr)__self__, nameof(IComponentHandlerSystemTime), "getSystemTime");
+ var __result__ = ((delegate*unmanaged[MemberFunction])Vtbl[3])(__self__, systemTime);
__evt__.Result = __result__;
__evt__.Dispose();
return __result__;
}
else
{
- return ((delegate*unmanaged[MemberFunction])Vtbl[4])((LibVst.IEditControllerHostEditing*)Unsafe.AsPointer(ref this), paramID);
+ return ((delegate*unmanaged[MemberFunction])Vtbl[3])((LibVst.IComponentHandlerSystemTime*)Unsafe.AsPointer(ref this), systemTime);
}
}
@@ -12976,57 +14028,19 @@ public ComResult endEditFromHost(LibVst.ParamID paramID)
// CCW methods
// --------------------------------------------------------------
///
- /// Called before a setParamNormalized sequence, a endEditFromHost will be call at the end of the editing action.
- ///
- private static partial ComResult beginEditFromHost_ToManaged(IEditControllerHostEditing* self, LibVst.ParamID paramID);
-
- [UnmanagedCallersOnly(CallConvs = new Type[] { typeof(CallConvMemberFunction)})]
- private static int beginEditFromHost_Wrapper(IEditControllerHostEditing* self, uint paramID)
- {
- if (InteropHelper.IsTracerEnabled)
- {
- var __evt__ = new NativeToManagedEvent((IntPtr)self, nameof(IEditControllerHostEditing), "beginEditFromHost");
- try
- {
- return beginEditFromHost_ToManaged(self, paramID);
- }
- catch (Exception ex)
- {
- __evt__.Exception = ex;
- return (ComResult)ex;
- }
- finally
- {
- __evt__.Dispose();
- }
- }
- else
- {
- try
- {
- return beginEditFromHost_ToManaged(self, paramID);
- }
- catch (Exception ex)
- {
- return (ComResult)ex;
- }
- }
- }
-
- ///
- /// Called after a beginEditFromHost and a sequence of setParamNormalized.
+ /// get the current systemTime (the same as the one used in ProcessContext::systemTime).
///
- private static partial ComResult endEditFromHost_ToManaged(IEditControllerHostEditing* self, LibVst.ParamID paramID);
+ private static partial ComResult getSystemTime_ToManaged(IComponentHandlerSystemTime* self, long* systemTime);
[UnmanagedCallersOnly(CallConvs = new Type[] { typeof(CallConvMemberFunction)})]
- private static int endEditFromHost_Wrapper(IEditControllerHostEditing* self, uint paramID)
+ private static int getSystemTime_Wrapper(IComponentHandlerSystemTime* self, long* systemTime)
{
if (InteropHelper.IsTracerEnabled)
{
- var __evt__ = new NativeToManagedEvent((IntPtr)self, nameof(IEditControllerHostEditing), "endEditFromHost");
+ var __evt__ = new NativeToManagedEvent((IntPtr)self, nameof(IComponentHandlerSystemTime), "getSystemTime");
try
{
- return endEditFromHost_ToManaged(self, paramID);
+ return getSystemTime_ToManaged(self, systemTime);
}
catch (Exception ex)
{
@@ -13042,7 +14056,7 @@ private static int endEditFromHost_Wrapper(IEditControllerHostEditing* self, uin
{
try
{
- return endEditFromHost_ToManaged(self, paramID);
+ return getSystemTime_ToManaged(self, systemTime);
}
catch (Exception ex)
{
@@ -13052,7 +14066,7 @@ private static int endEditFromHost_Wrapper(IEditControllerHostEditing* self, uin
}
///
- /// DECLARE_CLASS_IID (IEditControllerHostEditing, 0xC1271208, 0x70594098, 0xB9DD34B3, 0x6BB0195E)
+ /// DECLARE_CLASS_IID (IComponentHandlerSystemTime, 0xF9E53056, 0xD1554CD5, 0xB7695E1B, 0x7B0F7745)
///
public static ref readonly Guid IId
{
@@ -13060,8 +14074,8 @@ public static ref readonly Guid IId
get
{
return ref Unsafe.As(ref MemoryMarshal.GetReference((OperatingSystem.IsWindows()
- ? new ReadOnlySpan(new byte[] { 0x08, 0x12, 0x27, 0xc1, 0x59, 0x70, 0x98, 0x40, 0xb9, 0xdd, 0x34, 0xb3, 0x6b, 0xb0, 0x19, 0x5e })
- : new ReadOnlySpan(new byte[] { 0xc1, 0x27, 0x12, 0x08, 0x70, 0x59, 0x40, 0x98, 0xb9, 0xdd, 0x34, 0xb3, 0x6b, 0xb0, 0x19, 0x5e })
+ ? new ReadOnlySpan(new byte[] { 0x56, 0x30, 0xe5, 0xf9, 0x55, 0xd1, 0xd5, 0x4c, 0xb7, 0x69, 0x5e, 0x1b, 0x7b, 0x0f, 0x77, 0x45 })
+ : new ReadOnlySpan(new byte[] { 0xf9, 0xe5, 0x30, 0x56, 0xd1, 0x55, 0x4c, 0xd5, 0xb7, 0x69, 0x5e, 0x1b, 0x7b, 0x0f, 0x77, 0x45 })
)));
}
}
@@ -16497,7 +17511,165 @@ public static ref readonly Guid IId
/// - [optional]It is highly recommended to implement this interface.
/// A host can implement important functionality when a plug-in supports this interface.For example, all Steinberg hosts require this interface in order to support the "AI Knob".
///
- public unsafe partial struct IParameterFinder : INativeGuid, INativeUnknown, INativeVtbl
+ public unsafe partial struct IParameterFinder : INativeGuid, INativeUnknown, INativeVtbl
+ {
+ public static Guid* NativeGuid => (Guid*)Unsafe.AsPointer(ref Unsafe.AsRef(in IId));
+
+ public void** Vtbl;
+
+ public static int VtblCount => 4;
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static void InitializeVtbl(void** vtbl)
+ {
+ FUnknown.InitializeVtbl(vtbl);
+ vtbl[3] = (delegate*unmanaged[MemberFunction])&findParameter_Wrapper;
+ }
+
+ // --------------------------------------------------------------
+ // RCW methods
+ // --------------------------------------------------------------
+ ///
+ /// Query for a pointer to the specified interface.
+ /// Returns kResultOk on success or kNoInterface if the object does not implement the interface.
+ /// The object has to call addRef when returning an interface.
+ ///
+ /// : (out) On return, *obj points to the requested interface
+ /// : (in) 16 Byte interface identifier (-> FUID)
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public ComResult queryInterface(Guid* _iid, void** obj)
+ {
+ return Unsafe.As(ref this).queryInterface(_iid, obj);
+ }
+
+ ///
+ /// Adds a reference and returns the new reference count.
+ ///
+ ///
+ /// Remarks:
+ /// The initial reference count after creating an object is 1.
+ ///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public uint addRef()
+ {
+ return Unsafe.As(ref this).addRef();
+ }
+
+ ///
+ /// Releases a reference and returns the new reference count.
+ /// If the reference count reaches zero, the object will be destroyed in memory.
+ ///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public uint release()
+ {
+ return Unsafe.As(ref this).release();
+ }
+
+ ///
+ /// Find out which parameter in plug-in view is at given position (relative to plug-in view).
+ ///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public ComResult findParameter(int xPos, int yPos, LibVst.ParamID* resultTag)
+ {
+ if (InteropHelper.IsTracerEnabled)
+ {
+ var __self__ = (LibVst.IParameterFinder*)Unsafe.AsPointer(ref this);
+ var __evt__ = new ManagedToNativeEvent((IntPtr)__self__, nameof(IParameterFinder), "findParameter");
+ var __result__ = ((delegate*unmanaged[MemberFunction])Vtbl[3])(__self__, xPos, yPos, resultTag);
+ __evt__.Result = __result__;
+ __evt__.Dispose();
+ return __result__;
+ }
+ else
+ {
+ return ((delegate*unmanaged[MemberFunction])Vtbl[3])((LibVst.IParameterFinder*)Unsafe.AsPointer(ref this), xPos, yPos, resultTag);
+ }
+ }
+
+ // --------------------------------------------------------------
+ // CCW methods
+ // --------------------------------------------------------------
+ ///
+ /// Find out which parameter in plug-in view is at given position (relative to plug-in view).
+ ///
+ private static partial ComResult findParameter_ToManaged(IParameterFinder* self, int xPos, int yPos, LibVst.ParamID* resultTag);
+
+ [UnmanagedCallersOnly(CallConvs = new Type[] { typeof(CallConvMemberFunction)})]
+ private static int findParameter_Wrapper(IParameterFinder* self, int xPos, int yPos, LibVst.ParamID* resultTag)
+ {
+ if (InteropHelper.IsTracerEnabled)
+ {
+ var __evt__ = new NativeToManagedEvent((IntPtr)self, nameof(IParameterFinder), "findParameter");
+ try
+ {
+ return findParameter_ToManaged(self, xPos, yPos, resultTag);
+ }
+ catch (Exception ex)
+ {
+ __evt__.Exception = ex;
+ return (ComResult)ex;
+ }
+ finally
+ {
+ __evt__.Dispose();
+ }
+ }
+ else
+ {
+ try
+ {
+ return findParameter_ToManaged(self, xPos, yPos, resultTag);
+ }
+ catch (Exception ex)
+ {
+ return (ComResult)ex;
+ }
+ }
+ }
+
+ ///
+ /// DECLARE_CLASS_IID (IParameterFinder, 0x0F618302, 0x215D4587, 0xA512073C, 0x77B9D383)
+ ///
+ public static ref readonly Guid IId
+ {
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ get
+ {
+ return ref Unsafe.As(ref MemoryMarshal.GetReference((OperatingSystem.IsWindows()
+ ? new ReadOnlySpan(new byte[] { 0x02, 0x83, 0x61, 0x0f, 0x5d, 0x21, 0x87, 0x45, 0xa5, 0x12, 0x07, 0x3c, 0x77, 0xb9, 0xd3, 0x83 })
+ : new ReadOnlySpan(new byte[] { 0x0f, 0x61, 0x83, 0x02, 0x21, 0x5d, 0x45, 0x87, 0xa5, 0x12, 0x07, 0x3c, 0x77, 0xb9, 0xd3, 0x83 })
+ )));
+ }
+ }
+ }
+
+ ///
+ /// IPrefetchableSupport Interface
+ /// Indicates that the plug-in could or not support Prefetch (dynamically): Vst::IPrefetchableSupport
+ ///
+ ///
+ /// vstIPlug vst365- [plug imp]
+ /// - [extends IComponent]
+ /// - [released: 3.6.5]
+ /// - [optional]The plug-in should implement this interface if it needs to dynamically change between prefetchable or not.
+ /// By default (without implementing this interface) the host decides in which mode the plug-in is processed.
+ /// For more info about the prefetch processing mode check the ProcessModes::kPrefetch documentation. IPrefetchableSupportExample Example@code {.cpp}
+ /// //------------------------------------------------------------------------
+ /// tresult PLUGIN_API myPlug::getPrefetchableSupport (PrefetchableSupport& prefetchable)
+ /// {
+ /// prefetchable = kIsNeverPrefetchable;
+ ///
+ /// switch (myPrefetchableMode)
+ /// {
+ /// case 0: prefetchable = kIsNeverPrefetchable; break;
+ /// case 1: prefetchable = kIsYetPrefetchable; break;
+ /// case 2: prefetchable = kIsNotYetPrefetchable; break;
+ /// }
+ /// return kResultOk;
+ /// }
+ /// @endcode
+ ///
+ public unsafe partial struct IPrefetchableSupport : INativeGuid, INativeUnknown, INativeVtbl
{
public static Guid* NativeGuid => (Guid*)Unsafe.AsPointer(ref Unsafe.AsRef(in IId));
@@ -16509,7 +17681,7 @@ public unsafe partial struct IParameterFinder : INativeGuid, INativeUnknown, INa
public static void InitializeVtbl(void** vtbl)
{
FUnknown.InitializeVtbl(vtbl);
- vtbl[3] = (delegate*unmanaged[MemberFunction])&findParameter_Wrapper;
+ vtbl[3] = (delegate*unmanaged[MemberFunction])&getPrefetchableSupport_Wrapper;
}
// --------------------------------------------------------------
@@ -16525,7 +17697,7 @@ public static void InitializeVtbl(void** vtbl)
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public ComResult queryInterface(Guid* _iid, void** obj)
{
- return Unsafe.As(ref this).queryInterface(_iid, obj);
+ return Unsafe.As(ref this).queryInterface(_iid, obj);
}
///
@@ -16538,7 +17710,7 @@ public ComResult queryInterface(Guid* _iid, void** obj)
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public uint addRef()
{
- return Unsafe.As(ref this).addRef();
+ return Unsafe.As(ref this).addRef();
}
///
@@ -16548,27 +17720,28 @@ public uint addRef()
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public uint release()
{
- return Unsafe.As(ref this).release();
+ return Unsafe.As(ref this).release();
}
///
- /// Find out which parameter in plug-in view is at given position (relative to plug-in view).
+ /// retrieve the current prefetch support. Use IComponentHandler::restartComponent
+ /// (kPrefetchableSupportChanged) to inform the host that this support has changed.
///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- public ComResult findParameter(int xPos, int yPos, LibVst.ParamID* resultTag)
+ public ComResult getPrefetchableSupport(LibVst.PrefetchableSupport* prefetchable)
{
if (InteropHelper.IsTracerEnabled)
{
- var __self__ = (LibVst.IParameterFinder*)Unsafe.AsPointer(ref this);
- var __evt__ = new ManagedToNativeEvent((IntPtr)__self__, nameof(IParameterFinder), "findParameter");
- var __result__ = ((delegate*unmanaged[MemberFunction])Vtbl[3])(__self__, xPos, yPos, resultTag);
+ var __self__ = (LibVst.IPrefetchableSupport*)Unsafe.AsPointer(ref this);
+ var __evt__ = new ManagedToNativeEvent((IntPtr)__self__, nameof(IPrefetchableSupport), "getPrefetchableSupport");
+ var __result__ = ((delegate*unmanaged[MemberFunction])Vtbl[3])(__self__, prefetchable);
__evt__.Result = __result__;
__evt__.Dispose();
return __result__;
}
else
{
- return ((delegate*unmanaged[MemberFunction])Vtbl[3])((LibVst.IParameterFinder*)Unsafe.AsPointer(ref this), xPos, yPos, resultTag);
+ return ((delegate*unmanaged[MemberFunction])Vtbl[3])((LibVst.IPrefetchableSupport*)Unsafe.AsPointer(ref this), prefetchable);
}
}
@@ -16576,19 +17749,20 @@ public ComResult findParameter(int xPos, int yPos, LibVst.ParamID* resultTag)
// CCW methods
// --------------------------------------------------------------
///
- /// Find out which parameter in plug-in view is at given position (relative to plug-in view).
+ /// retrieve the current prefetch support. Use IComponentHandler::restartComponent
+ /// (kPrefetchableSupportChanged) to inform the host that this support has changed.
///
- private static partial ComResult findParameter_ToManaged(IParameterFinder* self, int xPos, int yPos, LibVst.ParamID* resultTag);
+ private static partial ComResult getPrefetchableSupport_ToManaged(IPrefetchableSupport* self, LibVst.PrefetchableSupport* prefetchable);
[UnmanagedCallersOnly(CallConvs = new Type[] { typeof(CallConvMemberFunction)})]
- private static int findParameter_Wrapper(IParameterFinder* self, int xPos, int yPos, LibVst.ParamID* resultTag)
+ private static int getPrefetchableSupport_Wrapper(IPrefetchableSupport* self, LibVst.PrefetchableSupport* prefetchable)
{
if (InteropHelper.IsTracerEnabled)
{
- var __evt__ = new NativeToManagedEvent((IntPtr)self, nameof(IParameterFinder), "findParameter");
+ var __evt__ = new NativeToManagedEvent((IntPtr)self, nameof(IPrefetchableSupport), "getPrefetchableSupport");
try
{
- return findParameter_ToManaged(self, xPos, yPos, resultTag);
+ return getPrefetchableSupport_ToManaged(self, prefetchable);
}
catch (Exception ex)
{
@@ -16604,7 +17778,7 @@ private static int findParameter_Wrapper(IParameterFinder* self, int xPos, int y
{
try
{
- return findParameter_ToManaged(self, xPos, yPos, resultTag);
+ return getPrefetchableSupport_ToManaged(self, prefetchable);
}
catch (Exception ex)
{
@@ -16614,7 +17788,7 @@ private static int findParameter_Wrapper(IParameterFinder* self, int xPos, int y
}
///
- /// DECLARE_CLASS_IID (IParameterFinder, 0x0F618302, 0x215D4587, 0xA512073C, 0x77B9D383)
+ /// DECLARE_CLASS_IID (IPrefetchableSupport, 0x8AE54FDA, 0xE93046B9, 0xA28555BC, 0xDC98E21E)
///
public static ref readonly Guid IId
{
@@ -16622,40 +17796,34 @@ public static ref readonly Guid IId
get
{
return ref Unsafe.As(ref MemoryMarshal.GetReference((OperatingSystem.IsWindows()
- ? new ReadOnlySpan(new byte[] { 0x02, 0x83, 0x61, 0x0f, 0x5d, 0x21, 0x87, 0x45, 0xa5, 0x12, 0x07, 0x3c, 0x77, 0xb9, 0xd3, 0x83 })
- : new ReadOnlySpan(new byte[] { 0x0f, 0x61, 0x83, 0x02, 0x21, 0x5d, 0x45, 0x87, 0xa5, 0x12, 0x07, 0x3c, 0x77, 0xb9, 0xd3, 0x83 })
+ ? new ReadOnlySpan(new byte[] { 0xda, 0x4f, 0xe5, 0x8a, 0x30, 0xe9, 0xb9, 0x46, 0xa2, 0x85, 0x55, 0xbc, 0xdc, 0x98, 0xe2, 0x1e })
+ : new ReadOnlySpan(new byte[] { 0x8a, 0xe5, 0x4f, 0xda, 0xe9, 0x30, 0x46, 0xb9, 0xa2, 0x85, 0x55, 0xbc, 0xdc, 0x98, 0xe2, 0x1e })
)));
}
}
}
+ public partial record struct PrefetchableSupport(uint Value)
+ {
+ public static implicit operator uint(PrefetchableSupport value) => value.Value;
+
+ public static implicit operator PrefetchableSupport(uint value) => new(value);
+ }
+
///
- /// IPrefetchableSupport Interface
- /// Indicates that the plug-in could or not support Prefetch (dynamically): Vst::IPrefetchableSupport
+ /// Extended IEditController interface for a component.
///
///
- /// vstIPlug vst365- [plug imp]
- /// - [extends IComponent]
- /// - [released: 3.6.5]
- /// - [optional]The plug-in should implement this interface if it needs to dynamically change between prefetchable or not.
- /// By default (without implementing this interface) the host decides in which mode the plug-in is processed.
- /// For more info about the prefetch processing mode check the ProcessModes::kPrefetch documentation. IPrefetchableSupportExample Example@code {.cpp}
- /// //------------------------------------------------------------------------
- /// tresult PLUGIN_API myPlug::getPrefetchableSupport (PrefetchableSupport& prefetchable)
- /// {
- /// prefetchable = kIsNeverPrefetchable;
- ///
- /// switch (myPrefetchableMode)
- /// {
- /// case 0: prefetchable = kIsNeverPrefetchable; break;
- /// case 1: prefetchable = kIsYetPrefetchable; break;
- /// case 2: prefetchable = kIsNotYetPrefetchable; break;
- /// }
- /// return kResultOk;
- /// }
- /// @endcode
+ /// vstIPlug vst3711- [plug imp]
+ /// - [extends IEditController]
+ /// - [released: 3.7.11]
+ /// - [optional]When replacing one plug-in with another, the host can ask the new plug-in for remapping paramIDs to
+ /// new ones.@n
///
- public unsafe partial struct IPrefetchableSupport : INativeGuid, INativeUnknown, INativeVtbl
+ ///
+ ///
+ ///
+ public unsafe partial struct IRemapParamID : INativeGuid, INativeUnknown, INativeVtbl
{
public static Guid* NativeGuid => (Guid*)Unsafe.AsPointer(ref Unsafe.AsRef(in IId));
@@ -16667,7 +17835,7 @@ public unsafe partial struct IPrefetchableSupport : INativeGuid, INativeUnknown,
public static void InitializeVtbl(void** vtbl)
{
FUnknown.InitializeVtbl(vtbl);
- vtbl[3] = (delegate*unmanaged[MemberFunction])&getPrefetchableSupport_Wrapper;
+ vtbl[3] = (delegate*unmanaged[MemberFunction])&getCompatibleParamID_Wrapper;
}
// --------------------------------------------------------------
@@ -16683,7 +17851,7 @@ public static void InitializeVtbl(void** vtbl)
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public ComResult queryInterface(Guid* _iid, void** obj)
{
- return Unsafe.As(ref this).queryInterface(_iid, obj);
+ return Unsafe.As(ref this).queryInterface(_iid, obj);
}
///
@@ -16696,7 +17864,7 @@ public ComResult queryInterface(Guid* _iid, void** obj)
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public uint addRef()
{
- return Unsafe.As(ref this).addRef();
+ return Unsafe.As(ref this).addRef();
}
///
@@ -16706,28 +17874,36 @@ public uint addRef()
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public uint release()
{
- return Unsafe.As(ref this).release();
+ return Unsafe.As(ref this).release();
}
///
- /// retrieve the current prefetch support. Use IComponentHandler::restartComponent
- /// (kPrefetchableSupportChanged) to inform the host that this support has changed.
+ /// Retrieve the appropriate paramID for a specific plug-in UID and paramID (or index for VST 2
+ /// plug-ins).
+ /// The retrieved paramID should match the one it replaces, maintaining the same
+ /// behavior during automation playback. Called in UI-Thread context.
///
+ /// - TUID of plug-in (processor) that will be replaced
+ /// - paramID (or index for VST 2 plug-ins) to be replaced
+ /// - contains the associated paramID to be used
+ /// 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)
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- public ComResult getPrefetchableSupport(LibVst.PrefetchableSupport* prefetchable)
+ public ComResult getCompatibleParamID(Guid* pluginToReplaceUID, LibVst.ParamID oldParamID, LibVst.ParamID* newParamID)
{
if (InteropHelper.IsTracerEnabled)
{
- var __self__ = (LibVst.IPrefetchableSupport*)Unsafe.AsPointer(ref this);
- var __evt__ = new ManagedToNativeEvent((IntPtr)__self__, nameof(IPrefetchableSupport), "getPrefetchableSupport");
- var __result__ = ((delegate*unmanaged[MemberFunction])Vtbl[3])(__self__, prefetchable);
+ var __self__ = (LibVst.IRemapParamID*)Unsafe.AsPointer(ref this);
+ var __evt__ = new ManagedToNativeEvent((IntPtr)__self__, nameof(IRemapParamID), "getCompatibleParamID");
+ var __result__ = ((delegate*unmanaged[MemberFunction])Vtbl[3])(__self__, pluginToReplaceUID, oldParamID, newParamID);
__evt__.Result = __result__;
__evt__.Dispose();
return __result__;
}
else
{
- return ((delegate*unmanaged[MemberFunction])Vtbl[3])((LibVst.IPrefetchableSupport*)Unsafe.AsPointer(ref this), prefetchable);
+ return ((delegate*unmanaged[MemberFunction])Vtbl[3])((LibVst.IRemapParamID*)Unsafe.AsPointer(ref this), pluginToReplaceUID, oldParamID, newParamID);
}
}
@@ -16735,20 +17911,28 @@ public ComResult getPrefetchableSupport(LibVst.PrefetchableSupport* prefetchable
// CCW methods
// --------------------------------------------------------------
///
- /// retrieve the current prefetch support. Use IComponentHandler::restartComponent
- /// (kPrefetchableSupportChanged) to inform the host that this support has changed.
+ /// Retrieve the appropriate paramID for a specific plug-in UID and paramID (or index for VST 2
+ /// plug-ins).
+ /// The retrieved paramID should match the one it replaces, maintaining the same
+ /// behavior during automation playback. Called in UI-Thread context.
///
- private static partial ComResult getPrefetchableSupport_ToManaged(IPrefetchableSupport* self, LibVst.PrefetchableSupport* prefetchable);
+ /// - TUID of plug-in (processor) that will be replaced
+ /// - paramID (or index for VST 2 plug-ins) to be replaced
+ /// - contains the associated paramID to be used
+ /// 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)
+ private static partial ComResult getCompatibleParamID_ToManaged(IRemapParamID* self, Guid* pluginToReplaceUID, LibVst.ParamID oldParamID, LibVst.ParamID* newParamID);
[UnmanagedCallersOnly(CallConvs = new Type[] { typeof(CallConvMemberFunction)})]
- private static int getPrefetchableSupport_Wrapper(IPrefetchableSupport* self, LibVst.PrefetchableSupport* prefetchable)
+ private static int getCompatibleParamID_Wrapper(IRemapParamID* self, Guid* pluginToReplaceUID, uint oldParamID, LibVst.ParamID* newParamID)
{
if (InteropHelper.IsTracerEnabled)
{
- var __evt__ = new NativeToManagedEvent((IntPtr)self, nameof(IPrefetchableSupport), "getPrefetchableSupport");
+ var __evt__ = new NativeToManagedEvent((IntPtr)self, nameof(IRemapParamID), "getCompatibleParamID");
try
{
- return getPrefetchableSupport_ToManaged(self, prefetchable);
+ return getCompatibleParamID_ToManaged(self, pluginToReplaceUID, oldParamID, newParamID);
}
catch (Exception ex)
{
@@ -16764,7 +17948,7 @@ private static int getPrefetchableSupport_Wrapper(IPrefetchableSupport* self, Li
{
try
{
- return getPrefetchableSupport_ToManaged(self, prefetchable);
+ return getCompatibleParamID_ToManaged(self, pluginToReplaceUID, oldParamID, newParamID);
}
catch (Exception ex)
{
@@ -16774,7 +17958,7 @@ private static int getPrefetchableSupport_Wrapper(IPrefetchableSupport* self, Li
}
///
- /// DECLARE_CLASS_IID (IPrefetchableSupport, 0x8AE54FDA, 0xE93046B9, 0xA28555BC, 0xDC98E21E)
+ /// DECLARE_CLASS_IID (IRemapParamID, 0x2B88021E, 0x6286B646, 0xB49DF76A, 0x5663061C)
///
public static ref readonly Guid IId
{
@@ -16782,20 +17966,13 @@ public static ref readonly Guid IId
get
{
return ref Unsafe.As(ref MemoryMarshal.GetReference((OperatingSystem.IsWindows()
- ? new ReadOnlySpan(new byte[] { 0xda, 0x4f, 0xe5, 0x8a, 0x30, 0xe9, 0xb9, 0x46, 0xa2, 0x85, 0x55, 0xbc, 0xdc, 0x98, 0xe2, 0x1e })
- : new ReadOnlySpan(new byte[] { 0x8a, 0xe5, 0x4f, 0xda, 0xe9, 0x30, 0x46, 0xb9, 0xa2, 0x85, 0x55, 0xbc, 0xdc, 0x98, 0xe2, 0x1e })
+ ? new ReadOnlySpan(new byte[] { 0x1e, 0x02, 0x88, 0x2b, 0x86, 0x62, 0x46, 0xb6, 0xb4, 0x9d, 0xf7, 0x6a, 0x56, 0x63, 0x06, 0x1c })
+ : new ReadOnlySpan(new byte[] { 0x2b, 0x88, 0x02, 0x1e, 0x62, 0x86, 0xb6, 0x46, 0xb4, 0x9d, 0xf7, 0x6a, 0x56, 0x63, 0x06, 0x1c })
)));
}
}
}
- public partial record struct PrefetchableSupport(uint Value)
- {
- public static implicit operator uint(PrefetchableSupport value) => value.Value;
-
- public static implicit operator PrefetchableSupport(uint value) => new(value);
- }
-
///
/// Extended plug-in interface IEditController for a component: Vst::IXmlRepresentationController
///
@@ -19604,27 +20781,28 @@ public enum ProcessModes
///
/// Flags used for IComponentHandler::restartComponent
///
- public enum RestartFlags
+ public enum RestartFlags : int
{
///
/// The Component should be reloaded
- /// The host has to unload completely the plug-in (controller/processor) and reload it.
+ /// 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
+ /// 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.
+ /// 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.
+ /// The host invalidates all caches of parameter values and asks the edit controller for the
+ /// current values.
/// [SDK 3.0.0]
///
kParamValuesChanged = 1 << 2,
@@ -19633,14 +20811,15 @@ public enum RestartFlags
/// 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
+ /// 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.
+ /// 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,
@@ -19674,16 +20853,18 @@ public enum RestartFlags
///
/// 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
+ /// 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 ask the plug-in for the new routing with IComponent::getRoutingInfo, @ref vst3Routing see IComponent
+ /// 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,
@@ -19691,17 +20872,31 @@ public enum RestartFlags
///
/// 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.
+ /// 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]
+ ///
+ kParamIDMappingChanged = 1 << 11,
}
///
/// Knob Mode
///
- public enum KnobModes
+ public enum KnobModes
{
///
/// Circular with jump to clicked position
@@ -20567,13 +21762,13 @@ public enum ivstrepresentation
/// @
/// }
///
- public const string SDKVersionString = "VST 3.7.7";
+ public const string SDKVersionString = "VST 3.7.12";
///
/// @
/// }
///
- public static ReadOnlySpan SDKVersionString_u8 => "VST 3.7.7\0"u8;
+ public static ReadOnlySpan SDKVersionString_u8 => "VST 3.7.12\0"u8;
public static partial class SpeakerArr
{
@@ -20610,6 +21805,13 @@ public static partial class SpeakerArr
public static ReadOnlySpan kStringStereo_u8 => "Stereo\0"u8;
}
+ public static partial class SpeakerArr
+ {
+ public const string kStringStereoWide = "Stereo (Lw Rw)";
+
+ public static ReadOnlySpan kStringStereoWide_u8 => "Stereo (Lw Rw)\0"u8;
+ }
+
public static partial class SpeakerArr
{
public const string kStringStereoR = "Stereo (Ls Rs)";
@@ -20808,366 +22010,513 @@ public static partial class SpeakerArr
public static partial class SpeakerArr
{
- public const string kString71CineOld = "7.1 Cine (SDDS)";
+ public const string kString71CineOld = "7.1 Cine (SDDS)";
+
+ public static ReadOnlySpan kString71CineOld_u8 => "7.1 Cine (SDDS)\0"u8;
+ }
+
+ public static partial class SpeakerArr
+ {
+ public const string kString71Music = "7.1";
+
+ public static ReadOnlySpan kString71Music_u8 => "7.1\0"u8;
+ }
+
+ public static partial class SpeakerArr
+ {
+ public const string kString71MusicOld = "7.1 Music (Dolby)";
+
+ public static ReadOnlySpan kString71MusicOld_u8 => "7.1 Music (Dolby)\0"u8;
+ }
+
+ public static partial class SpeakerArr
+ {
+ public const string kString71CineTopCenter = "7.1 Cine Top Center";
+
+ public static ReadOnlySpan kString71CineTopCenter_u8 => "7.1 Cine Top Center\0"u8;
+ }
+
+ public static partial class SpeakerArr
+ {
+ public const string kString71CineCenterHigh = "7.1 Cine Center High";
+
+ public static ReadOnlySpan kString71CineCenterHigh_u8 => "7.1 Cine Center High\0"u8;
+ }
+
+ public static partial class SpeakerArr
+ {
+ public const string kString71CineFullRear = "7.1 Cine Full Rear";
+
+ public static ReadOnlySpan kString71CineFullRear_u8 => "7.1 Cine Full Rear\0"u8;
+ }
+
+ public static partial class SpeakerArr
+ {
+ public const string kString51_2 = "5.1.2";
+
+ public static ReadOnlySpan kString51_2_u8 => "5.1.2\0"u8;
+ }
+
+ public static partial class SpeakerArr
+ {
+ public const string kString50_2 = "5.0.2";
+
+ public static ReadOnlySpan kString50_2_u8 => "5.0.2\0"u8;
+ }
+
+ public static partial class SpeakerArr
+ {
+ public const string kString50_2TopSide = "5.0.2 Top Side";
+
+ public static ReadOnlySpan kString50_2TopSide_u8 => "5.0.2 Top Side\0"u8;
+ }
+
+ public static partial class SpeakerArr
+ {
+ public const string kString51_2TopSide = "5.1.2 Top Side";
+
+ public static ReadOnlySpan kString51_2TopSide_u8 => "5.1.2 Top Side\0"u8;
+ }
+
+ public static partial class SpeakerArr
+ {
+ public const string kString71Proximity = "7.1 Proximity";
+
+ public static ReadOnlySpan kString71Proximity_u8 => "7.1 Proximity\0"u8;
+ }
+
+ public static partial class SpeakerArr
+ {
+ public const string kString80Cine = "8.0 Cine";
+
+ public static ReadOnlySpan kString80Cine_u8 => "8.0 Cine\0"u8;
+ }
+
+ public static partial class SpeakerArr
+ {
+ public const string kString80Music = "8.0 Music";
+
+ public static ReadOnlySpan kString80Music_u8 => "8.0 Music\0"u8;
+ }
+
+ public static partial class SpeakerArr
+ {
+ public const string kString40_4 = "8.0 Cube";
+
+ public static ReadOnlySpan kString40_4_u8 => "8.0 Cube\0"u8;
+ }
+
+ public static partial class SpeakerArr
+ {
+ public const string kString81Cine = "8.1 Cine";
+
+ public static ReadOnlySpan kString81Cine_u8 => "8.1 Cine\0"u8;
+ }
+
+ public static partial class SpeakerArr
+ {
+ public const string kString81Music = "8.1 Music";
+
+ public static ReadOnlySpan kString81Music_u8 => "8.1 Music\0"u8;
+ }
+
+ public static partial class SpeakerArr
+ {
+ public const string kString90Cine = "9.0 Cine";
+
+ public static ReadOnlySpan kString90Cine_u8 => "9.0 Cine\0"u8;
+ }
+
+ public static partial class SpeakerArr
+ {
+ public const string kString91Cine = "9.1 Cine";
+
+ public static ReadOnlySpan kString91Cine_u8 => "9.1 Cine\0"u8;
+ }
+
+ public static partial class SpeakerArr
+ {
+ public const string kString100Cine = "10.0 Cine";
+
+ public static ReadOnlySpan kString100Cine_u8 => "10.0 Cine\0"u8;
+ }
+
+ public static partial class SpeakerArr
+ {
+ public const string kString101Cine = "10.1 Cine";
+
+ public static ReadOnlySpan kString101Cine_u8 => "10.1 Cine\0"u8;
+ }
+
+ public static partial class SpeakerArr
+ {
+ public const string kString52_5 = "5.2.5";
+
+ public static ReadOnlySpan kString52_5_u8 => "5.2.5\0"u8;
+ }
+
+ public static partial class SpeakerArr
+ {
+ public const string kString72_5 = "12.2";
- public static ReadOnlySpan kString71CineOld_u8 => "7.1 Cine (SDDS)\0"u8;
+ public static ReadOnlySpan kString72_5_u8 => "12.2\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString71Music = "7.1";
+ public const string kString50_4 = "5.0.4";
- public static ReadOnlySpan kString71Music_u8 => "7.1\0"u8;
+ public static ReadOnlySpan kString50_4_u8 => "5.0.4\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString71MusicOld = "7.1 Music (Dolby)";
+ public const string kString51_4 = "5.1.4";
- public static ReadOnlySpan kString71MusicOld_u8 => "7.1 Music (Dolby)\0"u8;
+ public static ReadOnlySpan kString51_4_u8 => "5.1.4\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString71CineTopCenter = "7.1 Cine Top Center";
+ public const string kString50_4_1 = "5.0.4.1";
- public static ReadOnlySpan kString71CineTopCenter_u8 => "7.1 Cine Top Center\0"u8;
+ public static ReadOnlySpan kString50_4_1_u8 => "5.0.4.1\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString71CineCenterHigh = "7.1 Cine Center High";
+ public const string kString51_4_1 = "5.1.4.1";
- public static ReadOnlySpan kString71CineCenterHigh_u8 => "7.1 Cine Center High\0"u8;
+ public static ReadOnlySpan kString51_4_1_u8 => "5.1.4.1\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString71CineFrontHigh = "7.1 Cine Front High";
+ public const string kString70_2 = "7.0.2";
- public static ReadOnlySpan kString71CineFrontHigh_u8 => "7.1 Cine Front High\0"u8;
+ public static ReadOnlySpan kString70_2_u8 => "7.0.2\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString70CineFrontHigh = "7.0 Cine Front High";
+ public const string kString71_2 = "7.1.2";
- public static ReadOnlySpan kString70CineFrontHigh_u8 => "7.0 Cine Front High\0"u8;
+ public static ReadOnlySpan kString71_2_u8 => "7.1.2\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString71CineSideHigh = "7.1 Cine Side High";
+ public const string kString70_2_TF = "7.0.2 Top Front";
- public static ReadOnlySpan kString71CineSideHigh_u8 => "7.1 Cine Side High\0"u8;
+ public static ReadOnlySpan kString70_2_TF_u8 => "7.0.2 Top Front\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString71CineFullRear = "7.1 Cine Full Rear";
+ public const string kString71_2_TF = "7.1.2 Top Front";
- public static ReadOnlySpan kString71CineFullRear_u8 => "7.1 Cine Full Rear\0"u8;
+ public static ReadOnlySpan kString71_2_TF_u8 => "7.1.2 Top Front\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString71Proximity = "7.1 Proximity";
+ public const string kString70_3 = "7.0.3";
- public static ReadOnlySpan kString71Proximity_u8 => "7.1 Proximity\0"u8;
+ public static ReadOnlySpan kString70_3_u8 => "7.0.3\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString80Cine = "8.0 Cine";
+ public const string kString72_3 = "7.2.3";
- public static ReadOnlySpan kString80Cine_u8 => "8.0 Cine\0"u8;
+ public static ReadOnlySpan kString72_3_u8 => "7.2.3\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString80Music = "8.0 Music";
+ public const string kString70_4 = "7.0.4";
- public static ReadOnlySpan kString80Music_u8 => "8.0 Music\0"u8;
+ public static ReadOnlySpan kString70_4_u8 => "7.0.4\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString80Cube = "8.0 Cube";
+ public const string kString71_4 = "7.1.4";
- public static ReadOnlySpan kString80Cube_u8 => "8.0 Cube\0"u8;
+ public static ReadOnlySpan kString71_4_u8 => "7.1.4\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString81Cine = "8.1 Cine";
+ public const string kString70_6 = "7.0.6";
- public static ReadOnlySpan kString81Cine_u8 => "8.1 Cine\0"u8;
+ public static ReadOnlySpan kString70_6_u8 => "7.0.6\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString81Music = "8.1 Music";
+ public const string kString71_6 = "7.1.6";
- public static ReadOnlySpan kString81Music_u8 => "8.1 Music\0"u8;
+ public static ReadOnlySpan kString71_6_u8 => "7.1.6\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString90Cine = "9.0 Cine";
+ public const string kString90_4 = "9.0.4 ITU";
- public static ReadOnlySpan kString90Cine_u8 => "9.0 Cine\0"u8;
+ public static ReadOnlySpan kString90_4_u8 => "9.0.4 ITU\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString91Cine = "9.1 Cine";
+ public const string kString91_4 = "9.1.4 ITU";
- public static ReadOnlySpan kString91Cine_u8 => "9.1 Cine\0"u8;
+ public static ReadOnlySpan kString91_4_u8 => "9.1.4 ITU\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString100Cine = "10.0 Cine";
+ public const string kString90_6 = "9.0.6 ITU";
- public static ReadOnlySpan kString100Cine_u8 => "10.0 Cine\0"u8;
+ public static ReadOnlySpan kString90_6_u8 => "9.0.6 ITU\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString101Cine = "10.1 Cine";
+ public const string kString91_6 = "9.1.6 ITU";
- public static ReadOnlySpan kString101Cine_u8 => "10.1 Cine\0"u8;
+ public static ReadOnlySpan kString91_6_u8 => "9.1.6 ITU\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString102 = "10.2 Experimental";
+ public const string kString90_4_W = "9.0.4";
- public static ReadOnlySpan kString102_u8 => "10.2 Experimental\0"u8;
+ public static ReadOnlySpan kString90_4_W_u8 => "9.0.4\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString122 = "12.2";
+ public const string kString91_4_W = "9.1.4";
- public static ReadOnlySpan kString122_u8 => "12.2\0"u8;
+ public static ReadOnlySpan kString91_4_W_u8 => "9.1.4\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString50_4 = "5.0.4";
+ public const string kString90_6_W = "9.0.6";
- public static ReadOnlySpan kString50_4_u8 => "5.0.4\0"u8;
+ public static ReadOnlySpan kString90_6_W_u8 => "9.0.6\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString51_4 = "5.1.4";
+ public const string kString91_6_W = "9.1.6";
- public static ReadOnlySpan kString51_4_u8 => "5.1.4\0"u8;
+ public static ReadOnlySpan kString91_6_W_u8 => "9.1.6\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString50_4_1 = "5.0.4.1";
+ public const string kString50_5 = "10.0 Auro-3D";
- public static ReadOnlySpan kString50_4_1_u8 => "5.0.4.1\0"u8;
+ public static ReadOnlySpan kString50_5_u8 => "10.0 Auro-3D\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString51_4_1 = "5.1.4.1";
+ public const string kString51_5 = "10.1 Auro-3D";
- public static ReadOnlySpan kString51_4_1_u8 => "5.1.4.1\0"u8;
+ public static ReadOnlySpan kString51_5_u8 => "10.1 Auro-3D\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString70_2 = "7.0.2";
+ public const string kString50_6 = "11.0 Auro-3D";
- public static ReadOnlySpan kString70_2_u8 => "7.0.2\0"u8;
+ public static ReadOnlySpan kString50_6_u8 => "11.0 Auro-3D\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString71_2 = "7.1.2";
+ public const string kString51_6 = "11.1 Auro-3D";
- public static ReadOnlySpan kString71_2_u8 => "7.1.2\0"u8;
+ public static ReadOnlySpan kString51_6_u8 => "11.1 Auro-3D\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString70_3 = "7.0.3";
+ public const string kString130 = "13.0 Auro-3D";
- public static ReadOnlySpan kString70_3_u8 => "7.0.3\0"u8;
+ public static ReadOnlySpan kString130_u8 => "13.0 Auro-3D\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString72_3 = "7.2.3";
+ public const string kString131 = "13.1 Auro-3D";
- public static ReadOnlySpan kString72_3_u8 => "7.2.3\0"u8;
+ public static ReadOnlySpan kString131_u8 => "13.1 Auro-3D\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString70_4 = "7.0.4";
+ public const string kString41_4_1 = "8.1 MPEG";
- public static ReadOnlySpan kString70_4_u8 => "7.0.4\0"u8;
+ public static ReadOnlySpan kString41_4_1_u8 => "8.1 MPEG\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString71_4 = "7.1.4";
+ public const string kString60_4_4 = "14.0";
- public static ReadOnlySpan kString71_4_u8 => "7.1.4\0"u8;
+ public static ReadOnlySpan kString60_4_4_u8 => "14.0\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString70_6 = "7.0.6";
+ public const string kString220 = "22.0";
- public static ReadOnlySpan kString70_6_u8 => "7.0.6\0"u8;
+ public static ReadOnlySpan kString220_u8 => "22.0\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString71_6 = "7.1.6";
+ public const string kString222 = "22.2";
- public static ReadOnlySpan kString71_6_u8 => "7.1.6\0"u8;
+ public static ReadOnlySpan kString222_u8 => "22.2\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString90_4 = "9.0.4";
+ public const string kString50_5_3 = "5.0.5.3";
- public static ReadOnlySpan kString90_4_u8 => "9.0.4\0"u8;
+ public static ReadOnlySpan kString50_5_3_u8 => "5.0.5.3\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString91_4 = "9.1.4";
+ public const string kString51_5_3 = "5.1.5.3";
- public static ReadOnlySpan kString91_4_u8 => "9.1.4\0"u8;
+ public static ReadOnlySpan kString51_5_3_u8 => "5.1.5.3\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString90_6 = "9.0.6";
+ public const string kString50_2_2 = "5.0.2.2";
- public static ReadOnlySpan kString90_6_u8 => "9.0.6\0"u8;
+ public static ReadOnlySpan kString50_2_2_u8 => "5.0.2.2\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString91_6 = "9.1.6";
+ public const string kString50_4_2 = "5.0.4.2";
- public static ReadOnlySpan kString91_6_u8 => "9.1.6\0"u8;
+ public static ReadOnlySpan kString50_4_2_u8 => "5.0.4.2\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString100 = "10.0 Auro-3D";
+ public const string kString70_4_2 = "7.0.4.2";
- public static ReadOnlySpan kString100_u8 => "10.0 Auro-3D\0"u8;
+ public static ReadOnlySpan kString70_4_2_u8 => "7.0.4.2\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString101 = "10.1 Auro-3D";
+ public const string kString50_5_Sony = "5.0.5 Sony";
- public static ReadOnlySpan kString101_u8 => "10.1 Auro-3D\0"u8;
+ public static ReadOnlySpan kString50_5_Sony_u8 => "5.0.5 Sony\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString110 = "11.0 Auro-3D";
+ public const string kString40_2_2 = "4.0.3.2";
- public static ReadOnlySpan kString110_u8 => "11.0 Auro-3D\0"u8;
+ public static ReadOnlySpan kString40_2_2_u8 => "4.0.3.2\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString111 = "11.1 Auro-3D";
+ public const string kString40_4_2 = "4.0.4.2";
- public static ReadOnlySpan kString111_u8 => "11.1 Auro-3D\0"u8;
+ public static ReadOnlySpan kString40_4_2_u8 => "4.0.4.2\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString130 = "13.0 Auro-3D";
+ public const string kString50_3_2 = "5.0.3.2";
- public static ReadOnlySpan kString130_u8 => "13.0 Auro-3D\0"u8;
+ public static ReadOnlySpan kString50_3_2_u8 => "5.0.3.2\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString131 = "13.1 Auro-3D";
+ public const string kString30_5_2 = "3.0.5.2";
- public static ReadOnlySpan kString131_u8 => "13.1 Auro-3D\0"u8;
+ public static ReadOnlySpan kString30_5_2_u8 => "3.0.5.2\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString81MPEG = "8.1 MPEG";
+ public const string kString40_4_4 = "4.0.4.4";
- public static ReadOnlySpan kString81MPEG_u8 => "8.1 MPEG\0"u8;
+ public static ReadOnlySpan kString40_4_4_u8 => "4.0.4.4\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString140 = "14.0";
+ public const string kString50_4_4 = "5.0.4.4";
- public static ReadOnlySpan kString140_u8 => "14.0\0"u8;
+ public static ReadOnlySpan kString50_4_4_u8 => "5.0.4.4\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString222 = "22.2";
+ public const string kStringAmbi1stOrder = "1OA";
- public static ReadOnlySpan kString222_u8 => "22.2\0"u8;
+ public static ReadOnlySpan kStringAmbi1stOrder_u8 => "1OA\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString220 = "22.0";
+ public const string kStringAmbi2cdOrder = "2OA";
- public static ReadOnlySpan kString220_u8 => "22.0\0"u8;
+ public static ReadOnlySpan kStringAmbi2cdOrder_u8 => "2OA\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString50_5_3 = "5.0.5.3";
+ public const string kStringAmbi3rdOrder = "3OA";
- public static ReadOnlySpan kString50_5_3_u8 => "5.0.5.3\0"u8;
+ public static ReadOnlySpan kStringAmbi3rdOrder_u8 => "3OA\0"u8;
}
public static partial class SpeakerArr
{
- public const string kString51_5_3 = "5.1.5.3";
+ public const string kStringAmbi4thOrder = "4OA";
- public static ReadOnlySpan kString51_5_3_u8 => "5.1.5.3\0"u8;
+ public static ReadOnlySpan kStringAmbi4thOrder_u8 => "4OA\0"u8;
}
public static partial class SpeakerArr
{
- public const string kStringAmbi1stOrder = "1st Order Ambisonics";
+ public const string kStringAmbi5thOrder = "5OA";
- public static ReadOnlySpan kStringAmbi1stOrder_u8 => "1st Order Ambisonics\0"u8;
+ public static ReadOnlySpan kStringAmbi5thOrder_u8 => "5OA\0"u8;
}
public static partial class SpeakerArr
{
- public const string kStringAmbi2cdOrder = "2nd Order Ambisonics";
+ public const string kStringAmbi6thOrder = "6OA";
- public static ReadOnlySpan kStringAmbi2cdOrder_u8 => "2nd Order Ambisonics\0"u8;
+ public static ReadOnlySpan kStringAmbi6thOrder_u8 => "6OA\0"u8;
}
public static partial class SpeakerArr
{
- public const string kStringAmbi3rdOrder = "3rd Order Ambisonics";
+ public const string kStringAmbi7thOrder = "7OA";
- public static ReadOnlySpan kStringAmbi3rdOrder_u8 => "3rd Order Ambisonics\0"u8;
+ public static ReadOnlySpan kStringAmbi7thOrder_u8 => "7OA\0"u8;
}
public static partial class SpeakerArr
@@ -21198,6 +22547,13 @@ public static partial class SpeakerArr
public static ReadOnlySpan kStringStereoS_u8 => "L R\0"u8;
}
+ public static partial class SpeakerArr
+ {
+ public const string kStringStereoWideS = "Lw Rw";
+
+ public static ReadOnlySpan