commit 4381e4b9cf817fa010066533783e2dca09ed8324
parent de75491bc6891eb1cf3a05c1fdd9a9a77d7cec76
Author: Alexandre Bique <bique.alexandre@gmail.com>
Date: Mon, 17 Oct 2016 19:13:21 +0200
Update spec
Diffstat:
M | spec.html | | | 70 | ++++++++++++++++++++++++++++++++++++++++++++++------------------------ |
1 file changed, 46 insertions(+), 24 deletions(-)
diff --git a/spec.html b/spec.html
@@ -199,12 +199,12 @@ tt.docutils {
<li>Be event oriented</li>
<li>Be extensible</li>
<li>Be easy to bridge</li>
-<li>Dynamics<ul>
+<li>More and more advanced modular systems are showing up, things should be dynamics<ul>
<li>dynamic ports</li>
<li>dynamic parameters</li>
</ul>
</li>
-<li>Full MIDI</li>
+<li>Full MIDI access</li>
</ul>
</div>
<div class="section" id="specification">
@@ -212,7 +212,8 @@ tt.docutils {
<div class="section" id="how-to-read-the-specification">
<h2><a class="toc-backref" href="#id4">How to read the specification</a></h2>
<p>The specification should be read along the reference headers.
-<a class="reference external" href="https://free-audio.github.io/clap/">https://free-audio.github.io/clap/</a> gives a convinient view for that.</p>
+<a class="reference external" href="https://free-audio.github.io/clap/">https://free-audio.github.io/clap/</a> gives a convinient splet
+view for that.</p>
</div>
<div class="section" id="encoding">
<h2><a class="toc-backref" href="#id5">Encoding</a></h2>
@@ -841,11 +842,7 @@ plugin's parameters and restore them.</p>
<span class="n">CLAP_LOG_FATAL</span> <span class="o">=</span> <span class="mi">4</span><span class="p">,</span>
<span class="p">};</span>
-<span class="c1">// Id of the plugin
-</span><span class="cp"># define CLAP_ATTR_ID "clap/id"
-</span><span class="c1">// Name of the plugin
-</span><span class="cp"># define CLAP_ATTR_NAME "clap/name"
-</span><span class="c1">// Description of the plugin
+<span class="c1">// Description of the plugin
</span><span class="cp"># define CLAP_ATTR_DESCRIPTION "clap/description"
</span><span class="c1">// Product version string
</span><span class="cp"># define CLAP_ATTR_VERSION "clap/version"
@@ -855,15 +852,9 @@ plugin's parameters and restore them.</p>
</span><span class="cp"># define CLAP_ATTR_URL "clap/url"
</span><span class="c1">// Url to support page, or mail to support
</span><span class="cp"># define CLAP_ATTR_SUPPORT "clap/support"
-</span><span class="c1">// A string containing a list of categories, joined with `;'. For example: `fm;analogue;delay'.
-</span><span class="cp"># define CLAP_ATTR_CATEGORIES "clap/categories"
-</span><span class="c1">// Should be "1" if the plugin supports tunning.
+</span>
+<span class="c1">// Should be "1" if the plugin supports tunning.
</span><span class="cp"># define CLAP_ATTR_SUPPORTS_TUNING "clap/supports_tuning"
-</span><span class="c1">// Should be "1" if the plugin is doing remote processing.
-// This is a hint for the host to optimize task scheduling.
-</span><span class="cp"># define CLAP_ATTR_IS_REMOTE_PROCESSING "clap/is_remote_processing"
-</span><span class="c1">// Should be "1" if the plugin supports in place processing.
-</span><span class="cp"># define CLAP_ATTR_SUPPORTS_IN_PLACE_PROCESSING "clap/supports_in_place_processing"
</span>
<span class="c1">////////////////
// PARAMETERS //
@@ -949,8 +940,8 @@ plugin's parameters and restore them.</p>
<span class="cm">/**
* Asks the plugin to load a program.
* This is analogue to the midi program set:
- * bank msb goes into bank0
- * bank lsb goes into bank1
+ * bank msb goes into bank_msb
+ * bank lsb goes into bank_lsb
* program goes into program
*
* Clap is not limited to 127.
@@ -963,9 +954,9 @@ plugin's parameters and restore them.</p>
*/</span>
<span class="k">struct</span> <span class="n">clap_event_program</span>
<span class="p">{</span>
- <span class="kt">int32_t</span> <span class="n">bank0</span><span class="p">;</span> <span class="c1">// 0..0x7FFFFFFF
-</span> <span class="kt">int32_t</span> <span class="n">bank1</span><span class="p">;</span> <span class="c1">// 0..0x7FFFFFFF
-</span> <span class="kt">int32_t</span> <span class="n">program</span><span class="p">;</span> <span class="c1">// 0..0x7FFFFFFF
+ <span class="kt">int32_t</span> <span class="n">bank_msb</span><span class="p">;</span> <span class="c1">// 0..0x7FFFFFFF
+</span> <span class="kt">int32_t</span> <span class="n">bank_lsb</span><span class="p">;</span> <span class="c1">// 0..0x7FFFFFFF
+</span> <span class="kt">int32_t</span> <span class="n">program</span><span class="p">;</span> <span class="c1">// 0..0x7FFFFFFF
</span><span class="p">};</span>
<span class="k">struct</span> <span class="n">clap_event</span>
@@ -981,6 +972,7 @@ plugin's parameters and restore them.</p>
<span class="k">struct</span> <span class="n">clap_event_param</span> <span class="n">param</span><span class="p">;</span>
<span class="k">struct</span> <span class="n">clap_event_midi</span> <span class="n">midi</span><span class="p">;</span>
<span class="k">struct</span> <span class="n">clap_event_jump</span> <span class="n">jump</span><span class="p">;</span>
+ <span class="k">struct</span> <span class="n">clap_event_program</span> <span class="n">program</span><span class="p">;</span>
<span class="p">};</span>
<span class="p">};</span>
@@ -1044,15 +1036,41 @@ plugin's parameters and restore them.</p>
// PLUGIN //
////////////
</span>
-<span class="c1">// bitfield
-</span><span class="k">enum</span> <span class="n">clap_plugin_type</span>
+<span class="cm">/* bitfield
+ * This gives an hint to the host what the plugin might do. */</span>
+<span class="k">enum</span> <span class="n">clap_plugin_type</span>
<span class="p">{</span>
+ <span class="cm">/* Instruments can play notes, and generate audio */</span>
<span class="n">CLAP_PLUGIN_INSTRUMENT</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span> <span class="o"><<</span> <span class="mi">0</span><span class="p">),</span>
+
+ <span class="cm">/* Audio effects, process audio input and produces audio.
+ * Exemple: delay, reverb, compressor. */</span>
<span class="n">CLAP_PLUGIN_AUDIO_EFFECT</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span> <span class="o"><<</span> <span class="mi">1</span><span class="p">),</span>
+
+ <span class="cm">/* Event effects, takes events as input and produces events.
+ * Exemple: arpegiator */</span>
<span class="n">CLAP_PLUGIN_EVENT_EFFECT</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span> <span class="o"><<</span> <span class="mi">2</span><span class="p">),</span> <span class="c1">// can be seen as midi effect
-</span> <span class="n">CLAP_PLUGIN_ANALYZER</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span> <span class="o"><<</span> <span class="mi">3</span><span class="p">),</span>
+</span>
+ <span class="cm">/* Analyze audio and/or events, and produces analysis results */</span>
+ <span class="n">CLAP_PLUGIN_ANALYZER</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span> <span class="o"><<</span> <span class="mi">3</span><span class="p">),</span>
+
+ <span class="cm">/* This plugin is a modular system, so it can load "modules",
+ * have dynamic number of ports and parameters.
+ * In short it could do anything. */</span>
<span class="n">CLAP_PLUGIN_PATCHER</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span> <span class="o"><<</span> <span class="mi">4</span><span class="p">),</span>
+
+ <span class="cm">/* This plugin streams the audio signal.
+ * For example it can stream to a web radio.
+ * This is important to not block the process loop. */</span>
<span class="n">CLAP_PLUGIN_STREAMER</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span> <span class="o"><<</span> <span class="mi">5</span><span class="p">),</span>
+
+ <span class="cm">/* This plugin act as a proxy, so it forwards the events/audio
+ * to an other program on the same machine or on the network.
+ *
+ * For example a wine bridge which runs Windows plugins on Linux,
+ * is a proxy. A plugin which sends the data to an hardware device
+ * is a proxy as well. */</span>
+ <span class="n">CLAP_PLUGIN_PROXY</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span> <span class="o"><<</span> <span class="mi">6</span><span class="p">),</span>
<span class="p">};</span>
<span class="k">struct</span> <span class="n">clap_plugin</span>
@@ -1062,6 +1080,10 @@ plugin's parameters and restore them.</p>
<span class="kt">void</span> <span class="o">*</span><span class="n">host_data</span><span class="p">;</span> <span class="c1">// reserved pointer for the host
</span> <span class="kt">void</span> <span class="o">*</span><span class="n">plugin_data</span><span class="p">;</span> <span class="c1">// reserved pointer for the plugin
</span>
+ <span class="kt">char</span> <span class="n">name</span><span class="p">[</span><span class="n">CLAP_NAME_SIZE</span><span class="p">];</span> <span class="c1">// plugin name, eg: "Diva"
+</span> <span class="kt">char</span> <span class="n">id</span><span class="p">[</span><span class="n">CLAP_ID_SIZE</span><span class="p">];</span> <span class="c1">// plugin id, eg: "u-he/diva"
+</span> <span class="kt">char</span> <span class="n">version</span><span class="p">[</span><span class="n">CLAP_VERSION_SIZE</span><span class="p">];</span> <span class="c1">// the plugin version, eg: "1.3.2"
+</span>
<span class="k">enum</span> <span class="n">clap_plugin_type</span> <span class="n">plugin_type</span><span class="p">;</span>
<span class="cm">/* Free the plugin and its resources.