Skip to content

Commit

Permalink
deploy: 1cee407
Browse files Browse the repository at this point in the history
  • Loading branch information
ygrabit committed Oct 11, 2023
1 parent 5234b0a commit 7294443
Show file tree
Hide file tree
Showing 36 changed files with 217 additions and 231 deletions.
2 changes: 1 addition & 1 deletion .vst3_tutorials/dataexchange-tutorial/source/controller.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ class DataExchangeController : public Vst::EditControllerEx1, public Vst::IDataE
bool onBackgroundThread) override;
//---Interface---------
DEFINE_INTERFACES
// Here you can add more supported VST 3 interfaces
// Here, you can add more supported VST 3 interfaces
DEF_INTERFACE (Vst::IDataExchangeReceiver)
END_DEFINE_INTERFACES (EditController)
DELEGATE_REFCOUNT (EditController)
Expand Down
4 changes: 2 additions & 2 deletions pages/FAQ/Compatibility+with+VST+2.x+or+VST+1.html
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ <h1 id="compatibility-with-vst-2x-or-vst-1"><a class="header" href="#compatibili
</ul>
<hr />
<h2 id="q-how-can-i-update-my-vst-2-version-of-my-plug-in-to-a-vst-3-version-and-be-sure-that-cubase-will-load-it-instead-of-my-old-one"><a class="header" href="#q-how-can-i-update-my-vst-2-version-of-my-plug-in-to-a-vst-3-version-and-be-sure-that-cubase-will-load-it-instead-of-my-old-one">Q: How can I update my VST 2 version of my plug-in to a VST 3 version and be sure that Cubase will load it instead of my old one?</a></h2>
<p>You have to provide a special UID for your <a href="https://steinbergmedia.github.io/vst3_doc/vstinterfaces/ivstaudioprocessor_8h.html#ae55c95a44e931e1cd78998c94bc65ee1">kVstAudioEffectClass</a> and <a href="https://steinbergmedia.github.io/vst3_doc/vstinterfaces/ivsteditcontroller_8h.html#a49d6f6f53c7630ea334474e9998c0a99">kVstComponentControllerClass</a> components, based on its <strong>VST 2</strong> UniqueID (4 characters) and its plug-in name like this:</p>
<p>You have to provide a special UID for your <a href="https://steinbergmedia.github.io/vst3_doc/vstinterfaces/ivstaudioprocessor_8h.html#ae55c95a44e931e1cd78998c94bc65ee1">kVstAudioEffectClass</a> and <a href="https://steinbergmedia.github.io/vst3_doc/vstinterfaces/ivsteditcontroller_8h.html#a49d6f6f53c7630ea334474e9998c0a99">kVstComponentControllerClass</a> components, based on its <strong>VST 2</strong> UniqueID (4 characters) and its plug-in name in the following way:</p>
<pre><code class="language-c++">static void convertVST2UID_To_FUID (FUID&amp; newOne, int32 myVST2UID_4Chars, const char* pluginName, bool forControllerUID = false)
{
char uidString[33];
Expand Down Expand Up @@ -265,7 +265,7 @@ <h2 id="q-how-can-i-support-projects-which-were-saved-with-the-vst-2-version-of-
<hr />
<h2 id="q-ive-already-released-a-vst-3-plug-in-with-a-different-uid-than-its-vst-2-equivalent-how-can-i-declare-that-the-vst-3-plug-in-can-replace-its-vst-2-plug-in-counterpart"><a class="header" href="#q-ive-already-released-a-vst-3-plug-in-with-a-different-uid-than-its-vst-2-equivalent-how-can-i-declare-that-the-vst-3-plug-in-can-replace-its-vst-2-plug-in-counterpart">Q: I've already released a VST 3 plug-in with a different UID than its VST 2 equivalent. How can I declare that the VST 3 plug-in can replace its VST 2 plug-in counterpart?</a></h2>
<p>You can use the compatibility array of the <a href="../Technical+Documentation/VST+Module+Architecture/ModuleInfo-JSON.html">moduleinfo.json</a> file.
There you use the UID of your <strong>VST 3</strong> audio effect class as the &quot;New&quot; UID and put the UID of your <strong>VST 2</strong> plug-in in the &quot;Old&quot; array.</p>
There, you use the UID of your <strong>VST 3</strong> audio effect class as the &quot;New&quot; UID and put the UID of your <strong>VST 2</strong> plug-in in the &quot;Old&quot; array.</p>
<p>If you cannot use the <a href="../Technical+Documentation/VST+Module+Architecture/ModuleInfo-JSON.html">moduleinfo.json</a> file, you can create a class that implements the <a href="../Technical+Documentation/Change+History/3.7.5/ModuleInfo.html">IPluginCompatibility</a> interface which you must provide to the host via your plug-in factory.</p>
<hr />
<h2 id="q-in-vst-2-the-editor-was-able-to-access-the-processing-part-named-effect-directly-how-can-i-do-this-in-vst-3"><a class="header" href="#q-in-vst-2-the-editor-was-able-to-access-the-processing-part-named-effect-directly-how-can-i-do-this-in-vst-3">Q: In VST 2 the editor was able to access the processing part, named effect, directly. How can I do this in VST 3?</a></h2>
Expand Down
2 changes: 1 addition & 1 deletion pages/FAQ/Miscellaneous.html
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ <h2 id="q-which-version-of-steinberg-sequencers-support-vst-3"><a class="header"
<hr />
<h2 id="q-why-do-plug-ins-need-subcategories"><a class="header" href="#q-why-do-plug-ins-need-subcategories">Q: Why do plug-ins need subcategories?</a></h2>
<p>When you export your plug-in in the factory instance (check <em>againentry.cpp</em>: DEF_CLASS2), you have to define a subcategory string (can be a combination of more than one string: like &quot;<strong>Fx|Dynamics|EQ</strong>&quot; for example).</p>
<p>Currently the subcategory string is used by <strong>Cubase</strong>/<strong>Nuendo</strong> to organize the plug-ins menu like this:</p>
<p>Currently the subcategory string is used by <strong>Cubase</strong>/<strong>Nuendo</strong> to organize the plug-ins menu in the following way:</p>
<pre><code class="language-c++">// Computation of Folder Name (SubCategories =&gt; folder in menu)
&quot;Fx&quot; =&gt; &quot;Other&quot;
&quot;Fx|Delay&quot; =&gt; &quot;Delay&quot;
Expand Down
2 changes: 1 addition & 1 deletion pages/Getting+Started/Links.html
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@ <h2 id="vstgui"><a class="header" href="#vstgui">VSTGUI</a></h2>
<p><strong><a href="https://github.com/steinbergmedia/vstgui">https://github.com/steinbergmedia/vstgui</a></strong></p>
</blockquote>
<h2 id="external-links-to-vst-3-dsp-conferences-and-plug-ins-development"><a class="header" href="#external-links-to-vst-3-dsp-conferences-and-plug-ins-development">External Links to VST 3, DSP, Conferences and Plug-ins development</a></h2>
<p>Here you can find some links to external resource about <strong>VST 3</strong>, DSP and Plug-ins development:</p>
<p>Here, you can find some links to external resource about <strong>VST 3</strong>, DSP and Plug-ins development:</p>
<div class="table-wrapper"><table><thead><tr><th style="text-align: left">Category</th><th style="text-align: left">Links</th></tr></thead><tbody>
<tr><td style="text-align: left"><strong>YouTube</strong></td><td style="text-align: left"><a href="https://www.youtube.com/watch?v=zXnHaoN2Cig">ADC 2020</a>: Support of MIDI2 and MIDI-CI in <strong>VST 3</strong> instruments, Arne Scheffler and Janne Roeper <a href="https://www.youtube.com/watch?v=zXnHaoN2Cig"><img src="https://i.ytimg.com/vi/zXnHaoN2Cig/maxresdefault.jpg" alt="getting_started_vid_1" /></a><a href="https://www.youtube.com/watch?v=0QBWXC8KNz0">ADC 2017</a>: VST 3 history, advantages and best practice, Yvan Grabit <a href="https://www.youtube.com/watch?v=0QBWXC8KNz0"><img src="https://i.ytimg.com/vi/0QBWXC8KNz0/maxresdefault.jpg" alt="getting_started_vid_2" /></a><a href="https://www.youtube.com/watch?v=SJXGSJ6Zoro">ADC 2016</a>: The Golden Rules of Audio Programming, Pete Goodliffe<br><a href="https://www.youtube.com/watch?v=004zcWwgi1A">How to setup the VST 3 SDK's Sample Plug-in Projects</a></td></tr>
<tr><td style="text-align: left"><strong>Forums / Mailing List</strong></td><td style="text-align: left"><a href="https://www.kvraudio.com/forum/viewforum.php?f=33">KVRAudio Forum</a>: DSP and Plug-in Development<br> • music-dsp mailing list at <a href="https://www.columbia.edu/">columbia.edu</a><br><a href="https://www.musicdsp.org/en/latest/">music-dsp</a> Web<br><a href="https://mail.music.vt.edu/mailman/listinfo/sursound">Sursound</a> mailing list at Virginia Tech<br><a href="https://dsp.stackexchange.com/">DSP Stack Overflow</a>: DSP Developer community<br><a href="https://stackoverflow.com/">Stack Overflow</a>: Developer community</td></tr>
Expand Down
2 changes: 1 addition & 1 deletion pages/Getting+Started/Preparation+on+Windows.html
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ <h2 id="solution-3"><a class="header" href="#solution-3">Solution 3</a></h2>
<blockquote>
<p><em>Computer Configuration =&gt; Windows Settings =&gt; Security Settings =&gt;Local Policies =&gt; User Rights Assignment =&gt; Create symbolic links</em></p>
</blockquote>
<p>Here you can set which users can create symbolic links, add your user name.</p>
<p>Here, you can set which users can create symbolic links, add your user name.</p>
<p><img src="../../resources/getting_started_3.jpg" alt="getting_started_3" /></p>

</main>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -315,11 +315,11 @@ <h2 id="what-is-a-side-chain"><a class="header" href="#what-is-a-side-chain">Wha
<p>Here an example of Side-Chaining for a Instrument in Cubase</p>
<h2 id="how-can-i-implement-a-side-chain-path-into-my-plug-in"><a class="header" href="#how-can-i-implement-a-side-chain-path-into-my-plug-in">How can I implement a Side-chain path into my plug-in?</a></h2>
<p>In AudioEffect::initialize (FUnknown* context) you must add the required bus- and speaker configuration of your plug-in.
For example, if your plug-in works on one input and one output bus, both stereo, the appropriate code snippet would look like this:</p>
For example, if your plug-in works on one input and one output bus, both stereo, the appropriate code snippet would look in the following way:</p>
<pre><code class="language-c++">addAudioInput (USTRING (&quot;Stereo In&quot;), SpeakerArr::kStereo);
addAudioOutput (USTRING (&quot;Stereo Out&quot;), SpeakerArr::kStereo);

// In addition, adding a stereo side-chain bus would look like this:
// In addition, adding a stereo side-chain bus would look in the following way:
addAudioInput (USTRING (&quot;Aux In&quot;), SpeakerArr::kStereo, kAux, 0); // 0 here means not activated by default wanted
</code></pre>
<h2 id="audio-bus-channel-configuration"><a class="header" href="#audio-bus-channel-configuration">Audio bus Channel Configuration</a></h2>
Expand Down Expand Up @@ -417,7 +417,7 @@ <h3 id="how-report-to-the-host-that-the-plug-in-arrangement-has-changed"><a clas
</code></pre>
<p>The host will call <a href="https://steinbergmedia.github.io/vst3_doc/vstinterfaces/classSteinberg_1_1Vst_1_1IAudioProcessor.html#adac76e90d4a18622d818c8204f937f94">Vst::IAudioProcessor::getBusArrangement</a> (for Input and Output) in order to check the new requested arrangement and then the host will call <a href="https://steinbergmedia.github.io/vst3_doc/vstinterfaces/classSteinberg_1_1Vst_1_1IAudioProcessor.html#ad3bc7bac3fd3b194122669be2a1ecc42">Vst::IAudioProcessor::setBusArrangements</a> (called in suspend state: <a href="https://steinbergmedia.github.io/vst3_doc/vstinterfaces/classSteinberg_1_1Vst_1_1IComponent.html#a0a840e8077eb74ec429b8007c7b83517">setActive</a> (false)) to confirm the requested arrangement.</p>
<h3 id="my-plug-in-has-mono-input-and-stereo-output-how-does-vst-3-handle-this"><a class="header" href="#my-plug-in-has-mono-input-and-stereo-output-how-does-vst-3-handle-this">My plug-in has mono input and stereo output. How does VST 3 handle this?</a></h3>
<p>There are two ways to instantiate a plug-in like this.</p>
<p>There are two ways to instantiate a plug-in in the following way:</p>
<ul>
<li><strong>Way 1</strong></li>
</ul>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ <h2 id="introduction"><a class="header" href="#introduction">Introduction</a></h
<li>[optional]</li>
</ul>
<h2 id="dirty-state-support"><a class="header" href="#dirty-state-support">Dirty State Support</a></h2>
<p>This allows the plug-in to tell the host that its internal state is dirty or not, if set to true it means that something besides parameters has changed since last save, then the host should apply a save before quitting.</p>
<p>This allows the plug-in to tell the host that its internal state is dirty or not. If set to true, it means that after saving, there have been further changes, in addition to the parameter changes. In this case, the host should save before quitting.</p>
<pre><code class="language-c++">void MyPluginController::informHostAboutMyDirtyState (bool dirty)
{
FUnknownPtr&lt;IComponentHandler2&gt; componentHandler2 (componentHandler);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@ <h3 id="from-the-plug-in-perspective"><a class="header" href="#from-the-plug-in-
IContextMenu* menu = handler-&gt;createContextMenu (view, paramID);
if (menu)
{
// here you can add your entries (optional)
// here, you can add your entries (optional)
PluginContextMenuTarget* target = new PluginContextMenuTarget ();

IContextMenu::Item item = {0};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -183,16 +183,16 @@ <h1 id="350-key-switch"><a class="header" href="#350-key-switch">[3.5.0] Key Swi
</ul>
<hr />
<h2 id="introduction"><a class="header" href="#introduction">Introduction</a></h2>
<p>Allows information exchange between the plug-in and host about which key switches are currently used.</p>
<p>Allows information exchange between the plug-in and the host about which key switches are currently used.</p>
<p>Extended plug-in interface <a href="https://steinbergmedia.github.io/vst3_doc/vstinterfaces/classSteinberg_1_1Vst_1_1IEditController.html">IEditController</a> for key switches support: <a href="https://steinbergmedia.github.io/vst3_doc/vstinterfaces/classSteinberg_1_1Vst_1_1IKeyswitchController.html">Vst::IKeyswitchController</a></p>
<ul>
<li>[plug imp]</li>
<li>[extends <a href="https://steinbergmedia.github.io/vst3_doc/vstinterfaces/classSteinberg_1_1Vst_1_1IEditController.html">IEditController</a>]</li>
<li>[released: 3.5.0]</li>
<li>[optional]</li>
</ul>
<p>Some instrument plug-ins support key switching functionality, which allows the user to switch between different layered sounds while playing notes. To achieve this, the user has to press a specific key associated to the wanted layer before playing new notes.</p>
<p>A typical example is a sample-based player plug-in with a violin sound, which can include different layers or articulations: pizzicato, legato, tremolo, etc. By pressing or by keeping pressed a specific key, for example C-1, before playing new notes, the plug-in will choose to play pizzicato, by using D-1, it will play legato, and so on.</p>
<p>Some instrument plug-ins support key switching functionality, which allows the users to switch between different layered sounds while playing notes. To achieve this, the users have to press a specific key associated to the wanted layer before playing new notes.</p>
<p>A typical example is a sample-based player plug-in with a violin sound, which can include different layers or articulations: pizzicato, legato, tremolo, etc. By pressing and/or holding a specific key, for example C-1, before playing new notes, the plug-in will choose to play pizzicato, by using D-1, it will play legato, and so on.</p>
<p>With <a href="https://www.steinberg.net/de/technology/">VST Expression Map</a> (introduced by Steinberg in Cubase 5), these key switches can be used in the Score Editor, to associate a symbol (articulation) to a note. Each time this note is played, the corresponding key switch will be used (sent to the plug-in as noteOn event).</p>
<p><a href="https://www.youtube.com/watch?v=D5dj1v6EL2M"><img src="https://i.ytimg.com/vi/D5dj1v6EL2M/maxresdefault.jpg" alt="getting_started_vid_7" /></a></p>
<p>In order to help the creation of such a map, VST 3.5 defines a new interface <a href="https://steinbergmedia.github.io/vst3_doc/vstinterfaces/classSteinberg_1_1Vst_1_1IKeyswitchController.html">Steinberg::Vst::IKeyswitchController</a>. If an (instrument) plug-in supports such an interface, the host can get the current set of used key switches from the plug-in (megatrigg / articulation: <a href="https://steinbergmedia.github.io/vst3_doc/vstinterfaces/structSteinberg_1_1Vst_1_1KeyswitchInfo.html">Steinberg::Vst::KeyswitchInfo</a>) for a given channel of an event bus, and then automatically use them (like in <strong>Cubase 6</strong>) to create a <a href="https://o.steinberg.net/en/support/content_and_accessories/expression_maps_for_vst_expression.html">VST Expression Map</a>.</p>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -188,8 +188,8 @@ <h1 id="350-remote-presentation-of-parameters"><a class="header" href="#350-remo
</ul>
<hr />
<h2 id="introduction"><a class="header" href="#introduction">Introduction</a></h2>
<p>How to better support remote (UI and hardware) for parameters.</p>
<p>Since VST 3.5, a new interface is provided: <a href="https://steinbergmedia.github.io/vst3_doc/vstinterfaces/classSteinberg_1_1Vst_1_1IXmlRepresentationController.html">Vst::IXmlRepresentationController</a></p>
<p>How to better support remote devices/controllers (UI and hardware) for parameters.</p>
<p>Since VST 3.5, a new interface is available: <a href="https://steinbergmedia.github.io/vst3_doc/vstinterfaces/classSteinberg_1_1Vst_1_1IXmlRepresentationController.html">Vst::IXmlRepresentationController</a></p>
<p>Extended plug-in interface <a href="https://steinbergmedia.github.io/vst3_doc/vstinterfaces/classSteinberg_1_1Vst_1_1IEditController.html">IEditController</a> for a component: <a href="https://steinbergmedia.github.io/vst3_doc/vstinterfaces/classSteinberg_1_1Vst_1_1IXmlRepresentationController.html">Vst::IXmlRepresentationController</a></p>
<ul>
<li>[plug imp]</li>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ <h2 id="introduction"><a class="header" href="#introduction">Introduction</a></h
<li>[released: 3.6.11]</li>
<li>[optional]</li>
</ul>
<p>With this plug-in interface, the host can retrieve the preferred physical mapping associated to note expression supported by the plug-in.When the mapping changes (for example, when switching presets) the plug-in needs to inform the host about it via <a href="https://steinbergmedia.github.io/vst3_doc/vstinterfaces/classSteinberg_1_1Vst_1_1IComponentHandler.html#a1f283573728cf0807224c5ebdf3ec3a6">IComponentHandler::restartComponent</a> (<a href="https://steinbergmedia.github.io/vst3_doc/vstinterfaces/namespaceSteinberg_1_1Vst.html#a17867782006f9fdb2b72c16b0420bed5aa11fe6e24349c6d2f7e0035dbc01c10b">kNoteExpressionChanged</a>).</p>
<p>With this plug-in interface, the host can retrieve the preferred physical mapping associated to note expression supported by the plug-in. When the mapping changes (for example, when switching presets), the plug-in needs to inform the host about it via <a href="https://steinbergmedia.github.io/vst3_doc/vstinterfaces/classSteinberg_1_1Vst_1_1IComponentHandler.html#a1f283573728cf0807224c5ebdf3ec3a6">IComponentHandler::restartComponent</a> (<a href="https://steinbergmedia.github.io/vst3_doc/vstinterfaces/namespaceSteinberg_1_1Vst.html#a17867782006f9fdb2b72c16b0420bed5aa11fe6e24349c6d2f7e0035dbc01c10b">kNoteExpressionChanged</a>).</p>
<h2 id="example"><a class="header" href="#example">Example</a></h2>
<p><strong>In mycontroller.h</strong></p>
<pre><code class="language-c++">//------------------------------------------------------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ <h2 id="introduction"><a class="header" href="#introduction">Introduction</a></h
<li>[released: 3.7.0]</li>
<li>[optional]</li>
</ul>
<p>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.</p>
<p>Allows the plug-in to ask the host to create a progress for 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.</p>
<h2 id="examples"><a class="header" href="#examples">Examples</a></h2>
<h3 id="how-to-call-it-from-the-plug-in-side"><a class="header" href="#how-to-call-it-from-the-plug-in-side">How to call it from the plug-in side</a></h3>
<pre><code class="language-c++">//--------------------------------------
Expand Down
Loading

0 comments on commit 7294443

Please sign in to comment.