| @@ -21,5 +21,9 @@ if [ ! -f documentation/style.css ]; then | |||
| fi | |||
| cp kx-external-ui.lv2/* documentation/extui/ | |||
| cp kx-programs.lv2/* documentation/progs/ | |||
| cp kx-rtmempool.lv2/* documentation/rtmpl/ | |||
| lv2specgen.py $(pwd)/kx-external-ui.lv2/manifest.ttl /usr/share/lv2specgen/ ../style.css $(pwd)/documentation/extui/index.html $(pwd)/documentation/extui "" -i -p extui | |||
| lv2specgen.py $(pwd)/kx-programs.lv2/manifest.ttl /usr/share/lv2specgen/ ../style.css $(pwd)/documentation/progs/index.html $(pwd)/documentation/progs "" -i -p progs | |||
| lv2specgen.py $(pwd)/kx-rtmempool.lv2/manifest.ttl /usr/share/lv2specgen/ ../style.css $(pwd)/documentation/rtmpl/index.html $(pwd)/documentation/rtmpl "" -i -p rtmpl | |||
| @@ -38,7 +38,7 @@ | |||
| </ul> | |||
| <p> | |||
| List of hosts that use this extension: | |||
| List of hosts that support this extension: | |||
| </p> | |||
| <ul> | |||
| <li><a href="http://ardour.org" target="_blank">Ardour</a></li> | |||
| @@ -0,0 +1,8 @@ | |||
| @prefix lv2: <http://lv2plug.in/ns/lv2core#> . | |||
| @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . | |||
| <http://kxstudio.sf.net/ns/lv2ext/programs> | |||
| a lv2:Specification ; | |||
| lv2:minorVersion 1 ; | |||
| lv2:microVersion 0 ; | |||
| rdfs:seeAlso <programs.ttl> . | |||
| @@ -0,0 +1,25 @@ | |||
| @prefix dcs: <http://ontologi.es/doap-changeset#> . | |||
| @prefix doap: <http://usefulinc.com/ns/doap#> . | |||
| @prefix foaf: <http://xmlns.com/foaf/0.1/> . | |||
| @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . | |||
| <http://kxstudio.sf.net/ns/lv2ext/programs> | |||
| a doap:Project ; | |||
| rdfs:seeAlso <../kx-meta/meta.ttl> ; | |||
| doap:license <http://opensource.org/licenses/isc> ; | |||
| doap:name "Programs" ; | |||
| doap:homepage <http://kxstudio.sf.net/ns/lv2ext/programs> ; | |||
| doap:created "2015-07-03" ; | |||
| doap:shortdesc "LV2 extension for implementing plugin-side programs." ; | |||
| doap:developer <http://falktx.com/myself.html> ; | |||
| doap:maintainer <http://falktx.com/myself.html> ; | |||
| doap:release [ | |||
| doap:revision "1.0" ; | |||
| doap:created "2015-07-03" ; | |||
| doap:file-release <http://kxstudio.sf.net/ns/lv2ext/kx-extensions-1.0.tar.bz2> ; | |||
| dcs:changeset [ | |||
| dcs:item [ | |||
| rdfs:label "First stable release." | |||
| ] | |||
| ] | |||
| ] . | |||
| @@ -0,0 +1,174 @@ | |||
| /* | |||
| LV2 Programs Extension | |||
| Copyright 2012 Filipe Coelho <falktx@falktx.com> | |||
| Permission to use, copy, modify, and/or distribute this software for any | |||
| purpose with or without fee is hereby granted, provided that the above | |||
| copyright notice and this permission notice appear in all copies. | |||
| THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |||
| WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |||
| MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |||
| ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |||
| WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |||
| ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |||
| OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||
| */ | |||
| /** | |||
| @file lv2_programs.h | |||
| C header for the LV2 programs extension <http://kxstudio.sf.net/ns/lv2ext/programs>. | |||
| */ | |||
| #ifndef LV2_PROGRAMS_H | |||
| #define LV2_PROGRAMS_H | |||
| #include "lv2/lv2plug.in/ns/lv2core/lv2.h" | |||
| #include "lv2/lv2plug.in/ns/extensions/ui/ui.h" | |||
| #define LV2_PROGRAMS_URI "http://kxstudio.sf.net/ns/lv2ext/programs" | |||
| #define LV2_PROGRAMS_PREFIX LV2_PROGRAMS_URI "#" | |||
| #define LV2_PROGRAMS__Host LV2_PROGRAMS_PREFIX "Host" | |||
| #define LV2_PROGRAMS__Interface LV2_PROGRAMS_PREFIX "Interface" | |||
| #define LV2_PROGRAMS__UIInterface LV2_PROGRAMS_PREFIX "UIInterface" | |||
| #ifdef __cplusplus | |||
| extern "C" { | |||
| #endif | |||
| typedef void* LV2_Programs_Handle; | |||
| typedef struct _LV2_Program_Descriptor { | |||
| /** Bank number for this program. Note that this extension does not | |||
| support MIDI-style separation of bank LSB and MSB values. There is | |||
| no restriction on the set of available banks: the numbers do not | |||
| need to be contiguous, there does not need to be a bank 0, etc. */ | |||
| uint32_t bank; | |||
| /** Program number (unique within its bank) for this program. There is | |||
| no restriction on the set of available programs: the numbers do not | |||
| need to be contiguous, there does not need to be a program 0, etc. */ | |||
| uint32_t program; | |||
| /** Name of the program. */ | |||
| const char * name; | |||
| } LV2_Program_Descriptor; | |||
| /** | |||
| Programs extension, plugin data. | |||
| When the plugin's extension_data is called with argument LV2_PROGRAMS__Interface, | |||
| the plugin MUST return an LV2_Programs_Instance structure, which remains valid | |||
| for the lifetime of the plugin. | |||
| */ | |||
| typedef struct _LV2_Programs_Interface { | |||
| /** | |||
| * get_program() | |||
| * | |||
| * This member is a function pointer that provides a description | |||
| * of a program (named preset sound) available on this plugin. | |||
| * | |||
| * The index argument is an index into the plugin's list of | |||
| * programs, not a program number as represented by the Program | |||
| * field of the LV2_Program_Descriptor. (This distinction is | |||
| * needed to support plugins that use non-contiguous program or | |||
| * bank numbers.) | |||
| * | |||
| * This function returns a LV2_Program_Descriptor pointer that is | |||
| * guaranteed to be valid only until the next call to get_program | |||
| * or deactivate, on the same plugin instance. This function must | |||
| * return NULL if passed an index argument out of range, so that | |||
| * the host can use it to query the number of programs as well as | |||
| * their properties. | |||
| */ | |||
| const LV2_Program_Descriptor *(*get_program)(LV2_Handle handle, | |||
| uint32_t index); | |||
| /** | |||
| * select_program() | |||
| * | |||
| * This member is a function pointer that selects a new program | |||
| * for this plugin. The program change should take effect | |||
| * immediately at the start of the next run() call. (This | |||
| * means that a host providing the capability of changing programs | |||
| * between any two notes on a track must vary the block size so as | |||
| * to place the program change at the right place. A host that | |||
| * wanted to avoid this would probably just instantiate a plugin | |||
| * for each program.) | |||
| * | |||
| * Plugins should ignore a select_program() call with an invalid | |||
| * bank or program. | |||
| * | |||
| * A plugin is not required to select any particular default | |||
| * program on activate(): it's the host's duty to set a program | |||
| * explicitly. | |||
| * | |||
| * A plugin is permitted to re-write the values of its input | |||
| * control ports when select_program is called. The host should | |||
| * re-read the input control port values and update its own | |||
| * records appropriately. (This is the only circumstance in which | |||
| * a LV2 plugin is allowed to modify its own control-input ports.) | |||
| */ | |||
| void (*select_program)(LV2_Handle handle, | |||
| uint32_t bank, | |||
| uint32_t program); | |||
| } LV2_Programs_Interface; | |||
| /** | |||
| Programs extension, UI data. | |||
| When the UI's extension_data is called with argument LV2_PROGRAMS__UIInterface, | |||
| the UI MUST return an LV2_Programs_UI_Interface structure, which remains valid | |||
| for the lifetime of the UI. | |||
| */ | |||
| typedef struct _LV2_Programs_UI_Interface { | |||
| /** | |||
| * select_program() | |||
| * | |||
| * This is exactly the same as select_program in LV2_Programs_Instance, | |||
| * but this struct relates to the UI instead of the plugin. | |||
| * | |||
| * When called, UIs should update their state to match the selected program. | |||
| */ | |||
| void (*select_program)(LV2UI_Handle handle, | |||
| uint32_t bank, | |||
| uint32_t program); | |||
| } LV2_Programs_UI_Interface; | |||
| /** | |||
| Feature data for LV2_PROGRAMS__Host. | |||
| */ | |||
| typedef struct _LV2_Programs_Host { | |||
| /** | |||
| * Opaque host data. | |||
| */ | |||
| LV2_Programs_Handle handle; | |||
| /** | |||
| * program_changed() | |||
| * | |||
| * Tell the host to reload a plugin's program. | |||
| * Parameter handle MUST be the 'handle' member of this struct. | |||
| * Parameter index is program index to change. | |||
| * When index is -1, host should reload all the programs. | |||
| * | |||
| * The plugin MUST NEVER call this function on a RT context or during run(). | |||
| * | |||
| * NOTE: This call is to inform the host about a program's bank, program or name change. | |||
| * It DOES NOT change the current selected program. | |||
| */ | |||
| void (*program_changed)(LV2_Programs_Handle handle, | |||
| int32_t index); | |||
| } LV2_Programs_Host; | |||
| #ifdef __cplusplus | |||
| } /* extern "C" */ | |||
| #endif | |||
| #endif /* LV2_PROGRAMS_H */ | |||
| @@ -0,0 +1,62 @@ | |||
| @prefix lv2: <http://lv2plug.in/ns/lv2core#> . | |||
| @prefix owl: <http://www.w3.org/2002/07/owl#> . | |||
| @prefix progs: <http://kxstudio.sf.net/ns/lv2ext/programs#> . | |||
| @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . | |||
| @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . | |||
| @prefix ui: <http://lv2plug.in/ns/extensions/ui#> . | |||
| @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . | |||
| <http://kxstudio.sf.net/ns/lv2ext/programs> | |||
| a owl:Ontology ; | |||
| rdfs:seeAlso <programs.h> , | |||
| <programs.doap.ttl> , | |||
| <../kx-meta/meta.ttl> ; | |||
| lv2:documentation """ | |||
| <p> | |||
| LV2 Programs is an <a href="http://lv2plug.in/ns/lv2core#Specification" target="_blank">LV2 Extension</a> that allows a host to access plugin-side midi-mapped programs.<br/> | |||
| It is not the same as <a href="http://lv2plug.in/ns/ext/presets" target="_blank">LV2 Presets</a>, | |||
| which defines host-side presets where the plugin has no control or role whatsoever.<br/> | |||
| </p> | |||
| <p> | |||
| List of plugins that use this extension: | |||
| </p> | |||
| <ul> | |||
| <li><a href="http://distrho.sourceforge.net" target="_blank">DISTRHO Plugins and Ports</a></li> | |||
| <li><a href="http://drobilla.net/software/mda-lv2/" target="_blank">mda-lv2</a> (using <a href="mda-lv2_programs.patch" target="_blank">this patch</a>)</li> | |||
| </ul> | |||
| <p> | |||
| List of hosts that support this extension: | |||
| </p> | |||
| <ul> | |||
| <li><a href="http://kxstudio.sf.net/Applications:Carla" target="_blank">Carla</a></li> | |||
| <li><a href="http://qtractor.sourceforge.net" target="_blank">Qtractor</a></li> | |||
| </ul> | |||
| """ . | |||
| progs:Host | |||
| a lv2:Feature ; | |||
| lv2:documentation """ | |||
| <p> | |||
| TODO | |||
| </p> | |||
| """ . | |||
| progs:Interface | |||
| a lv2:ExtensionData ; | |||
| rdfs:label "Programs Plugin Interface" ; | |||
| lv2:documentation """ | |||
| <p> | |||
| TODO | |||
| </p> | |||
| """ . | |||
| progs:UIInterface | |||
| a lv2:ExtensionData ; | |||
| rdfs:label "Programs UI Interface" ; | |||
| lv2:documentation """ | |||
| <p> | |||
| TODO | |||
| </p> | |||
| """ . | |||
| @@ -0,0 +1,8 @@ | |||
| @prefix lv2: <http://lv2plug.in/ns/lv2core#> . | |||
| @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . | |||
| <http://kxstudio.sf.net/ns/lv2ext/rtmempool> | |||
| a lv2:Specification ; | |||
| lv2:minorVersion 1 ; | |||
| lv2:microVersion 0 ; | |||
| rdfs:seeAlso <rtmempool.ttl> . | |||
| @@ -0,0 +1,25 @@ | |||
| @prefix dcs: <http://ontologi.es/doap-changeset#> . | |||
| @prefix doap: <http://usefulinc.com/ns/doap#> . | |||
| @prefix foaf: <http://xmlns.com/foaf/0.1/> . | |||
| @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . | |||
| <http://kxstudio.sf.net/ns/lv2ext/rtmempool> | |||
| a doap:Project ; | |||
| rdfs:seeAlso <../kx-meta/meta.ttl> ; | |||
| doap:license <http://opensource.org/licenses/isc> ; | |||
| doap:name "External UI" ; | |||
| doap:homepage <http://kxstudio.sf.net/ns/lv2ext/rtmempool> ; | |||
| doap:created "2015-07-03" ; | |||
| doap:shortdesc "LV2 extension that provides a realtime safe memory pool for plugins." ; | |||
| doap:developer <http://falktx.com/myself.html> ; | |||
| doap:maintainer <http://falktx.com/myself.html> ; | |||
| doap:release [ | |||
| doap:revision "1.0" ; | |||
| doap:created "2015-07-03" ; | |||
| doap:file-release <http://kxstudio.sf.net/ns/lv2ext/kx-extensions-1.0.tar.bz2> ; | |||
| dcs:changeset [ | |||
| dcs:item [ | |||
| rdfs:label "First stable release." | |||
| ] | |||
| ] | |||
| ] . | |||
| @@ -0,0 +1,105 @@ | |||
| /* | |||
| LV2 realtime safe memory pool extension definition | |||
| This work is in public domain. | |||
| This file is distributed in the hope that it will be useful, | |||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |||
| If you have questions, contact Filipe Coelho (aka falkTX) <falktx@falktx.com> | |||
| or ask in #lad channel, FreeNode IRC network. | |||
| */ | |||
| /** | |||
| * @file lv2_rtmempool.h | |||
| * C header for the LV2 rtmempool extension <http://kxstudio.sf.net/ns/lv2ext/rtmempool>. | |||
| * | |||
| */ | |||
| #ifndef LV2_RTMEMPOOL_H | |||
| #define LV2_RTMEMPOOL_H | |||
| #define LV2_RTSAFE_MEMORY_POOL_URI "http://kxstudio.sf.net/ns/lv2ext/rtmempool" | |||
| #define LV2_RTSAFE_MEMORY_POOL_PREFIX LV2_RTSAFE_MEMORY_POOL_URI "#" | |||
| #define LV2_RTSAFE_MEMORY_POOL__Pool LV2_RTSAFE_MEMORY_POOL_URI "Pool" | |||
| /** max size of memory pool name, in chars, including terminating zero char */ | |||
| #define LV2_RTSAFE_MEMORY_POOL_NAME_MAX 128 | |||
| #ifdef __cplusplus | |||
| extern "C" { | |||
| #else | |||
| #include <stdbool.h> | |||
| #endif | |||
| /** | |||
| * Opaque data to host data for LV2_RtMemPool_Pool. | |||
| */ | |||
| typedef void* LV2_RtMemPool_Handle; | |||
| /** | |||
| * On instantiation, host must supply LV2_RTSAFE_MEMORY_POOL__Pool feature. | |||
| * LV2_Feature::data must be pointer to LV2_RtMemPool_Pool. | |||
| */ | |||
| typedef struct _LV2_RtMemPool_Pool { | |||
| /** | |||
| * This function is called when plugin wants to create memory pool | |||
| * | |||
| * <b>may/will sleep</b> | |||
| * | |||
| * @param pool_name pool name, for debug purposes, max RTSAFE_MEMORY_POOL_NAME_MAX chars, including terminating zero char. May be NULL. | |||
| * @param data_size memory chunk size | |||
| * @param min_preallocated min chunks preallocated | |||
| * @param max_preallocated max chunks preallocated | |||
| * | |||
| * @return Success status, true if successful | |||
| */ | |||
| bool (*create)(LV2_RtMemPool_Handle * handle_ptr, | |||
| const char * pool_name, | |||
| size_t data_size, | |||
| size_t min_preallocated, | |||
| size_t max_preallocated); | |||
| /** | |||
| * This function is called when plugin wants to destroy previously created memory pool | |||
| * | |||
| * <b>may/will sleep</b> | |||
| */ | |||
| void (*destroy)(LV2_RtMemPool_Handle handle); | |||
| /** | |||
| * This function is called when plugin wants to allocate memory in context where sleeping is not allowed | |||
| * | |||
| * <b>will not sleep</b> | |||
| * | |||
| * @return Pointer to allocated memory or NULL if memory no memory is available | |||
| */ | |||
| void * (*allocate_atomic)(LV2_RtMemPool_Handle handle); | |||
| /** | |||
| * This function is called when plugin wants to allocate memory in context where sleeping is allowed | |||
| * | |||
| * <b>may/will sleep</b> | |||
| * | |||
| * @return Pointer to allocated memory or NULL if memory no memory is available (should not happen under normal conditions) | |||
| */ | |||
| void * (*allocate_sleepy)(LV2_RtMemPool_Handle handle); | |||
| /** | |||
| * This function is called when plugin wants to deallocate previously allocated memory | |||
| * | |||
| * <b>will not sleep</b> | |||
| * | |||
| * @param memory_ptr pointer to previously allocated memory chunk | |||
| */ | |||
| void (*deallocate)(LV2_RtMemPool_Handle handle, | |||
| void * memory_ptr); | |||
| } LV2_RtMemPool_Pool; | |||
| #ifdef __cplusplus | |||
| } /* extern "C" */ | |||
| #endif | |||
| #endif /* LV2_RTMEMPOOL_H */ | |||
| @@ -0,0 +1,33 @@ | |||
| @prefix lv2: <http://lv2plug.in/ns/lv2core#> . | |||
| @prefix owl: <http://www.w3.org/2002/07/owl#> . | |||
| @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . | |||
| @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . | |||
| @prefix rtmpl: <http://kxstudio.sf.net/ns/lv2ext/rtmempool#> . | |||
| @prefix ui: <http://lv2plug.in/ns/extensions/ui#> . | |||
| @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . | |||
| <http://kxstudio.sf.net/ns/lv2ext/rtmempool> | |||
| a owl:Ontology ; | |||
| rdfs:seeAlso <rtmempool.h> , | |||
| <rtmempool.doap.ttl> , | |||
| <../kx-meta/meta.ttl> ; | |||
| lv2:documentation """ | |||
| <p> | |||
| LV2 realtime safe memory pool extension definition. | |||
| </p> | |||
| <p> | |||
| List of hosts that support this extension: | |||
| </p> | |||
| <ul> | |||
| <li><a href="http://kxstudio.sf.net/Applications:Carla" target="_blank">Carla</a></li> | |||
| </ul> | |||
| """ . | |||
| rtmpl:Pool | |||
| a lv2:Feature ; | |||
| lv2:documentation """ | |||
| <p> | |||
| TODO | |||
| </p> | |||
| """ . | |||