clap

CLAP Audio Plugin API
Log | Files | Refs | README | LICENSE

commit efb5a262f0aeca23923e607bb80513e6003d3f4b
parent 867d6795cb0bc2a370009706ad3c88efe0909425
Author: Alexandre Bique <bique.alexandre@gmail.com>
Date:   Thu, 23 Oct 2014 17:43:58 +0200

Various updates

Diffstat:
Mexamples/clap-info/clap-info.c | 1-
Mexamples/thyns/plugin.c | 1-
Mexamples/thyns/thyns.h | 36+++++++++++++++++++++++++++++++++++-
Mexamples/thyns/voice.h | 5+----
Minclude/clap/clap.h | 20+++-----------------
Mspec.html | 27++++++---------------------
Mspec.rst | 2+-
7 files changed, 46 insertions(+), 46 deletions(-)

diff --git a/examples/clap-info/clap-info.c b/examples/clap-info/clap-info.c @@ -84,7 +84,6 @@ int main(int argc, char **argv) fprintf(stdout, " chunk_size: %d\n", plugin->chunk_size); fprintf(stdout, " has_gui: %d\n", plugin->has_gui); fprintf(stdout, " supports_tunning: %d\n", plugin->supports_tuning); - fprintf(stdout, " supports_microtones: %d\n", plugin->supports_microtones); // destroy the plugin plugin->destroy(plugin); diff --git a/examples/thyns/plugin.c b/examples/thyns/plugin.c @@ -203,7 +203,6 @@ thyns_plugin_create(struct clap_host *host, p->plugin.chunk_size = 1; p->plugin.has_gui = false; p->plugin.supports_tuning = true; - p->plugin.supports_microtones = true; p->plugin.latency = 0; p->plugin.get_ports_configs_count = thyns_plugin_get_ports_configs_count; p->plugin.get_ports_config = thyns_plugin_get_ports_config; diff --git a/examples/thyns/thyns.h b/examples/thyns/thyns.h @@ -65,13 +65,47 @@ static double thyns_step(struct thyns *thyns, return out; } +static inline struct thyns_voice * +thyns_find_voice(struct thyns *thyns, uint8_t note) +{ + // XXX + return NULL; +} + +static inline void thyns_handle_event(struct thyns *thyns, + struct clap_event *ev) +{ + switch (ev->type) { + case CLAP_EVENT_NOTE_ON: + break; + + default: + break; + } +} + static inline void thyns_process(struct thyns *thyns, struct clap_process *process) { + struct clap_event *ev = process->events; + thyns->steady_time = process->steady_time; for (uint32_t i = 0; i < process->samples_count; ++i, ++thyns->steady_time) { - process->output[i] = thyns_step(thyns, process); + + // handle events + for (; ev; ev = ev->next) { + assert(ev->steady_time >= thyns->steady_time); + if (ev->steady_time > thyns->steady_time) + break; + + thyns_handle_event(thyns, ev); + } + + // process + process->output[0][i] = thyns_step(thyns, process); } + + process->need_processing = thyns->running; } #endif /* !THYNS_H */ diff --git a/examples/thyns/voice.h b/examples/thyns/voice.h @@ -12,10 +12,7 @@ struct thyns_voice uint32_t sr; // sample rate double pi_sr; // M_PI / sample_rate - double pitch; - - uint32_t note; - uint32_t division; + float freq; // osc part struct thyns_osc osc1; diff --git a/include/clap/clap.h b/include/clap/clap.h @@ -171,7 +171,6 @@ enum clap_event_type CLAP_EVENT_PARAM_SET = 3, // param attribute CLAP_EVENT_PARAM_RAMP = 4, // param attribute - CLAP_EVENT_PITCH_SET = 5, // pitch attribute CLAP_EVENT_PRESET_SET = 6, // preset attribute CLAP_EVENT_MIDI = 7, // midi attribute @@ -192,9 +191,8 @@ enum clap_event_type struct clap_event_note { - uint32_t division; // 12 for a standard octave - uint32_t note; // starts from 0 - float velocity; // 0 .. 1.0f + uint8_t key; + float pitch; struct clap_event *events; // events specific to this note }; @@ -215,11 +213,6 @@ struct clap_event_control float value; // 0 .. 1.0f }; -struct clap_event_pitch -{ - float freq_hz; // usually 440Hz -}; - struct clap_event_preset { uint32_t id; // the preset id @@ -245,7 +238,6 @@ struct clap_event union { struct clap_event_note note; struct clap_event_param param; - struct clap_event_pitch pitch; struct clap_event_preset preset; struct clap_event_midi midi; struct clap_event_control control; @@ -263,12 +255,7 @@ struct clap_process void *host_data; /* audio buffers */ - union { - float **input_f; - double **input_d; - long double **input_ld; - }; - + float **input; float **output; uint32_t samples_count; @@ -360,7 +347,6 @@ struct clap_plugin bool has_gui; bool supports_tuning; - bool supports_microtones; uint32_t latency; // latency in samples diff --git a/spec.html b/spec.html @@ -596,7 +596,7 @@ is used to process the feedback stream:</p> </span> <span class="kt">uint32_t</span> <span class="n">offset</span><span class="p">;</span> <span class="c1">// process all the buffer -</span> <span class="k">for</span> <span class="p">(</span><span class="n">offset</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">offset</span> <span class="o">&lt;</span> <span class="n">process</span><span class="o">-&gt;</span><span class="n">nb_samples</span><span class="p">;</span> +</span> <span class="k">for</span> <span class="p">(</span><span class="n">offset</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">offset</span> <span class="o">&lt;</span> <span class="n">process</span><span class="o">-&gt;</span><span class="n">samples_count</span><span class="p">;</span> <span class="n">offset</span> <span class="o">+=</span> <span class="n">process</span><span class="o">-&gt;</span><span class="n">feedback_chunk_size</span><span class="p">)</span> <span class="p">{</span> @@ -1051,7 +1051,6 @@ big endian machine, it should load again successfully.</p> <span class="n">fprintf</span><span class="p">(</span><span class="n">stdout</span><span class="p">,</span> <span class="s">&quot; chunk_size: %d</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">plugin</span><span class="o">-&gt;</span><span class="n">chunk_size</span><span class="p">);</span> <span class="n">fprintf</span><span class="p">(</span><span class="n">stdout</span><span class="p">,</span> <span class="s">&quot; has_gui: %d</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">plugin</span><span class="o">-&gt;</span><span class="n">has_gui</span><span class="p">);</span> <span class="n">fprintf</span><span class="p">(</span><span class="n">stdout</span><span class="p">,</span> <span class="s">&quot; supports_tunning: %d</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">plugin</span><span class="o">-&gt;</span><span class="n">supports_tuning</span><span class="p">);</span> - <span class="n">fprintf</span><span class="p">(</span><span class="n">stdout</span><span class="p">,</span> <span class="s">&quot; supports_microtones: %d</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">plugin</span><span class="o">-&gt;</span><span class="n">supports_microtones</span><span class="p">);</span> <span class="c1">// destroy the plugin </span> <span class="n">plugin</span><span class="o">-&gt;</span><span class="n">destroy</span><span class="p">(</span><span class="n">plugin</span><span class="p">);</span> @@ -1242,7 +1241,6 @@ big endian machine, it should load again successfully.</p> </span> <span class="n">CLAP_EVENT_PARAM_SET</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span> <span class="c1">// param attribute </span> <span class="n">CLAP_EVENT_PARAM_RAMP</span> <span class="o">=</span> <span class="mi">4</span><span class="p">,</span> <span class="c1">// param attribute -</span> <span class="n">CLAP_EVENT_PITCH_SET</span> <span class="o">=</span> <span class="mi">5</span><span class="p">,</span> <span class="c1">// pitch attribute </span> <span class="n">CLAP_EVENT_PRESET_SET</span> <span class="o">=</span> <span class="mi">6</span><span class="p">,</span> <span class="c1">// preset attribute </span> <span class="n">CLAP_EVENT_MIDI</span> <span class="o">=</span> <span class="mi">7</span><span class="p">,</span> <span class="c1">// midi attribute @@ -1263,10 +1261,9 @@ big endian machine, it should load again successfully.</p> <span class="k">struct</span> <span class="n">clap_event_note</span> <span class="p">{</span> - <span class="kt">uint32_t</span> <span class="n">division</span><span class="p">;</span> <span class="c1">// 12 for a standard octave -</span> <span class="kt">uint32_t</span> <span class="n">note</span><span class="p">;</span> <span class="c1">// starts from 0 -</span> <span class="kt">float</span> <span class="n">velocity</span><span class="p">;</span> <span class="c1">// 0 .. 1.0f -</span> + <span class="kt">uint8_t</span> <span class="n">key</span><span class="p">;</span> + <span class="kt">float</span> <span class="n">pitch</span><span class="p">;</span> + <span class="k">struct</span> <span class="n">clap_event</span> <span class="o">*</span><span class="n">events</span><span class="p">;</span> <span class="c1">// events specific to this note </span><span class="p">};</span> @@ -1286,11 +1283,6 @@ big endian machine, it should load again successfully.</p> <span class="kt">float</span> <span class="n">value</span><span class="p">;</span> <span class="c1">// 0 .. 1.0f </span><span class="p">};</span> -<span class="k">struct</span> <span class="n">clap_event_pitch</span> -<span class="p">{</span> - <span class="kt">float</span> <span class="n">freq_hz</span><span class="p">;</span> <span class="c1">// usually 440Hz -</span><span class="p">};</span> - <span class="k">struct</span> <span class="n">clap_event_preset</span> <span class="p">{</span> <span class="kt">uint32_t</span> <span class="n">id</span><span class="p">;</span> <span class="c1">// the preset id @@ -1316,7 +1308,6 @@ big endian machine, it should load again successfully.</p> <span class="k">union</span> <span class="p">{</span> <span class="k">struct</span> <span class="n">clap_event_note</span> <span class="n">note</span><span class="p">;</span> <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_pitch</span> <span class="n">pitch</span><span class="p">;</span> <span class="k">struct</span> <span class="n">clap_event_preset</span> <span class="n">preset</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_control</span> <span class="n">control</span><span class="p">;</span> @@ -1334,14 +1325,9 @@ big endian machine, it should load again successfully.</p> <span class="kt">void</span> <span class="o">*</span><span class="n">host_data</span><span class="p">;</span> <span class="cm">/* audio buffers */</span> - <span class="k">union</span> <span class="p">{</span> - <span class="kt">float</span> <span class="o">**</span><span class="n">input_f</span><span class="p">;</span> - <span class="kt">double</span> <span class="o">**</span><span class="n">input_d</span><span class="p">;</span> - <span class="kt">long</span> <span class="kt">double</span> <span class="o">**</span><span class="n">input_ld</span><span class="p">;</span> - <span class="p">};</span> - + <span class="kt">float</span> <span class="o">**</span><span class="n">input</span><span class="p">;</span> <span class="kt">float</span> <span class="o">**</span><span class="n">output</span><span class="p">;</span> - <span class="kt">uint32_t</span> <span class="n">nb_samples</span><span class="p">;</span> + <span class="kt">uint32_t</span> <span class="n">samples_count</span><span class="p">;</span> <span class="cm">/* feedback loops */</span> <span class="kt">void</span> <span class="p">(</span><span class="o">*</span><span class="n">feedback</span><span class="p">)(</span><span class="k">struct</span> <span class="n">clap_process</span> <span class="o">*</span><span class="n">process</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">stream_id</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">nb_samples</span><span class="p">);</span> @@ -1431,7 +1417,6 @@ big endian machine, it should load again successfully.</p> <span class="kt">bool</span> <span class="n">has_gui</span><span class="p">;</span> <span class="kt">bool</span> <span class="n">supports_tuning</span><span class="p">;</span> - <span class="kt">bool</span> <span class="n">supports_microtones</span><span class="p">;</span> <span class="kt">uint32_t</span> <span class="n">latency</span><span class="p">;</span> <span class="c1">// latency in samples </span> diff --git a/spec.rst b/spec.rst @@ -325,7 +325,7 @@ is used to process the feedback stream: uint32_t offset; // process all the buffer - for (offset = 0; offset < process->nb_samples; + for (offset = 0; offset < process->samples_count; offset += process->feedback_chunk_size) {