Skip to content

Commit

Permalink
Pull request #117: Main => deploy
Browse files Browse the repository at this point in the history
Merge in VSTSDK/vst3_dev_portal from main to deploy

* commit 'b261ee9a5649c4d1ca7ac5d53c965b7c35a3118c':
  [fix] strings review
  [fix] typo
  [update] add restartcomp example for remap
  [update] doc
  [fix] link
  [update] license
  [update] doc about remap
  [update] history
  [update] history
  [update] remove cmake option about VST2
  [update] remove any reference to VST2 Wrapper
  • Loading branch information
ygrabit committed Apr 24, 2024
2 parents ee3fc7f + b261ee9 commit 1a87f2b
Show file tree
Hide file tree
Showing 20 changed files with 200 additions and 80 deletions.
5 changes: 3 additions & 2 deletions src/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,7 @@
- [AudioHost Application](pages/What+is+the+VST+3+SDK/AudioHost.md)
- [EditorHost Application](pages/What+is+the+VST+3+SDK/EditorHost.md)
- [VST 3 Inspector Application](pages/What+is+the+VST+3+SDK/VST3Inspector.md)
- [AAX, AUv3, AU and VST 2 Wrappers](pages/What+is+the+VST+3+SDK/Wrappers/Index.md)
- [VST 2.x Wrapper](pages/What+is+the+VST+3+SDK/Wrappers/VST+2+Wrapper.md)
- [AAX, AUv3 and AU Wrappers](pages/What+is+the+VST+3+SDK/Wrappers/Index.md)
- [AAX Wrapper](pages/What+is+the+VST+3+SDK/Wrappers/AAX+Wrapper.md)
- [AudioUnit v3 Wrapper](pages/What+is+the+VST+3+SDK/Wrappers/AUv3+Wrapper.md)
- [AudioUnit v2 Wrapper](pages/What+is+the+VST+3+SDK/Wrappers/AUv2+Wrapper.md)
Expand Down Expand Up @@ -114,10 +113,12 @@
- [\[3.7.5\] Module Info and Plug-in Compatibility](pages/Technical+Documentation/Change+History/3.7.5/ModuleInfo.md)
- [\[3.7.9\] Get Current SystemTime](pages/Technical+Documentation/Change+History/3.7.9/IComponentHandlerSystemTime.md)
- [\[3.7.9\] Data Transfert Between Processor/Controller](pages/Technical+Documentation/Change+History/3.7.9/IDataExchangeHandler.md)
- [\[3.7.11\] Remap Parameter ID](pages/Technical+Documentation/Change+History/3.7.11/IRemapParamID.md)

# Additional Resources

- [Change History](pages/Versions/Index.md)
- [Version 3.7.11 (2024/04/22)](pages/Versions/Version+3.7.11.md)
- [Version 3.7.10 (2024/01/18)](pages/Versions/Version+3.7.10.md)
- [Version 3.7.9 (2023/10/09)](pages/Versions/Version+3.7.9.md)
- [Version 3.7.8 (2023/05/15)](pages/Versions/Version+3.7.8.md)
Expand Down
24 changes: 12 additions & 12 deletions src/pages/FAQ/Licensing.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,33 +6,33 @@

---

## Q: I would like to share the source code of my VST 3 plug-in/host on GitHub or other such platform.
## Q: I would like to share the source code of my VST 3 plug-in/host on GitHub or a similar platform.

- You can choose the [GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html) license and feel free to share your plug-ins/host's source code including or referencing the **VST 3 SDK**'s sources on GitHub.
- You are allowed to provide a binary form of your plug-ins/host too, provided that you provide its source code as [GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html) too.
- You can choose the [GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html) license. Feel free to share your plug-ins/host's source code including or referencing the **VST 3 SDK**'s sources on GitHub.
- You are allowed to provide a binary form of your plug-ins/host too, provided that you provide its source code as [GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html) as well.
- Note that you have to follow the [Steinberg VST usage guidelines](../VST+3+Licensing/Usage+guidelines.md).

---

## Q: I would like to distribute my VST 3 plug-in/host as freeware/shareware in binary form only.

- You can distribute your **VST 3** plug-in/host in a binary form. This always requires that you to choose the "Proprietary Steinberg VST 3" license.
- Even though you distribute your **VST 3** plug-in/host as freeware/shareware you need to adhere to the requirements of the "Proprietary Steinberg VST 3" license.
- You can distribute your **VST 3** plug-in/host in a binary form. This always requires you to choose the "**Proprietary Steinberg VST 3**" license.
- Even though you distribute your **VST 3** plug-in/host as freeware/shareware you need to adhere to the requirements of the "**Proprietary Steinberg VST 3**" license.
- Download the [license agreement](../VST+3+Licensing/What+are+the+licensing+options.md) (it is part of the [SDK](../Getting+Started/Links.md) too), sign it and return it to Steinberg.

---

## Q: I would like to sell my VST 3 plug-in/host in binary form only.

If you work for-profit and distribute your **VST 3** plug-in/host in binary form, you need to choose the "Proprietary Steinberg VST 3" license.
If you work for-profit and distribute your **VST 3** plug-in/host in binary form, you need to choose the "**Proprietary Steinberg VST 3**" license.
Download the [license agreement](../VST+3+Licensing/What+are+the+licensing+options.md) (it is part of the [SDK](../Getting+Started/Links.md) too), sign it and return it to Steinberg.

---

## Q: I would like to adapt the VST 3 SDK's sources to my VST 3 plug-in/host's needs.

You can adapt and modify the **VST 3 SDK**'s source for your needs, but if you want to distribute these sources under [GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html) you have to distribute your **VST 3** plug-in/host's sources under [GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html) too.
It is allowed to modify the **VST 3 SDK**'s when you distribute your **VST 3** plug-in/host in binary form and choose the "Proprietary Steinberg VST 3" license.
You can adapt and modify the **VST 3 SDK**'s source so that it suits your needs, but if you want to distribute these sources under [GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html) you have to distribute your **VST 3** plug-in/host's sources under [GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html) too.
It is allowed to modify the **VST 3 SDK**'s when you distribute your **VST 3** plug-in/host in binary form and choose the "**Proprietary Steinberg VST 3**" license.
If you are of the opinion that we should include your changes in the SDK, please contact us (use the [sdk.steinberg.net](https://forums.steinberg.net/c/developer/103/none)).

---
Expand All @@ -47,19 +47,19 @@ Yes, but you have to make sure that your **VST 3** plug-in/host sources are unde

- Yes, but you have to make sure that your **VST 3** plug-in/host sources are under [GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html) too!
- Note that you have to follow the [Steinberg VST usage guidelines](../VST+3+Licensing/What+are+the+licensing+options.md).
- If you do not want to be [GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html), you have to build your **VST 3** plug-in/host based on the original or any private modified version of the **VST 3 SDK** and choose the "Proprietary Steinberg VST 3" license.
- If you do not want to be licensed as [GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html), you have to build your **VST 3** plug-in/host based on the original or any private modified version of the **VST 3 SDK** and choose the "**Proprietary Steinberg VST 3**" license.

---

## Q: I would like to sell my VST 3 plug-in/host in binary form which is based on a 3rd party SDK like JUCE.
## Q: I would like to sell my VST 3 plug-in/host in binary form, which is based on a 3rd party SDK like JUCE.

- If you work for-profit and distribute your plug-in/host in binary form, you need to choose the "Proprietary Steinberg VST 3" license.
- If you work for-profit and distribute your plug-in/host in binary form, you need to choose the "**Proprietary Steinberg VST 3**" license.
- Download the [license agreement](../VST+3+Licensing/What+are+the+licensing+options.md) (it is part of the [SDK](../Getting+Started/Links.md) too), sign it and return it to Steinberg.
- Note that you have to follow the [Steinberg VST usage guidelines](../VST+3+Licensing/What+are+the+licensing+options.md).

---

## Q: I would like to distribute my VST 3 plug-in/host in binary form which is based on a 3rd party SDK like JUCE and used its [GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html) license.
## Q: I would like to distribute my VST 3 plug-in/host in binary form, which is based on a 3rd party SDK like JUCE and used its [GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html) license.

- Yes, but you have to make sure that your **VST 3** plug-in/host sources are under [GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html) too!
- Note that you have to follow the [Steinberg VST usage guidelines](../VST+3+Licensing/What+are+the+licensing+options.md).
Expand Down
2 changes: 1 addition & 1 deletion src/pages/Getting+Started/Links.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ You have 2 possibilities for getting the **VST 3 SDK:**
| :- | :-: | :-: |
| [VST 3 API](../Technical+Documentation/API+Documentation/Index.md) | ✔️ | ✔️ |
| [Helpers classes](../What+is+the+VST+3+SDK/Index.md) | ✔️ | ✔️ |
| [AAX, AUv3, AU and VST 2 wrappers](../What+is+the+VST+3+SDK/Wrappers/Index.md) | ✔️ | ✔️ |
| [AAX, AUv3 and AU wrappers](../What+is+the+VST+3+SDK/Wrappers/Index.md) | ✔️ | ✔️ |
| [iOS Inter-App Audio support](../What+is+the+VST+3+SDK/iOS+Inter-App+Audio+support.md) | ✔️ | ✔️ |
| [VST 3 Plug-ins Examples](../What+is+the+VST+3+SDK/Plug-in+Examples.md) | ✔️ | ✔️ |
| [Validator command line](../What+is+the+VST+3+SDK/Index.md#validator-command-line) | ✔️ | ✔️ |
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
>/ [VST Home](../../../) / [Technical Documentation](../../Index.md)
>
># \[3.7.11\] Remap Paramater ID
**On this page:**

[[_TOC_]]

**Related pages:**

- [Moduleinfo](../../../Technical+Documentation/VST+Module+Architecture/ModuleInfo-JSON.md)
- [Compatibility with VST 2.x or VST 1](../../../FAQ/Compatibility+with+VST+2.x+or+VST+1.md)

---

## Introduction

When a VST 3 plug-in intends to replace another one, whether it's an older version or a VST 2 version, it may be necessary to inform the host about parameter remapping. The **IRemapParamID** new plug-in interface facilitates such remapping.

There is two main use cases when a plug-in requires such remapping:
- When a VST 3 plug-in replaces another plug-in (whether VST 2 or a previously released VST 3 version) with a different UID. In this scenario, this new VST 3 plug-in should utilize the [Moduleinfo](../../../Technical+Documentation/VST+Module+Architecture/ModuleInfo-JSON.md) to indicate that it replaces another plug-in. Certain parameters from the older plug-in may be remapped to dedicated parameters of the new plug-in to enable the host resynchronize any references to older parameters (such as in automation or remote control).
For example, VST 2 parameters are identified using indices, while VST 3 parameters utilize ParamIDs. With this new interface, hosts can remap the older indices to the new associated ParamIDs if there are not the same.

- When a VST 3 plug-in is updated to a new version wherein some parameters have changed their ParamIDs. Upon loading a project, the plug-in detects that the project was created with an older version and notifies the host (**kParamIDMappingChanged**) that the **IRemapParamID** interface must be used for resynchronize certain parameters (if the host already has references to plug-in parameters, such as in automation).

## IRemapParamID

The Plug-in has to implement this interface **IRemapParamID** in its *EditController*. The retrieved paramID should match the one it replaces, maintaining the same behavior during automation playback.

- \[plug imp\]
- \[released: 3.7.11\]

## RestartFlags: kParamIDMappingChanged

In the second use case defined above, upon loading its state, the plug-in informs the host of parameter ID changes using the **kParamIDMappingChanged** flag within the *IComponentHandler::restartComponent* function. This notification should be triggered by the *EditController* whithin the **setComponentState** or **setState** methods (during project loading). Subsequently, the host can remap any utilized parameters, such as automation, by utilizing the **IRemapParamID** interface.

- \[plug imp\]
- \[released: 3.7.11\]

## Example

**In controller.h**:

``` c++
//------------------------------------------------------------------------
class TestRemapParamIDController : public EditController, public IRemapParamID
{
public:
//...
//--- from IRemapParamID ---------------------------------------------
tresult PLUGIN_API getCompatibleParamID (const TUID pluginToReplaceUID /*in*/,
Vst::ParamID oldParamID /*in*/,
Vst::ParamID& newParamID /*out*/) override;

//--- from EditController --------------------------------------------
tresult PLUGIN_API setComponentState (IBStream* state) override;

//---Interface---------
DEFINE_INTERFACES
DEF_INTERFACE (IRemapParamID)
END_DEFINE_INTERFACES (EditController)
DELEGATE_REFCOUNT (EditController)
//...
};
```
**In controller.cpp**:
``` c++
//------------------------------------------------------------------------
tresult PLUGIN_API TestRemapParamIDController::getCompatibleParamID (const TUID pluginToReplaceUID,
Vst::ParamID oldParamID,
Vst::ParamID& newParamID)
{
//--- We want to replace the AGain plug-in-------
//--- check if the host is asking for remapping parameter of the AGain plug-in
static const FUID AGainProcessorUID (0x84E8DE5F, 0x92554F53, 0x96FAE413, 0x3C935A18);
FUID uidToCheck (FUID::fromTUID (pluginToReplaceUID));
if (AGainProcessorUID != uidToCheck)
return kResultFalse;
//--- host wants to remap from AGain------------
newParamID = -1;
switch (oldParamID)
{
//--- map the kGainId (0) to our param kMyGainParamTag
case 0:
{
newParamID = kMyGainParamTag;
break;
}
}
//--- return kResultTrue if the mapping happens------------
return (newParamID == -1) ? kResultFalse : kResultTrue;
}
//------------------------------------------------------------------------
tresult PLUGIN_API TestRemapParamIDController::setComponentState (IBStream* state)
{
//...
IBStreamer streamer (state, kLittleEndian);
// Read the state
bool remapNeeded = false;
// here if we decode that the state was from an older plug-in
//...
// then restartComponent
if (remapNeeded)
componentHandler->restartComponent (kParamIDMappingChanged);
return kResultOk;
}
```
1 change: 1 addition & 0 deletions src/pages/Technical+Documentation/Change+History/Index.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,5 @@
- [\[3.7.5\] Module Info and Plug-in Compatibility](../Change+History/3.7.5/ModuleInfo.md)
- [\[3.7.9\] Get Current SystemTime](../Change+History/3.7.9/IComponentHandlerSystemTime.md)
- [\[3.7.9\] Data Transfert Between Processor/Controller](../Change+History/3.7.9/IDataExchangeHandler.md)
- [\[3.7.11\] Remap Parameter ID](../Change+History/3.7.11/IRemapParamID.md)

8 changes: 6 additions & 2 deletions src/pages/Technical+Documentation/Index.md
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ This interface allows the host to get a parameter associated to a specific meani

## [\[3.7.0\] Progress Display](Change+History/3.7.0/IProgress.md)

Allows the plug-in to ask the host to create a progress for specific tasks which take some time.
This interface allows the plug-in to ask the host to create a progress for specific tasks which take some time.

## [\[3.7.0\] Process Context Requirements](Change+History/3.7.0/IProcessContextRequirements.md)

Expand All @@ -227,8 +227,12 @@ The [moduleinfo.json](VST+Module+Architecture/ModuleInfo-JSON.md) describes the

## [\[3.7.9\] Get Current SystemTime](Change+History/3.7.9/IComponentHandlerSystemTime.md)

Allows a plug-in to ask the host for the current system time.
This interface allows a plug-in to ask the host for the current system time.

## [\[3.7.9\] Data Transfert Between Processor/Controller](Change+History/3.7.9/IDataExchangeHandler.md)

These interfaces allow you to send data with 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.

## [\[3.7.11\] Remap Parameter ID](Change+History/3.7.11/IRemapParamID.md)

This interface allows the plug-in to ask the host to remap some parameter ID if needed.
1 change: 0 additions & 1 deletion src/pages/Tutorials/Using+cmake+for+building+plug-ins.md
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,6 @@ cmake -DCMAKE_C_COMPILER=/usr/bin/gcc-DCMAKE_CXX_COMPILER=/usr/bin/g++
- **SMTG_CREATE_BUNDLE_FOR_WINDOWS**: Create bundle on Windows for the **VST 3** plug-ins (new since 3.6.10! Windows only) (default ON)
- **SMTG_CREATE_MODULE_INFO**: Create the moduleinfo.json file (default ON)
- **SMTG_CREATE_PLUGIN_LINK**: Create symbolic link for each **VST 3** plug-in in ${VST3_FOLDER_NAME} folder (you need to have Administrator rights on Windows or change the Local Group Policy to allow the creation of symbolic links) (default ON)
- **SMTG_CREATE_VST2_AGAIN_SAMPLE_VERSION**: Allows you to create the **VST 2** version of the Sample Plug-in AGain, be sure that you have copied the **VST 2** interfaces into the folder VST_SDK/VST3_SDK/pluginterfaces/vst2.x (default OFF)
- **SMTG_CUSTOM_BINARY_LOCATION**: Customize output location for binaries
- **SMTG_CXX_STANDARD**: C++ standard version used for plugins: 14, 17, 20
- **SMTG_ENABLE_ADDRESS_SANITIZER**: Enable Address Sanitizer
Expand Down
6 changes: 3 additions & 3 deletions src/pages/VST+3+Licensing/What+are+the+licensing+options.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ You can choose between the [Proprietary Steinberg VST 3](#proprietary-steinberg-

## Proprietary Steinberg VST 3 license

The "***Proprietary Steinberg VST 3***" license allows you to distribute your **VST 3** plug-in/host in a binary form. However, please note the following requirements:
The "**Proprietary Steinberg VST 3**" license allows you to distribute your **VST 3** plug-in/host in a binary form. However, please note the following requirements:
- You need written permission from **Steinberg Media Technologies GmbH** in order to distribute your **VST 3** plug-in/host (Steinberg will send you the countersigned License agreement included in the SDK that you signed and sent to us).
- You need to mention **Steinberg Media Technologies GmbH** in the about box and/or documentation of your **VST 3** plug-in/host and follow the [Steinberg VST usage guidelines](Usage+guidelines.md).

For more details please read the "***Proprietary Steinberg VST 3***" license agreement. If you accept it, please enter all required information, sign it and send it back to us, either via land mail (to the [Steinberg address](https://o.steinberg.net/en/extras/about.html) mentioned in the license), or via e-mail to [[email protected]](mailto:[email protected]) or via fax (+49 (0)40 210 35-300). We will countersign the license agreement and send it back to you.
For more details please read the "**Proprietary Steinberg VST 3**" license agreement. If you accept it, please enter all required information, sign it and send it back to us, either via land mail (to the [Steinberg address](https://o.steinberg.net/en/extras/about.html) mentioned in the license), or via e-mail to [[email protected]](mailto:[email protected]) or via fax (+49 (0)40 210 35-300). We will countersign the license agreement and send it back to you.

>**As PDF**\
> [The License agreement](../../resources/VST3_License_Agreement.pdf) is part of the VST SDK package, too.
Expand All @@ -41,7 +41,7 @@ For more information about [GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html)
```
//----------------------------------------------------------------------------
// LICENSE
// (c) 2022, Steinberg Media Technologies GmbH, All Rights Reserved
// (c) 2024, Steinberg Media Technologies GmbH, All Rights Reserved
//----------------------------------------------------------------------------
This license applies only to files referencing this license,
for other files of the Software Development Kit therespective embedded license text
Expand Down
Loading

0 comments on commit 1a87f2b

Please sign in to comment.