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 kStringStereoWideS_u8 => "Lw Rw\0"u8; + } + public static partial class SpeakerArr { public const string kStringStereoRS = "Ls Rs"; @@ -21417,9 +22773,9 @@ public static partial class SpeakerArr public static partial class SpeakerArr { - public const string kString80CubeS = "L R Ls Rs Tfl Tfr Trl Trr"; + public const string kString40_4S = "L R Ls Rs Tfl Tfr Trl Trr"; - public static ReadOnlySpan kString80CubeS_u8 => "L R Ls Rs Tfl Tfr Trl Trr\0"u8; + public static ReadOnlySpan kString40_4S_u8 => "L R Ls Rs Tfl Tfr Trl Trr\0"u8; } public static partial class SpeakerArr @@ -21438,296 +22794,456 @@ public static partial class SpeakerArr public static partial class SpeakerArr { - public const string kString71CineFrontHighS = "L R C LFE Ls Rs Tfl Tfr"; + public const string kString71CineFullRearS = "L R C LFE Ls Rs Lcs Rcs"; - public static ReadOnlySpan kString71CineFrontHighS_u8 => "L R C LFE Ls Rs Tfl Tfr\0"u8; + public static ReadOnlySpan kString71CineFullRearS_u8 => "L R C LFE Ls Rs Lcs Rcs\0"u8; } public static partial class SpeakerArr { - public const string kString70CineFrontHighS = "L R C Ls Rs Tfl Tfr"; + public const string kString50_2S = "L R C Ls Rs Tfl Tfr"; - public static ReadOnlySpan kString70CineFrontHighS_u8 => "L R C Ls Rs Tfl Tfr\0"u8; + public static ReadOnlySpan kString50_2S_u8 => "L R C Ls Rs Tfl Tfr\0"u8; } public static partial class SpeakerArr { - public const string kString71CineSideHighS = "L R C LFE Ls Rs Tsl Tsr"; + public const string kString51_2S = "L R C LFE Ls Rs Tfl Tfr"; - public static ReadOnlySpan kString71CineSideHighS_u8 => "L R C LFE Ls Rs Tsl Tsr\0"u8; + public static ReadOnlySpan kString51_2S_u8 => "L R C LFE Ls Rs Tfl Tfr\0"u8; } public static partial class SpeakerArr { - public const string kString71CineFullRearS = "L R C LFE Ls Rs Lcs Rcs"; + public const string kString50_2TopSideS = "L R C Ls Rs Tsl Tsr"; + + public static ReadOnlySpan kString50_2TopSideS_u8 => "L R C Ls Rs Tsl Tsr\0"u8; + } + + public static partial class SpeakerArr + { + public const string kString51_2TopSideS = "L R C LFE Ls Rs Tsl Tsr"; + + public static ReadOnlySpan kString51_2TopSideS_u8 => "L R C LFE Ls Rs Tsl Tsr\0"u8; + } + + public static partial class SpeakerArr + { + public const string kString71ProximityS = "L R C LFE Ls Rs Pl Pr"; + + public static ReadOnlySpan kString71ProximityS_u8 => "L R C LFE Ls Rs Pl Pr\0"u8; + } + + public static partial class SpeakerArr + { + public const string kString90CineS = "L R C Ls Rs Lc Rc Sl Sr"; + + public static ReadOnlySpan kString90CineS_u8 => "L R C Ls Rs Lc Rc Sl Sr\0"u8; + } + + public static partial class SpeakerArr + { + public const string kString91CineS = "L R C LFE Ls Rs Lc Rc Sl Sr"; + + public static ReadOnlySpan kString91CineS_u8 => "L R C LFE Ls Rs Lc Rc Sl Sr\0"u8; + } + + public static partial class SpeakerArr + { + public const string kString100CineS = "L R C Ls Rs Lc Rc Cs Sl Sr"; + + public static ReadOnlySpan kString100CineS_u8 => "L R C Ls Rs Lc Rc Cs Sl Sr\0"u8; + } + + public static partial class SpeakerArr + { + public const string kString101CineS = "L R C LFE Ls Rs Lc Rc Cs Sl Sr"; + + public static ReadOnlySpan kString101CineS_u8 => "L R C LFE Ls Rs Lc Rc Cs Sl Sr\0"u8; + } + + public static partial class SpeakerArr + { + public const string kString50_4S = "L R C Ls Rs Tfl Tfr Trl Trr"; + + public static ReadOnlySpan kString50_4S_u8 => "L R C Ls Rs Tfl Tfr Trl Trr\0"u8; + } + + public static partial class SpeakerArr + { + public const string kString51_4S = "L R C LFE Ls Rs Tfl Tfr Trl Trr"; + + public static ReadOnlySpan kString51_4S_u8 => "L R C LFE Ls Rs Tfl Tfr Trl Trr\0"u8; + } + + public static partial class SpeakerArr + { + public const string kString50_4_1S = "L R C Ls Rs Tfl Tfr Trl Trr Bfc"; + + public static ReadOnlySpan kString50_4_1S_u8 => "L R C Ls Rs Tfl Tfr Trl Trr Bfc\0"u8; + } + + public static partial class SpeakerArr + { + public const string kString51_4_1S = "L R C LFE Ls Rs Tfl Tfr Trl Trr Bfc"; + + public static ReadOnlySpan kString51_4_1S_u8 => "L R C LFE Ls Rs Tfl Tfr Trl Trr Bfc\0"u8; + } + + public static partial class SpeakerArr + { + public const string kString70_2S = "L R C Ls Rs Sl Sr Tsl Tsr"; + + public static ReadOnlySpan kString70_2S_u8 => "L R C Ls Rs Sl Sr Tsl Tsr\0"u8; + } + + public static partial class SpeakerArr + { + public const string kString71_2S = "L R C LFE Ls Rs Sl Sr Tsl Tsr"; + + public static ReadOnlySpan kString71_2S_u8 => "L R C LFE Ls Rs Sl Sr Tsl Tsr\0"u8; + } + + public static partial class SpeakerArr + { + public const string kString70_2_TFS = "L R C Ls Rs Sl Sr Tfl Tfr"; + + public static ReadOnlySpan kString70_2_TFS_u8 => "L R C Ls Rs Sl Sr Tfl Tfr\0"u8; + } + + public static partial class SpeakerArr + { + public const string kString71_2_TFS = "L R C LFE Ls Rs Sl Sr Tfl Tfr"; + + public static ReadOnlySpan kString71_2_TFS_u8 => "L R C LFE Ls Rs Sl Sr Tfl Tfr\0"u8; + } + + public static partial class SpeakerArr + { + public const string kString70_3S = "L R C Ls Rs Sl Sr Tfl Tfr Trc"; + + public static ReadOnlySpan kString70_3S_u8 => "L R C Ls Rs Sl Sr Tfl Tfr Trc\0"u8; + } + + public static partial class SpeakerArr + { + public const string kString72_3S = "L R C LFE Ls Rs Sl Sr Tfl Tfr Trc LFE2"; + + public static ReadOnlySpan kString72_3S_u8 => "L R C LFE Ls Rs Sl Sr Tfl Tfr Trc LFE2\0"u8; + } + + public static partial class SpeakerArr + { + public const string kString70_4S = "L R C Ls Rs Sl Sr Tfl Tfr Trl Trr"; + + public static ReadOnlySpan kString70_4S_u8 => "L R C Ls Rs Sl Sr Tfl Tfr Trl Trr\0"u8; + } + + public static partial class SpeakerArr + { + public const string kString71_4S = "L R C LFE Ls Rs Sl Sr Tfl Tfr Trl Trr"; + + public static ReadOnlySpan kString71_4S_u8 => "L R C LFE Ls Rs Sl Sr Tfl Tfr Trl Trr\0"u8; + } + + public static partial class SpeakerArr + { + public const string kString70_6S = "L R C Ls Rs Sl Sr Tfl Tfr Trl Trr Tsl Tsr"; + + public static ReadOnlySpan kString70_6S_u8 => "L R C Ls Rs Sl Sr Tfl Tfr Trl Trr Tsl Tsr\0"u8; + } + + public static partial class SpeakerArr + { + public const string kString71_6S = "L R C LFE Ls Rs Sl Sr Tfl Tfr Trl Trr Tsl Tsr"; + + public static ReadOnlySpan kString71_6S_u8 => "L R C LFE Ls Rs Sl Sr Tfl Tfr Trl Trr Tsl Tsr\0"u8; + } + + public static partial class SpeakerArr + { + public const string kString90_4S = "L R C Ls Rs Lc Rc Sl Sr Tfl Tfr Trl Trr"; + + public static ReadOnlySpan kString90_4S_u8 => "L R C Ls Rs Lc Rc Sl Sr Tfl Tfr Trl Trr\0"u8; + } + + public static partial class SpeakerArr + { + public const string kString91_4S = "L R C LFE Ls Rs Lc Rc Sl Sr Tfl Tfr Trl Trr"; - public static ReadOnlySpan kString71CineFullRearS_u8 => "L R C LFE Ls Rs Lcs Rcs\0"u8; + public static ReadOnlySpan kString91_4S_u8 => "L R C LFE Ls Rs Lc Rc Sl Sr Tfl Tfr Trl Trr\0"u8; } public static partial class SpeakerArr { - public const string kString71ProximityS = "L R C LFE Ls Rs Pl Pr"; + public const string kString90_6S = "L R C Ls Rs Lc Rc Sl Sr Tfl Tfr Trl Trr Tsl Tsr"; - public static ReadOnlySpan kString71ProximityS_u8 => "L R C LFE Ls Rs Pl Pr\0"u8; + public static ReadOnlySpan kString90_6S_u8 => "L R C Ls Rs Lc Rc Sl Sr Tfl Tfr Trl Trr Tsl Tsr\0"u8; } public static partial class SpeakerArr { - public const string kString90CineS = "L R C Ls Rs Lc Rc Sl Sr"; + public const string kString91_6S = "L R C LFE Ls Rs Lc Rc Sl Sr Tfl Tfr Trl Trr Tsl Tsr"; - public static ReadOnlySpan kString90CineS_u8 => "L R C Ls Rs Lc Rc Sl Sr\0"u8; + public static ReadOnlySpan kString91_6S_u8 => "L R C LFE Ls Rs Lc Rc Sl Sr Tfl Tfr Trl Trr Tsl Tsr\0"u8; } public static partial class SpeakerArr { - public const string kString91CineS = "L R C LFE Ls Rs Lc Rc Sl Sr"; + public const string kString90_4_WS = "L R C Ls Rs Sl Sr Tfl Tfr Trl Trr Lw Rw"; - public static ReadOnlySpan kString91CineS_u8 => "L R C LFE Ls Rs Lc Rc Sl Sr\0"u8; + public static ReadOnlySpan kString90_4_WS_u8 => "L R C Ls Rs Sl Sr Tfl Tfr Trl Trr Lw Rw\0"u8; } public static partial class SpeakerArr { - public const string kString100CineS = "L R C Ls Rs Lc Rc Cs Sl Sr"; + public const string kString91_4_WS = "L R C LFE Ls Rs Sl Sr Tfl Tfr Trl Trr Lw Rw"; - public static ReadOnlySpan kString100CineS_u8 => "L R C Ls Rs Lc Rc Cs Sl Sr\0"u8; + public static ReadOnlySpan kString91_4_WS_u8 => "L R C LFE Ls Rs Sl Sr Tfl Tfr Trl Trr Lw Rw\0"u8; } public static partial class SpeakerArr { - public const string kString101CineS = "L R C LFE Ls Rs Lc Rc Cs Sl Sr"; + public const string kString90_6_WS = "L R C Ls Rs Sl Sr Tfl Tfr Trl Trr Tsl Tsr Lw Rw"; - public static ReadOnlySpan kString101CineS_u8 => "L R C LFE Ls Rs Lc Rc Cs Sl Sr\0"u8; + public static ReadOnlySpan kString90_6_WS_u8 => "L R C Ls Rs Sl Sr Tfl Tfr Trl Trr Tsl Tsr Lw Rw\0"u8; } public static partial class SpeakerArr { - public const string kString50_4S = "L R C Ls Rs Tfl Tfr Trl Trr"; + public const string kString91_6_WS = "L R C LFE Ls Rs Sl Sr Tfl Tfr Trl Trr Tsl Tsr Lw Rw"; - public static ReadOnlySpan kString50_4S_u8 => "L R C Ls Rs Tfl Tfr Trl Trr\0"u8; + public static ReadOnlySpan kString91_6_WS_u8 => "L R C LFE Ls Rs Sl Sr Tfl Tfr Trl Trr Tsl Tsr Lw Rw\0"u8; } public static partial class SpeakerArr { - public const string kString51_4S = "L R C LFE Ls Rs Tfl Tfr Trl Trr"; + public const string kString50_5S = "L R C Ls Rs Tc Tfl Tfr Trl Trr"; - public static ReadOnlySpan kString51_4S_u8 => "L R C LFE Ls Rs Tfl Tfr Trl Trr\0"u8; + public static ReadOnlySpan kString50_5S_u8 => "L R C Ls Rs Tc Tfl Tfr Trl Trr\0"u8; } public static partial class SpeakerArr { - public const string kString50_4_1S = "L R C Ls Rs Tfl Tfr Trl Trr Bfc"; + public const string kString51_5S = "L R C LFE Ls Rs Tc Tfl Tfr Trl Trr"; - public static ReadOnlySpan kString50_4_1S_u8 => "L R C Ls Rs Tfl Tfr Trl Trr Bfc\0"u8; + public static ReadOnlySpan kString51_5S_u8 => "L R C LFE Ls Rs Tc Tfl Tfr Trl Trr\0"u8; } public static partial class SpeakerArr { - public const string kString51_4_1S = "L R C LFE Ls Rs Tfl Tfr Trl Trr Bfc"; + public const string kString50_5_SonyS = "L R C Ls Rs Tfl Tfc Tfr Trl Trr"; - public static ReadOnlySpan kString51_4_1S_u8 => "L R C LFE Ls Rs Tfl Tfr Trl Trr Bfc\0"u8; + public static ReadOnlySpan kString50_5_SonyS_u8 => "L R C Ls Rs Tfl Tfc Tfr Trl Trr\0"u8; } public static partial class SpeakerArr { - public const string kString70_2S = "L R C Ls Rs Sl Sr Tsl Tsr"; + public const string kString50_6S = "L R C Ls Rs Tc Tfl Tfc Tfr Trl Trr"; - public static ReadOnlySpan kString70_2S_u8 => "L R C Ls Rs Sl Sr Tsl Tsr\0"u8; + public static ReadOnlySpan kString50_6S_u8 => "L R C Ls Rs Tc Tfl Tfc Tfr Trl Trr\0"u8; } public static partial class SpeakerArr { - public const string kString71_2S = "L R C LFE Ls Rs Sl Sr Tsl Tsr"; + public const string kString51_6S = "L R C LFE Ls Rs Tc Tfl Tfc Tfr Trl Trr"; - public static ReadOnlySpan kString71_2S_u8 => "L R C LFE Ls Rs Sl Sr Tsl Tsr\0"u8; + public static ReadOnlySpan kString51_6S_u8 => "L R C LFE Ls Rs Tc Tfl Tfc Tfr Trl Trr\0"u8; } public static partial class SpeakerArr { - public const string kString70_3S = "L R C Ls Rs Sl Sr Tfl Tfr Trc"; + public const string kString130S = "L R C Ls Rs Sl Sr Tc Tfl Tfc Tfr Trl Trr"; - public static ReadOnlySpan kString70_3S_u8 => "L R C Ls Rs Sl Sr Tfl Tfr Trc\0"u8; + public static ReadOnlySpan kString130S_u8 => "L R C Ls Rs Sl Sr Tc Tfl Tfc Tfr Trl Trr\0"u8; } public static partial class SpeakerArr { - public const string kString72_3S = "L R C LFE Ls Rs Sl Sr Tfl Tfr Trc LFE2"; + public const string kString131S = "L R C LFE Ls Rs Sl Sr Tc Tfl Tfc Tfr Trl Trr"; - public static ReadOnlySpan kString72_3S_u8 => "L R C LFE Ls Rs Sl Sr Tfl Tfr Trc LFE2\0"u8; + public static ReadOnlySpan kString131S_u8 => "L R C LFE Ls Rs Sl Sr Tc Tfl Tfc Tfr Trl Trr\0"u8; } public static partial class SpeakerArr { - public const string kString70_4S = "L R C Ls Rs Sl Sr Tfl Tfr Trl Trr"; + public const string kString52_5S = "L R C LFE Ls Rs Tfl Tfc Tfr Trl Trr LFE2"; - public static ReadOnlySpan kString70_4S_u8 => "L R C Ls Rs Sl Sr Tfl Tfr Trl Trr\0"u8; + public static ReadOnlySpan kString52_5S_u8 => "L R C LFE Ls Rs Tfl Tfc Tfr Trl Trr LFE2\0"u8; } public static partial class SpeakerArr { - public const string kString71_4S = "L R C LFE Ls Rs Sl Sr Tfl Tfr Trl Trr"; + public const string kString72_5S = "L R C LFE Ls Rs Lc Rc Tfl Tfc Tfr Trl Trr LFE2"; - public static ReadOnlySpan kString71_4S_u8 => "L R C LFE Ls Rs Sl Sr Tfl Tfr Trl Trr\0"u8; + public static ReadOnlySpan kString72_5S_u8 => "L R C LFE Ls Rs Lc Rc Tfl Tfc Tfr Trl Trr LFE2\0"u8; } public static partial class SpeakerArr { - public const string kString70_6S = "L R C Ls Rs Sl Sr Tfl Tfr Trl Trr Tsl Tsr"; + public const string kString41_4_1S = "L R LFE Ls Rs Tfl Tfc Tfr Bfc"; - public static ReadOnlySpan kString70_6S_u8 => "L R C Ls Rs Sl Sr Tfl Tfr Trl Trr Tsl Tsr\0"u8; + public static ReadOnlySpan kString41_4_1S_u8 => "L R LFE Ls Rs Tfl Tfc Tfr Bfc\0"u8; } public static partial class SpeakerArr { - public const string kString71_6S = "L R C LFE Ls Rs Sl Sr Tfl Tfr Trl Trr Tsl Tsr"; + public const string kString30_5_2S = "L R C Tfl Tfc Tfr Trl Trr Bfl Bfr"; - public static ReadOnlySpan kString71_6S_u8 => "L R C LFE Ls Rs Sl Sr Tfl Tfr Trl Trr Tsl Tsr\0"u8; + public static ReadOnlySpan kString30_5_2S_u8 => "L R C Tfl Tfc Tfr Trl Trr Bfl Bfr\0"u8; } public static partial class SpeakerArr { - public const string kString90_4S = "L R C Ls Rs Lc Rc Sl Sr Tfl Tfr Trl Trr"; + public const string kString40_2_2S = "C Sl Sr Cs Tfc Tsl Tsr Trc"; - public static ReadOnlySpan kString90_4S_u8 => "L R C Ls Rs Lc Rc Sl Sr Tfl Tfr Trl Trr\0"u8; + public static ReadOnlySpan kString40_2_2S_u8 => "C Sl Sr Cs Tfc Tsl Tsr Trc\0"u8; } public static partial class SpeakerArr { - public const string kString91_4S = "L R C LFE Ls Rs Lc Rc Sl Sr Tfl Tfr Trl Trr"; + public const string kString40_4_2S = "L R Ls Rs Tfl Tfr Trl Trr Bfl Bfr"; - public static ReadOnlySpan kString91_4S_u8 => "L R C LFE Ls Rs Lc Rc Sl Sr Tfl Tfr Trl Trr\0"u8; + public static ReadOnlySpan kString40_4_2S_u8 => "L R Ls Rs Tfl Tfr Trl Trr Bfl Bfr\0"u8; } public static partial class SpeakerArr { - public const string kString90_6S = "L R C Ls Rs Lc Rc Sl Sr Tfl Tfr Trl Trr Tsl Tsr"; + public const string kString40_4_4S = "L R Ls Rs Tfl Tfr Trl Trr Bfl Bfr Brl Brr"; - public static ReadOnlySpan kString90_6S_u8 => "L R C Ls Rs Lc Rc Sl Sr Tfl Tfr Trl Trr Tsl Tsr\0"u8; + public static ReadOnlySpan kString40_4_4S_u8 => "L R Ls Rs Tfl Tfr Trl Trr Bfl Bfr Brl Brr\0"u8; } public static partial class SpeakerArr { - public const string kString91_6S = "L R C LFE Ls Rs Lc Rc Sl Sr Tfl Tfr Trl Trr Tsl Tsr"; + public const string kString50_4_4S = "L R C Ls Rs Tfl Tfr Trl Trr Bfl Bfr Brl Brr"; - public static ReadOnlySpan kString91_6S_u8 => "L R C LFE Ls Rs Lc Rc Sl Sr Tfl Tfr Trl Trr Tsl Tsr\0"u8; + public static ReadOnlySpan kString50_4_4S_u8 => "L R C Ls Rs Tfl Tfr Trl Trr Bfl Bfr Brl Brr\0"u8; } public static partial class SpeakerArr { - public const string kString100S = "L R C Ls Rs Tc Tfl Tfr Trl Trr"; + public const string kString60_4_4S = "L R Ls Rs Sl Sr Tfl Tfr Trl Trr Bfl Bfr Brl Brr"; - public static ReadOnlySpan kString100S_u8 => "L R C Ls Rs Tc Tfl Tfr Trl Trr\0"u8; + public static ReadOnlySpan kString60_4_4S_u8 => "L R Ls Rs Sl Sr Tfl Tfr Trl Trr Bfl Bfr Brl Brr\0"u8; } public static partial class SpeakerArr { - public const string kString101S = "L R C LFE Ls Rs Tc Tfl Tfr Trl Trr"; + public const string kString50_5_3S = "L R C Ls Rs Tfl Tfc Tfr Trl Trr Bfl Bfc Bfr"; - public static ReadOnlySpan kString101S_u8 => "L R C LFE Ls Rs Tc Tfl Tfr Trl Trr\0"u8; + public static ReadOnlySpan kString50_5_3S_u8 => "L R C Ls Rs Tfl Tfc Tfr Trl Trr Bfl Bfc Bfr\0"u8; } public static partial class SpeakerArr { - public const string kString110S = "L R C Ls Rs Tc Tfl Tfc Tfr Trl Trr"; + public const string kString51_5_3S = "L R C LFE Ls Rs Tfl Tfc Tfr Trl Trr Bfl Bfc Bfr"; - public static ReadOnlySpan kString110S_u8 => "L R C Ls Rs Tc Tfl Tfc Tfr Trl Trr\0"u8; + public static ReadOnlySpan kString51_5_3S_u8 => "L R C LFE Ls Rs Tfl Tfc Tfr Trl Trr Bfl Bfc Bfr\0"u8; } public static partial class SpeakerArr { - public const string kString111S = "L R C LFE Ls Rs Tc Tfl Tfc Tfr Trl Trr"; + public const string kString50_2_2S = "L R C Ls Rs Tsl Tsr Bfl Bfr"; - public static ReadOnlySpan kString111S_u8 => "L R C LFE Ls Rs Tc Tfl Tfc Tfr Trl Trr\0"u8; + public static ReadOnlySpan kString50_2_2S_u8 => "L R C Ls Rs Tsl Tsr Bfl Bfr\0"u8; } public static partial class SpeakerArr { - public const string kString130S = "L R C Ls Rs Sl Sr Tc Tfl Tfc Tfr Trl Trr"; + public const string kString50_3_2S = "L R C Ls Rs Tfl Tfc Tfr Bfl Bfr"; - public static ReadOnlySpan kString130S_u8 => "L R C Ls Rs Sl Sr Tc Tfl Tfc Tfr Trl Trr\0"u8; + public static ReadOnlySpan kString50_3_2S_u8 => "L R C Ls Rs Tfl Tfc Tfr Bfl Bfr\0"u8; } public static partial class SpeakerArr { - public const string kString131S = "L R C LFE Ls Rs Sl Sr Tc Tfl Tfc Tfr Trl Trr"; + public const string kString50_4_2S = "L R C Ls Rs Tfl Tfr Trl Trr Bfl Bfr"; - public static ReadOnlySpan kString131S_u8 => "L R C LFE Ls Rs Sl Sr Tc Tfl Tfc Tfr Trl Trr\0"u8; + public static ReadOnlySpan kString50_4_2S_u8 => "L R C Ls Rs Tfl Tfr Trl Trr Bfl Bfr\0"u8; } public static partial class SpeakerArr { - public const string kString102S = "L R C LFE Ls Rs Tfl Tfc Tfr Trl Trr LFE2"; + public const string kString70_4_2S = "L R C Ls Rs Sl Sr Tfl Tfr Trl Trr Bfl Bfr"; - public static ReadOnlySpan kString102S_u8 => "L R C LFE Ls Rs Tfl Tfc Tfr Trl Trr LFE2\0"u8; + public static ReadOnlySpan kString70_4_2S_u8 => "L R C Ls Rs Sl Sr Tfl Tfr Trl Trr Bfl Bfr\0"u8; } public static partial class SpeakerArr { - public const string kString122S = "L R C LFE Ls Rs Lc Rc Tfl Tfc Tfr Trl Trr LFE2"; + public const string kString222S = "L R C LFE Ls Rs Lc Rc Cs Sl Sr Tc Tfl Tfc Tfr Trl Trc Trr LFE2 Tsl Tsr Bfl Bfc Bfr"; - public static ReadOnlySpan kString122S_u8 => "L R C LFE Ls Rs Lc Rc Tfl Tfc Tfr Trl Trr LFE2\0"u8; + public static ReadOnlySpan kString222S_u8 => "L R C LFE Ls Rs Lc Rc Cs Sl Sr Tc Tfl Tfc Tfr Trl Trc Trr LFE2 Tsl Tsr Bfl Bfc Bfr\0"u8; } public static partial class SpeakerArr { - public const string kString81MPEGS = "L R LFE Ls Rs Tfl Tfc Tfr Bfc"; + public const string kString220S = "L R C Ls Rs Lc Rc Cs Sl Sr Tc Tfl Tfc Tfr Trl Trc Trr Tsl Tsr Bfl Bfc Bfr"; - public static ReadOnlySpan kString81MPEGS_u8 => "L R LFE Ls Rs Tfl Tfc Tfr Bfc\0"u8; + public static ReadOnlySpan kString220S_u8 => "L R C Ls Rs Lc Rc Cs Sl Sr Tc Tfl Tfc Tfr Trl Trc Trr Tsl Tsr Bfl Bfc Bfr\0"u8; } public static partial class SpeakerArr { - public const string kString140S = "L R Ls Rs Sl Sr Tfl Tfr Trl Trr Bfl Bfr Brl Brr"; + public const string kStringAmbi1stOrderS = "0 1 2 3"; - public static ReadOnlySpan kString140S_u8 => "L R Ls Rs Sl Sr Tfl Tfr Trl Trr Bfl Bfr Brl Brr\0"u8; + public static ReadOnlySpan kStringAmbi1stOrderS_u8 => "0 1 2 3\0"u8; } public static partial class SpeakerArr { - public const string kString222S = "L R C LFE Ls Rs Lc Rc Cs Sl Sr Tc Tfl Tfc Tfr Trl Trc Trr LFE2 Tsl Tsr Bfl Bfc Bfr"; + public const string kStringAmbi2cdOrderS = "0 1 2 3 4 5 6 7 8"; - public static ReadOnlySpan kString222S_u8 => "L R C LFE Ls Rs Lc Rc Cs Sl Sr Tc Tfl Tfc Tfr Trl Trc Trr LFE2 Tsl Tsr Bfl Bfc Bfr\0"u8; + public static ReadOnlySpan kStringAmbi2cdOrderS_u8 => "0 1 2 3 4 5 6 7 8\0"u8; } public static partial class SpeakerArr { - public const string kString220S = "L R C Ls Rs Lc Rc Cs Sl Sr Tc Tfl Tfc Tfr Trl Trc Trr Tsl Tsr Bfl Bfc Bfr"; + public const string kStringAmbi3rdOrderS = "0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15"; - public static ReadOnlySpan kString220S_u8 => "L R C Ls Rs Lc Rc Cs Sl Sr Tc Tfl Tfc Tfr Trl Trc Trr Tsl Tsr Bfl Bfc Bfr\0"u8; + public static ReadOnlySpan kStringAmbi3rdOrderS_u8 => "0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15\0"u8; } public static partial class SpeakerArr { - public const string kString50_5_3S = "L R C Ls Rs Tfl Tfc Tfr Trl Trr Bfl Bfc Bfr"; + public const string kStringAmbi4thOrderS = "0..24"; - public static ReadOnlySpan kString50_5_3S_u8 => "L R C Ls Rs Tfl Tfc Tfr Trl Trr Bfl Bfc Bfr\0"u8; + public static ReadOnlySpan kStringAmbi4thOrderS_u8 => "0..24\0"u8; } public static partial class SpeakerArr { - public const string kString51_5_3S = "L R C LFE Ls Rs Tfl Tfc Tfr Trl Trr Bfl Bfc Bfr"; + public const string kStringAmbi5thOrderS = "0..35"; - public static ReadOnlySpan kString51_5_3S_u8 => "L R C LFE Ls Rs Tfl Tfc Tfr Trl Trr Bfl Bfc Bfr\0"u8; + public static ReadOnlySpan kStringAmbi5thOrderS_u8 => "0..35\0"u8; } public static partial class SpeakerArr { - public const string kStringAmbi1stOrderS = "0 1 2 3"; + public const string kStringAmbi6thOrderS = "0..48"; - public static ReadOnlySpan kStringAmbi1stOrderS_u8 => "0 1 2 3\0"u8; + public static ReadOnlySpan kStringAmbi6thOrderS_u8 => "0..48\0"u8; } public static partial class SpeakerArr { - public const string kStringAmbi2cdOrderS = "0 1 2 3 4 5 6 7 8"; + public const string kStringAmbi7thOrderS = "0..63"; - public static ReadOnlySpan kStringAmbi2cdOrderS_u8 => "0 1 2 3 4 5 6 7 8\0"u8; + public static ReadOnlySpan kStringAmbi7thOrderS_u8 => "0..63\0"u8; } - public static partial class SpeakerArr + public static partial class PlugType { - public const string kStringAmbi3rdOrderS = "0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15"; + /// + /// others type (not categorized) + /// + public const string kFx = "Fx"; - public static ReadOnlySpan kStringAmbi3rdOrderS_u8 => "0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15\0"u8; + /// + /// others type (not categorized) + /// + public static ReadOnlySpan kFx_u8 => "Fx\0"u8; } public static partial class PlugType @@ -21743,6 +23259,32 @@ public static partial class PlugType public static ReadOnlySpan kFxAnalyzer_u8 => "Fx|Analyzer\0"u8; } + public static partial class PlugType + { + /// + /// Tools dedicated to Bass Guitar + /// + public const string kFxBass = "Fx|Bass"; + + /// + /// Tools dedicated to Bass Guitar + /// + public static ReadOnlySpan kFxBass_u8 => "Fx|Bass\0"u8; + } + + public static partial class PlugType + { + /// + /// Tools dedicated to Channel Strip + /// + public const string kFxChannelStrip = "Fx|Channel Strip"; + + /// + /// Tools dedicated to Channel Strip + /// + public static ReadOnlySpan kFxChannelStrip_u8 => "Fx|Channel Strip\0"u8; + } + public static partial class PlugType { /// @@ -21769,6 +23311,19 @@ public static partial class PlugType public static ReadOnlySpan kFxDistortion_u8 => "Fx|Distortion\0"u8; } + public static partial class PlugType + { + /// + /// Tools dedicated to Drums... + /// + public const string kFxDrums = "Fx|Drums"; + + /// + /// Tools dedicated to Drums... + /// + public static ReadOnlySpan kFxDrums_u8 => "Fx|Drums\0"u8; + } + public static partial class PlugType { /// @@ -21811,14 +23366,27 @@ public static partial class PlugType public static partial class PlugType { /// - /// others type (not categorized) + /// Tone Generator, Noise Generator... /// - public const string kFx = "Fx"; + public const string kFxGenerator = "Fx|Generator"; /// - /// others type (not categorized) + /// Tone Generator, Noise Generator... /// - public static ReadOnlySpan kFx_u8 => "Fx\0"u8; + public static ReadOnlySpan kFxGenerator_u8 => "Fx|Generator\0"u8; + } + + public static partial class PlugType + { + /// + /// Tools dedicated to Guitar + /// + public const string kFxGuitar = "Fx|Guitar"; + + /// + /// Tools dedicated to Guitar + /// + public static ReadOnlySpan kFxGuitar_u8 => "Fx|Guitar\0"u8; } public static partial class PlugType @@ -21850,53 +23418,53 @@ public static partial class PlugType public static partial class PlugType { /// - /// MonoToStereo, StereoEnhancer,... + /// Dither, Noise Shaping,... /// - public const string kFxSpatial = "Fx|Spatial"; + public const string kFxMastering = "Fx|Mastering"; /// - /// MonoToStereo, StereoEnhancer,... + /// Dither, Noise Shaping,... /// - public static ReadOnlySpan kFxSpatial_u8 => "Fx|Spatial\0"u8; + public static ReadOnlySpan kFxMastering_u8 => "Fx|Mastering\0"u8; } public static partial class PlugType { /// - /// Tone Generator, Noise Generator... + /// Tools dedicated to Microphone /// - public const string kFxGenerator = "Fx|Generator"; + public const string kFxMicrophone = "Fx|Microphone"; /// - /// Tone Generator, Noise Generator... + /// Tools dedicated to Microphone /// - public static ReadOnlySpan kFxGenerator_u8 => "Fx|Generator\0"u8; + public static ReadOnlySpan kFxMicrophone_u8 => "Fx|Microphone\0"u8; } public static partial class PlugType { /// - /// Dither, Noise Shaping,... + /// Phaser, Flanger, Chorus, Tremolo, Vibrato, AutoPan, Rotary, Cloner... /// - public const string kFxMastering = "Fx|Mastering"; + public const string kFxModulation = "Fx|Modulation"; /// - /// Dither, Noise Shaping,... + /// Phaser, Flanger, Chorus, Tremolo, Vibrato, AutoPan, Rotary, Cloner... /// - public static ReadOnlySpan kFxMastering_u8 => "Fx|Mastering\0"u8; + public static ReadOnlySpan kFxModulation_u8 => "Fx|Modulation\0"u8; } public static partial class PlugType { /// - /// Phaser, Flanger, Chorus, Tremolo, Vibrato, AutoPan, Rotary, Cloner... + /// using Network /// - public const string kFxModulation = "Fx|Modulation"; + public const string kFxNetwork = "Fx|Network"; /// - /// Phaser, Flanger, Chorus, Tremolo, Vibrato, AutoPan, Rotary, Cloner... + /// using Network /// - public static ReadOnlySpan kFxModulation_u8 => "Fx|Modulation\0"u8; + public static ReadOnlySpan kFxNetwork_u8 => "Fx|Network\0"u8; } public static partial class PlugType @@ -21938,6 +23506,19 @@ public static partial class PlugType public static ReadOnlySpan kFxReverb_u8 => "Fx|Reverb\0"u8; } + public static partial class PlugType + { + /// + /// MonoToStereo, StereoEnhancer,... + /// + public const string kFxSpatial = "Fx|Spatial"; + + /// + /// MonoToStereo, StereoEnhancer,... + /// + public static ReadOnlySpan kFxSpatial_u8 => "Fx|Spatial\0"u8; + } + public static partial class PlugType { /// @@ -21967,14 +23548,14 @@ public static partial class PlugType public static partial class PlugType { /// - /// using Network + /// Tools dedicated to Vocals /// - public const string kFxNetwork = "Fx|Network"; + public const string kFxVocals = "Fx|Vocals"; /// - /// using Network + /// Tools dedicated to Vocals /// - public static ReadOnlySpan kFxNetwork_u8 => "Fx|Network\0"u8; + public static ReadOnlySpan kFxVocals_u8 => "Fx|Vocals\0"u8; } public static partial class PlugType @@ -22071,118 +23652,118 @@ public static partial class PlugType public static partial class PlugType { /// - /// used for SurroundPanner + /// used for Ambisonics channel (FX or Panner/Mixconverter/Up-Mixer/Down-Mixer when combined with other category) /// - public const string kSpatial = "Spatial"; + public const string kAmbisonics = "Ambisonics"; /// - /// used for SurroundPanner + /// used for Ambisonics channel (FX or Panner/Mixconverter/Up-Mixer/Down-Mixer when combined with other category) /// - public static ReadOnlySpan kSpatial_u8 => "Spatial\0"u8; + public static ReadOnlySpan kAmbisonics_u8 => "Ambisonics\0"u8; } public static partial class PlugType { /// - /// used for SurroundPanner and as insert effect + /// Meter, Scope, FFT-Display, not selectable as insert plug-in /// - public const string kSpatialFx = "Spatial|Fx"; + public const string kAnalyzer = "Analyzer"; /// - /// used for SurroundPanner and as insert effect + /// Meter, Scope, FFT-Display, not selectable as insert plug-in /// - public static ReadOnlySpan kSpatialFx_u8 => "Spatial|Fx\0"u8; + public static ReadOnlySpan kAnalyzer_u8 => "Analyzer\0"u8; } public static partial class PlugType { /// - /// indicates that it supports only realtime process call, no processing faster than realtime + /// will be NOT used for plug-in offline processing (will work as normal insert plug-in) /// - public const string kOnlyRealTime = "OnlyRT"; + public const string kNoOfflineProcess = "NoOfflineProcess"; /// - /// indicates that it supports only realtime process call, no processing faster than realtime + /// will be NOT used for plug-in offline processing (will work as normal insert plug-in) /// - public static ReadOnlySpan kOnlyRealTime_u8 => "OnlyRT\0"u8; + public static ReadOnlySpan kNoOfflineProcess_u8 => "NoOfflineProcess\0"u8; } public static partial class PlugType { /// - /// used for plug-in offline processing (will not work as normal insert plug-in) + /// used for plug-ins that require ARA to operate (will not work as normal insert plug-in) /// - public const string kOnlyOfflineProcess = "OnlyOfflineProcess"; + public const string kOnlyARA = "OnlyARA"; /// - /// used for plug-in offline processing (will not work as normal insert plug-in) + /// used for plug-ins that require ARA to operate (will not work as normal insert plug-in) /// - public static ReadOnlySpan kOnlyOfflineProcess_u8 => "OnlyOfflineProcess\0"u8; + public static ReadOnlySpan kOnlyARA_u8 => "OnlyARA\0"u8; } public static partial class PlugType { /// - /// used for plug-ins that require ARA to operate (will not work as normal insert plug-in) + /// used for plug-in offline processing (will not work as normal insert plug-in) /// - public const string kOnlyARA = "OnlyARA"; + public const string kOnlyOfflineProcess = "OnlyOfflineProcess"; /// - /// used for plug-ins that require ARA to operate (will not work as normal insert plug-in) + /// used for plug-in offline processing (will not work as normal insert plug-in) /// - public static ReadOnlySpan kOnlyARA_u8 => "OnlyARA\0"u8; + public static ReadOnlySpan kOnlyOfflineProcess_u8 => "OnlyOfflineProcess\0"u8; } public static partial class PlugType { /// - /// will be NOT used for plug-in offline processing (will work as normal insert plug-in) + /// indicates that it supports only realtime process call, no processing faster than realtime /// - public const string kNoOfflineProcess = "NoOfflineProcess"; + public const string kOnlyRealTime = "OnlyRT"; /// - /// will be NOT used for plug-in offline processing (will work as normal insert plug-in) + /// indicates that it supports only realtime process call, no processing faster than realtime /// - public static ReadOnlySpan kNoOfflineProcess_u8 => "NoOfflineProcess\0"u8; + public static ReadOnlySpan kOnlyRealTime_u8 => "OnlyRT\0"u8; } public static partial class PlugType { /// - /// used for Mixconverter/Up-Mixer/Down-Mixer + /// used for SurroundPanner /// - public const string kUpDownMix = "Up-Downmix"; + public const string kSpatial = "Spatial"; /// - /// used for Mixconverter/Up-Mixer/Down-Mixer + /// used for SurroundPanner /// - public static ReadOnlySpan kUpDownMix_u8 => "Up-Downmix\0"u8; + public static ReadOnlySpan kSpatial_u8 => "Spatial\0"u8; } public static partial class PlugType { /// - /// Meter, Scope, FFT-Display, not selectable as insert plug-in + /// used for SurroundPanner and as insert effect /// - public const string kAnalyzer = "Analyzer"; + public const string kSpatialFx = "Spatial|Fx"; /// - /// Meter, Scope, FFT-Display, not selectable as insert plug-in + /// used for SurroundPanner and as insert effect /// - public static ReadOnlySpan kAnalyzer_u8 => "Analyzer\0"u8; + public static ReadOnlySpan kSpatialFx_u8 => "Spatial|Fx\0"u8; } public static partial class PlugType { /// - /// used for Ambisonics channel (FX or Panner/Mixconverter/Up-Mixer/Down-Mixer when combined with other category) + /// used for Mixconverter/Up-Mixer/Down-Mixer /// - public const string kAmbisonics = "Ambisonics"; + public const string kUpDownMix = "Up-Downmix"; /// - /// used for Ambisonics channel (FX or Panner/Mixconverter/Up-Mixer/Down-Mixer when combined with other category) + /// used for Mixconverter/Up-Mixer/Down-Mixer /// - public static ReadOnlySpan kAmbisonics_u8 => "Ambisonics\0"u8; + public static ReadOnlySpan kUpDownMix_u8 => "Up-Downmix\0"u8; } public static partial class PlugType @@ -25133,6 +26714,8 @@ private static void RegisterAllInterfaces() Register(); Register(); Register(); + Register(); + Register(); Register(); Register(); Register(); @@ -25141,6 +26724,7 @@ private static void RegisterAllInterfaces() Register(); Register(); Register(); + Register(); Register(); Register(); Register(); @@ -25155,6 +26739,7 @@ private static void RegisterAllInterfaces() Register(); Register(); Register(); + Register(); Register(); Register(); Register(); @@ -25184,9 +26769,12 @@ private static Dictionary GetMapGuidToName() { IComponentHandler2.IId, nameof(IComponentHandler2) }, { IComponentHandler3.IId, nameof(IComponentHandler3) }, { IComponentHandlerBusActivation.IId, nameof(IComponentHandlerBusActivation) }, + { IComponentHandlerSystemTime.IId, nameof(IComponentHandlerSystemTime) }, { IConnectionPoint.IId, nameof(IConnectionPoint) }, { IContextMenu.IId, nameof(IContextMenu) }, { IContextMenuTarget.IId, nameof(IContextMenuTarget) }, + { IDataExchangeHandler.IId, nameof(IDataExchangeHandler) }, + { IDataExchangeReceiver.IId, nameof(IDataExchangeReceiver) }, { IEditController.IId, nameof(IEditController) }, { IEditController2.IId, nameof(IEditController2) }, { IEditControllerHostEditing.IId, nameof(IEditControllerHostEditing) }, @@ -25217,6 +26805,7 @@ private static Dictionary GetMapGuidToName() { IProcessContextRequirements.IId, nameof(IProcessContextRequirements) }, { IProgramListData.IId, nameof(IProgramListData) }, { IProgress.IId, nameof(IProgress) }, + { IRemapParamID.IId, nameof(IRemapParamID) }, { IStreamAttributes.IId, nameof(IStreamAttributes) }, { IStringResult.IId, nameof(IStringResult) }, { ITestPlugProvider.IId, nameof(ITestPlugProvider) }, diff --git a/src/global.json b/src/global.json index fa551a8..91f5ead 100644 --- a/src/global.json +++ b/src/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "8.0.100", + "version": "9.0.100", "rollForward": "latestMinor", "allowPrerelease": false },