diff --git a/libs/ardour/lv2_plugin.cc b/libs/ardour/lv2_plugin.cc index a09cfd883e..15a8943388 100644 --- a/libs/ardour/lv2_plugin.cc +++ b/libs/ardour/lv2_plugin.cc @@ -3973,6 +3973,12 @@ LV2PluginInfo::discover (boost::function n_inputs.n_audio (), info->n_outputs.n_audio (), count_midi_in, count_midi_out, count_ctrl_in, count_ctrl_out), false); + + if (uri == "urn:ardour:a-vapor" || uri == "urn:ardour:a-atmos") { + info->internal = true; + cb (uri, PluginScanLogEntry::OK, "", true); + } + plugs->push_back(info); } diff --git a/libs/plugins/a-vapor.lv2/a-vapor.c b/libs/plugins/a-vapor.lv2/a-vapor.c new file mode 100644 index 0000000000..0773680189 --- /dev/null +++ b/libs/plugins/a-vapor.lv2/a-vapor.c @@ -0,0 +1,257 @@ +/* + * Copyright (C) 2023 Robin Gareus + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifdef NDEBUG +#error THIS PLUGIN EXISTS ONLY FOR THE PROTOTYPING +#endif + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE // needed for M_PI +#endif + +#include +#include +#include +#include +#include + +/****************************************************************************** + * LV2 wrapper + */ + +#ifdef HAVE_LV2_1_18_6 +#include +#include +#include +#include +#else +#include +#include +#include +#include +#endif + +typedef struct { + LV2_URID atom_Blank; + LV2_URID atom_Object; + LV2_URID atom_Vector; + LV2_URID atom_Float; + LV2_URID atom_Int; + LV2_URID atom_eventTransfer; +} VaporLV2URIs; + +typedef struct { + /* audio I/O */ + float const* input[128]; + float* out_surround[12]; + float* out_binaural[2]; + float* out_loudness[6]; + + /* control Ports */ + LV2_Atom_Sequence const* p_control; + LV2_Atom_Sequence* p_notify; + float const* p_enable; + float* p_latency; + + /* atom-forge and URI mapping */ + LV2_URID_Map* map; + LV2_Atom_Forge forge; + LV2_Atom_Forge_Frame frame; + VaporLV2URIs uris; + + /* internal config/state */ + uint32_t latency; +} AVapor; + +static inline void +map_uris (LV2_URID_Map* map, VaporLV2URIs* uris) +{ + uris->atom_Blank = map->map (map->handle, LV2_ATOM__Blank); + uris->atom_Object = map->map (map->handle, LV2_ATOM__Object); + uris->atom_Vector = map->map (map->handle, LV2_ATOM__Vector); + uris->atom_Float = map->map (map->handle, LV2_ATOM__Float); + uris->atom_Int = map->map (map->handle, LV2_ATOM__Int); + uris->atom_eventTransfer = map->map (map->handle, LV2_ATOM__eventTransfer); +} + +static LV2_Handle +instantiate (const LV2_Descriptor* descriptor, + double rate, + const char* bundle_path, + const LV2_Feature* const* features) +{ +#if 0 /* D018y requires 48k or 96k */ + if (rate != 48000 && rate != 96000) { + return NULL; + } +#endif + + AVapor* self = (AVapor*)calloc (1, sizeof (AVapor)); + if (!self) { + return NULL; + } + + for (int i = 0; features[i]; ++i) { + if (!strcmp (features[i]->URI, LV2_URID__map)) { + self->map = (LV2_URID_Map*)features[i]->data; + } + } + + if (!self->map) { + fprintf (stderr, "a-vapor.lv2 error: Host does not support urid:map\n"); + free (self); + return NULL; + } + + lv2_atom_forge_init (&self->forge, self->map); + map_uris (self->map, &self->uris); + + self->latency = 0; + + return (LV2_Handle)self; +} + +static void +connect_port (LV2_Handle instance, + uint32_t port, + void* data) +{ + AVapor* self = (AVapor*)instance; + switch (port) { + case 0: + self->p_control = (LV2_Atom_Sequence const*)data; + return; + case 1: + self->p_notify = (LV2_Atom_Sequence*)data; + return; + case 2: + self->p_enable = (float const*) data; + return; + case 3: + self->p_latency = (float*) data; + return; + default: + break; + } + + if (port < 132) { + self->input[port - 4] = (float const*) data; + } else if (port < 144) { + self->out_surround[port - 132] = (float*) data; + } else if (port < 146) { + self->out_binaural[port - 144] = (float*) data; + } else if (port < 152) { + self->out_loudness[port - 146] = (float*) data; + } + +} + +static void +activate (LV2_Handle instance) +{ + //AVapor* self = (AVapor*)instance; +} + +static void +deactivate (LV2_Handle instance) +{ + activate (instance); +} + +static void +run (LV2_Handle instance, uint32_t n_samples) +{ + AVapor* self = (AVapor*)instance; + + /* announce latency */ + *self->p_latency = self->latency; + + if (!self->p_control || !self->p_notify || n_samples == 0) { + /* latency measurement callback */ + return; + } + + /* prepare forge buffer and initialize atom-sequence */ + const uint32_t capacity = self->p_notify->atom.size; + lv2_atom_forge_set_buffer (&self->forge, (uint8_t*)self->p_notify, capacity); + lv2_atom_forge_sequence_head (&self->forge, &self->frame, 0); + + /* process messages from Host */ + if (self->p_control) { + LV2_Atom_Event* ev = lv2_atom_sequence_begin (&(self->p_control)->body); + while (!lv2_atom_sequence_is_end (&(self->p_control)->body, (self->p_control)->atom.size, ev)) { + if (ev->body.type == self->uris.atom_Blank || ev->body.type == self->uris.atom_Object) { + // TODO + // const LV2_Atom_Object* obj = (LV2_Atom_Object*)&ev->body; + } + ev = lv2_atom_sequence_next (ev); + } + } + + /* process audio */ + for (uint32_t chn = 0; chn < 12; ++chn) { + memset (self->out_surround[chn], 0, sizeof (float) * n_samples); + } + + for (uint32_t chn = 0; chn < 2; ++chn) { + memset (self->out_binaural[chn], 0, sizeof (float) * n_samples); + } + + for (uint32_t chn = 0; chn < 6; ++chn) { + memset (self->out_loudness[chn], 0, sizeof (float) * n_samples); + } + + /* close off atom-sequence */ + lv2_atom_forge_pop (&self->forge, &self->frame); +} + +static void +cleanup (LV2_Handle instance) +{ + //AVapor* self = (AVapor*)instance; + free (instance); +} + +static const void* +extension_data (const char* uri) +{ + return NULL; +} + +static const LV2_Descriptor descriptor = { + "urn:ardour:a-vapor", + instantiate, + connect_port, + activate, + run, + deactivate, + cleanup, + extension_data +}; + +LV2_SYMBOL_EXPORT +const LV2_Descriptor* +lv2_descriptor (uint32_t index) +{ + switch (index) { + case 0: + return &descriptor; + default: + return NULL; + } +} diff --git a/libs/plugins/a-vapor.lv2/a-vapor.ttl.in b/libs/plugins/a-vapor.lv2/a-vapor.ttl.in new file mode 100644 index 0000000000..a857d73012 --- /dev/null +++ b/libs/plugins/a-vapor.lv2/a-vapor.ttl.in @@ -0,0 +1,859 @@ +@prefix atom: . +@prefix doap: . +@prefix foaf: . +@prefix lv2: . +@prefix pg: . +@prefix rdf: . +@prefix rdfs: . +@prefix rsz: . +@prefix units: . +@prefix urid: . + +@prefix avapor: . + + + a foaf:Person; + foaf:name "Ardour Community"; + foaf:homepage . + +avapor:SevenOneFour + a pg:SevenPointOneGroup, pg:OutputGroup; + lv2:name "7.1.4"; + lv2:symbol "surround". + +avapor:FiveOne + a pg:FivePointOneGroup, pg:OutputGroup; + lv2:name "5.1"; + lv2:symbol "loudness". + +avapor:Binaural + a pg:StereoGroup, pg:OutputGroup; + lv2:name "Binaural"; + lv2:symbol "binaural". + + + a doap:Project, lv2:Plugin, lv2:SpatialPlugin; + + doap:name "ACE Vapor"; + rdfs:comment "AtmosPhere Dummy Processor"; + + doap:maintainer ; + doap:license ; + + lv2:minorVersion 0; + lv2:microVersion 0; + lv2:requiredFeature urid:map; + lv2:optionalFeature lv2:hardRTCapable; + lv2:optionalFeature ; + + lv2:port + [ + a atom:AtomPort, lv2:InputPort; + atom:bufferType atom:Sequence; + lv2:designation lv2:control; + lv2:index 0; + lv2:symbol "control"; + lv2:name "Control"; + rsz:minimumSize 4096; + ] , [ + a atom:AtomPort, lv2:OutputPort; + atom:bufferType atom:Sequence; + lv2:designation lv2:control; + lv2:index 1; + lv2:symbol "notify"; + lv2:name "Notify"; + rsz:minimumSize 4096; + ] , [ + a lv2:InputPort, lv2:ControlPort; + lv2:index 2; + lv2:name "Enable"; + lv2:symbol "enable"; + lv2:default 1; + lv2:minimum 0; + lv2:maximum 1; + lv2:portProperty lv2:integer, lv2:toggled; + lv2:designation lv2:enabled; + ] , [ + a lv2:ControlPort, lv2:OutputPort; + lv2:index 3; + lv2:symbol "latency"; + lv2:name "Signal Latency"; + lv2:minimum 0; + lv2:maximum 8192; + lv2:portProperty lv2:reportsLatency, lv2:integer; + units:unit units:frame; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 4; + lv2:symbol "in0"; + lv2:name "In 0"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 5; + lv2:symbol "in1"; + lv2:name "In 1"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 6; + lv2:symbol "in2"; + lv2:name "In 2"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 7; + lv2:symbol "in3"; + lv2:name "In 3"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 8; + lv2:symbol "in4"; + lv2:name "In 4"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 9; + lv2:symbol "in5"; + lv2:name "In 5"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 10; + lv2:symbol "in6"; + lv2:name "In 6"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 11; + lv2:symbol "in7"; + lv2:name "In 7"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 12; + lv2:symbol "in8"; + lv2:name "In 8"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 13; + lv2:symbol "in9"; + lv2:name "In 9"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 14; + lv2:symbol "in10"; + lv2:name "In 10"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 15; + lv2:symbol "in11"; + lv2:name "In 11"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 16; + lv2:symbol "in12"; + lv2:name "In 12"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 17; + lv2:symbol "in13"; + lv2:name "In 13"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 18; + lv2:symbol "in14"; + lv2:name "In 14"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 19; + lv2:symbol "in15"; + lv2:name "In 15"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 20; + lv2:symbol "in16"; + lv2:name "In 16"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 21; + lv2:symbol "in17"; + lv2:name "In 17"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 22; + lv2:symbol "in18"; + lv2:name "In 18"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 23; + lv2:symbol "in19"; + lv2:name "In 19"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 24; + lv2:symbol "in20"; + lv2:name "In 20"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 25; + lv2:symbol "in21"; + lv2:name "In 21"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 26; + lv2:symbol "in22"; + lv2:name "In 22"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 27; + lv2:symbol "in23"; + lv2:name "In 23"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 28; + lv2:symbol "in24"; + lv2:name "In 24"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 29; + lv2:symbol "in25"; + lv2:name "In 25"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 30; + lv2:symbol "in26"; + lv2:name "In 26"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 31; + lv2:symbol "in27"; + lv2:name "In 27"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 32; + lv2:symbol "in28"; + lv2:name "In 28"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 33; + lv2:symbol "in29"; + lv2:name "In 29"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 34; + lv2:symbol "in30"; + lv2:name "In 30"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 35; + lv2:symbol "in31"; + lv2:name "In 31"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 36; + lv2:symbol "in32"; + lv2:name "In 32"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 37; + lv2:symbol "in33"; + lv2:name "In 33"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 38; + lv2:symbol "in34"; + lv2:name "In 34"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 39; + lv2:symbol "in35"; + lv2:name "In 35"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 40; + lv2:symbol "in36"; + lv2:name "In 36"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 41; + lv2:symbol "in37"; + lv2:name "In 37"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 42; + lv2:symbol "in38"; + lv2:name "In 38"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 43; + lv2:symbol "in39"; + lv2:name "In 39"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 44; + lv2:symbol "in40"; + lv2:name "In 40"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 45; + lv2:symbol "in41"; + lv2:name "In 41"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 46; + lv2:symbol "in42"; + lv2:name "In 42"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 47; + lv2:symbol "in43"; + lv2:name "In 43"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 48; + lv2:symbol "in44"; + lv2:name "In 44"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 49; + lv2:symbol "in45"; + lv2:name "In 45"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 50; + lv2:symbol "in46"; + lv2:name "In 46"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 51; + lv2:symbol "in47"; + lv2:name "In 47"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 52; + lv2:symbol "in48"; + lv2:name "In 48"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 53; + lv2:symbol "in49"; + lv2:name "In 49"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 54; + lv2:symbol "in50"; + lv2:name "In 50"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 55; + lv2:symbol "in51"; + lv2:name "In 51"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 56; + lv2:symbol "in52"; + lv2:name "In 52"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 57; + lv2:symbol "in53"; + lv2:name "In 53"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 58; + lv2:symbol "in54"; + lv2:name "In 54"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 59; + lv2:symbol "in55"; + lv2:name "In 55"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 60; + lv2:symbol "in56"; + lv2:name "In 56"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 61; + lv2:symbol "in57"; + lv2:name "In 57"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 62; + lv2:symbol "in58"; + lv2:name "In 58"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 63; + lv2:symbol "in59"; + lv2:name "In 59"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 64; + lv2:symbol "in60"; + lv2:name "In 60"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 65; + lv2:symbol "in61"; + lv2:name "In 61"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 66; + lv2:symbol "in62"; + lv2:name "In 62"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 67; + lv2:symbol "in63"; + lv2:name "In 63"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 68; + lv2:symbol "in64"; + lv2:name "In 64"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 69; + lv2:symbol "in65"; + lv2:name "In 65"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 70; + lv2:symbol "in66"; + lv2:name "In 66"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 71; + lv2:symbol "in67"; + lv2:name "In 67"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 72; + lv2:symbol "in68"; + lv2:name "In 68"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 73; + lv2:symbol "in69"; + lv2:name "In 69"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 74; + lv2:symbol "in70"; + lv2:name "In 70"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 75; + lv2:symbol "in71"; + lv2:name "In 71"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 76; + lv2:symbol "in72"; + lv2:name "In 72"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 77; + lv2:symbol "in73"; + lv2:name "In 73"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 78; + lv2:symbol "in74"; + lv2:name "In 74"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 79; + lv2:symbol "in75"; + lv2:name "In 75"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 80; + lv2:symbol "in76"; + lv2:name "In 76"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 81; + lv2:symbol "in77"; + lv2:name "In 77"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 82; + lv2:symbol "in78"; + lv2:name "In 78"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 83; + lv2:symbol "in79"; + lv2:name "In 79"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 84; + lv2:symbol "in80"; + lv2:name "In 80"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 85; + lv2:symbol "in81"; + lv2:name "In 81"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 86; + lv2:symbol "in82"; + lv2:name "In 82"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 87; + lv2:symbol "in83"; + lv2:name "In 83"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 88; + lv2:symbol "in84"; + lv2:name "In 84"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 89; + lv2:symbol "in85"; + lv2:name "In 85"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 90; + lv2:symbol "in86"; + lv2:name "In 86"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 91; + lv2:symbol "in87"; + lv2:name "In 87"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 92; + lv2:symbol "in88"; + lv2:name "In 88"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 93; + lv2:symbol "in89"; + lv2:name "In 89"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 94; + lv2:symbol "in90"; + lv2:name "In 90"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 95; + lv2:symbol "in91"; + lv2:name "In 91"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 96; + lv2:symbol "in92"; + lv2:name "In 92"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 97; + lv2:symbol "in93"; + lv2:name "In 93"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 98; + lv2:symbol "in94"; + lv2:name "In 94"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 99; + lv2:symbol "in95"; + lv2:name "In 95"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 100; + lv2:symbol "in96"; + lv2:name "In 96"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 101; + lv2:symbol "in97"; + lv2:name "In 97"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 102; + lv2:symbol "in98"; + lv2:name "In 98"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 103; + lv2:symbol "in99"; + lv2:name "In 99"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 104; + lv2:symbol "in100"; + lv2:name "In 100"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 105; + lv2:symbol "in101"; + lv2:name "In 101"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 106; + lv2:symbol "in102"; + lv2:name "In 102"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 107; + lv2:symbol "in103"; + lv2:name "In 103"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 108; + lv2:symbol "in104"; + lv2:name "In 104"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 109; + lv2:symbol "in105"; + lv2:name "In 105"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 110; + lv2:symbol "in106"; + lv2:name "In 106"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 111; + lv2:symbol "in107"; + lv2:name "In 107"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 112; + lv2:symbol "in108"; + lv2:name "In 108"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 113; + lv2:symbol "in109"; + lv2:name "In 109"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 114; + lv2:symbol "in110"; + lv2:name "In 110"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 115; + lv2:symbol "in111"; + lv2:name "In 111"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 116; + lv2:symbol "in112"; + lv2:name "In 112"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 117; + lv2:symbol "in113"; + lv2:name "In 113"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 118; + lv2:symbol "in114"; + lv2:name "In 114"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 119; + lv2:symbol "in115"; + lv2:name "In 115"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 120; + lv2:symbol "in116"; + lv2:name "In 116"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 121; + lv2:symbol "in117"; + lv2:name "In 117"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 122; + lv2:symbol "in118"; + lv2:name "In 118"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 123; + lv2:symbol "in119"; + lv2:name "In 119"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 124; + lv2:symbol "in120"; + lv2:name "In 120"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 125; + lv2:symbol "in121"; + lv2:name "In 121"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 126; + lv2:symbol "in122"; + lv2:name "In 122"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 127; + lv2:symbol "in123"; + lv2:name "In 123"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 128; + lv2:symbol "in124"; + lv2:name "In 124"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 129; + lv2:symbol "in125"; + lv2:name "In 125"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 130; + lv2:symbol "in126"; + lv2:name "In 126"; + ], [ + a lv2:AudioPort, lv2:InputPort; + lv2:index 131; + lv2:symbol "in127"; + lv2:name "In 127"; + ], [ + a lv2:AudioPort, lv2:OutputPort; + lv2:index 132; + lv2:symbol "surround0"; + lv2:name "7.1.4 Left"; + pg:group avapor:SevenOneFour; + lv2:designation pg:left; + ], [ + a lv2:AudioPort, lv2:OutputPort; + lv2:index 133; + lv2:symbol "surround1"; + lv2:name "7.1.4 Right"; + pg:group avapor:SevenOneFour; + lv2:designation pg:right; + ], [ + a lv2:AudioPort, lv2:OutputPort; + lv2:index 134; + lv2:symbol "surround2"; + lv2:name "7.1.4 Center"; + pg:group avapor:SevenOneFour; + lv2:designation pg:center; + ], [ + a lv2:AudioPort, lv2:OutputPort; + lv2:index 135; + lv2:symbol "surround3"; + lv2:name "7.1.4 LFE"; + pg:group avapor:SevenOneFour; + lv2:designation pg:lowFrequencyEffects; + ], [ + a lv2:AudioPort, lv2:OutputPort; + lv2:index 136; + lv2:symbol "surround4"; + lv2:name "7.1.4 Left Side"; + pg:group avapor:SevenOneFour; + ], [ + a lv2:AudioPort, lv2:OutputPort; + lv2:index 137; + lv2:symbol "surround5"; + lv2:name "7.1.4 Right Side"; + pg:group avapor:SevenOneFour; + ], [ + a lv2:AudioPort, lv2:OutputPort; + lv2:index 138; + lv2:symbol "surround6"; + lv2:name "7.1.4 Left Rear"; + pg:group avapor:SevenOneFour; + lv2:designation pg:rearLeft; + ], [ + a lv2:AudioPort, lv2:OutputPort; + lv2:index 139; + lv2:symbol "surround7"; + lv2:name "7.1.4 Right Rear"; + pg:group avapor:SevenOneFour; + lv2:designation pg:rearRight; + ], [ + a lv2:AudioPort, lv2:OutputPort; + lv2:index 140; + lv2:symbol "surround8"; + lv2:name "7.1.4 Left Front High"; + pg:group avapor:SevenOneFour; + ], [ + a lv2:AudioPort, lv2:OutputPort; + lv2:index 141; + lv2:symbol "surround9"; + lv2:name "7.1.4 Right Front High"; + pg:group avapor:SevenOneFour; + ], [ + a lv2:AudioPort, lv2:OutputPort; + lv2:index 142; + lv2:symbol "surround10"; + lv2:name "7.1.4 Left Rear High"; + pg:group avapor:SevenOneFour; + ], [ + a lv2:AudioPort, lv2:OutputPort; + lv2:index 143; + lv2:symbol "surround11"; + lv2:name "7.1.4 Right Rear High"; + pg:group avapor:SevenOneFour; + ], [ + a lv2:AudioPort, lv2:OutputPort; + lv2:index 144; + lv2:symbol "binaural0"; + lv2:name "Binaural Left"; + pg:group avapor:Binaural; + lv2:designation pg:left; + ], [ + a lv2:AudioPort, lv2:OutputPort; + lv2:index 145; + lv2:symbol "binaural1"; + lv2:name "Binaural Right"; + pg:group avapor:Binaural; + lv2:designation pg:right; + ], [ + a lv2:AudioPort, lv2:OutputPort; + lv2:index 146; + lv2:symbol "loudness0"; + lv2:name "Loudness Left"; + pg:group avapor:FiveOne; + lv2:designation pg:left; + ], [ + a lv2:AudioPort, lv2:OutputPort; + lv2:index 147; + lv2:symbol "loudness1"; + lv2:name "Loudness Right"; + pg:group avapor:FiveOne; + lv2:designation pg:right; + ], [ + a lv2:AudioPort, lv2:OutputPort; + lv2:index 148; + lv2:symbol "loudness2"; + lv2:name "Loudness Center"; + pg:group avapor:FiveOne; + lv2:designation pg:center; + ], [ + a lv2:AudioPort, lv2:OutputPort; + lv2:index 149; + lv2:symbol "loudness3"; + lv2:name "Loudness LFE"; + pg:group avapor:FiveOne; + lv2:designation pg:lowFrequencyEffects; + ], [ + a lv2:AudioPort, lv2:OutputPort; + lv2:index 150; + lv2:symbol "loudness4"; + lv2:name "Loudness Left Rear"; + pg:group avapor:FiveOne; + lv2:designation pg:rearLeft; + ], [ + a lv2:AudioPort, lv2:OutputPort; + lv2:index 151; + lv2:symbol "loudness5"; + lv2:name "Loudness Right Rear"; + pg:group avapor:FiveOne; + lv2:designation pg:rearRight; + ]. diff --git a/libs/plugins/a-vapor.lv2/manifest.ttl.in b/libs/plugins/a-vapor.lv2/manifest.ttl.in new file mode 100644 index 0000000000..dff68d65a0 --- /dev/null +++ b/libs/plugins/a-vapor.lv2/manifest.ttl.in @@ -0,0 +1,7 @@ +@prefix lv2: . +@prefix rdfs: . + + + a lv2:Plugin ; + lv2:binary ; + rdfs:seeAlso . diff --git a/libs/plugins/a-vapor.lv2/wscript b/libs/plugins/a-vapor.lv2/wscript new file mode 100644 index 0000000000..9dbd5f9e38 --- /dev/null +++ b/libs/plugins/a-vapor.lv2/wscript @@ -0,0 +1,40 @@ +#!/usr/bin/env python +import re +import waflib.extras.autowaf as autowaf +import waflib.Utils as Utils + +def options(opt): + pass + +def configure(conf): + autowaf.check_pkg(conf, 'lv2', atleast_version='1.0.0', uselib_store='LV2_1_0_0') + +def build(bld): + bundle = 'a-vapor.lv2' + module_pat = re.sub('^lib', '', bld.env.cshlib_PATTERN) + module_ext = module_pat[module_pat.rfind('.'):] + + # Build RDF files + for i in ['manifest.ttl', 'a-vapor.ttl']: + obj = bld(features='subst') + obj.source = i + '.in' + obj.target = '../../LV2/%s/%s' % (bundle, i) + obj.install_path = '${LV2DIR}/%s' % bundle + obj.chmod = Utils.O644 + obj.LIB_EXT = module_ext + + # Build plugin library + obj = bld(features = 'c cshlib', + source = 'a-vapor.c', + name = 'a-vapor', + cflags = [ bld.env['compiler_flags_dict']['pic'], bld.env['compiler_flags_dict']['c99'] ], + includes = [ '../../ardour' ], + target = '../../LV2/%s/a-vapor' % bundle, + install_path = '${LV2DIR}/%s' % bundle, + uselib = 'CAIRO', + use = 'LV2_1_0_0' + ) + obj.env.cshlib_PATTERN = module_pat + obj.env.cxxshlib_PATTERN = module_pat + +# vi:set ts=4 sw=4 et: diff --git a/wscript b/wscript index a718adf565..cc1c5b16d4 100644 --- a/wscript +++ b/wscript @@ -335,6 +335,7 @@ children = [ 'libs/plugins/a-eq.lv2', 'libs/plugins/a-reverb.lv2', 'libs/plugins/a-fluidsynth.lv2', + #'libs/plugins/a-vapor.lv2', # arch independent data 'share/export', 'share/media',