diff options
Diffstat (limited to 'lv2')
-rw-r--r-- | lv2/Makefile.am | 36 | ||||
-rw-r--r-- | lv2/drumgizmo.ttl | 156 | ||||
-rw-r--r-- | lv2/input_lv2.cc | 117 | ||||
-rw-r--r-- | lv2/input_lv2.h | 56 | ||||
-rw-r--r-- | lv2/lv2.cc | 250 | ||||
-rw-r--r-- | lv2/lv2_event.h | 281 | ||||
-rw-r--r-- | lv2/lv2_gui.cc | 237 | ||||
-rw-r--r-- | lv2/lv2_gui.h | 40 | ||||
-rw-r--r-- | lv2/lv2_instance.h | 50 | ||||
-rw-r--r-- | lv2/manifest.ttl | 7 | ||||
-rw-r--r-- | lv2/output_lv2.cc | 82 | ||||
-rw-r--r-- | lv2/output_lv2.h | 61 |
12 files changed, 0 insertions, 1373 deletions
diff --git a/lv2/Makefile.am b/lv2/Makefile.am deleted file mode 100644 index 09ef24c..0000000 --- a/lv2/Makefile.am +++ /dev/null @@ -1,36 +0,0 @@ -include $(top_srcdir)/plugingui/Makefile.am.plugingui -include $(top_srcdir)/src/Makefile.am.drumgizmo - -plugindir = $(libdir)/lv2/drumgizmo.lv2 - -if ENABLE_LV2 -plugin_LTLIBRARIES = drumgizmo.la -endif - -plugin_DATA = manifest.ttl drumgizmo.ttl - -EXTRA_DIST = \ - $(plugin_DATA) \ - input_lv2.h \ - output_lv2.h \ - lv2_event.h \ - lv2_gui.h \ - lv2_instance.h - -drumgizmo_la_CXXFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/plugingui \ - -I$(top_srcdir)/include $(SNDFILE_CXXFLAGS) \ - $(PTHREAD_CFLAGS) $(EXPAT_CFLAGS) $(LV2_CFLAGS) \ - $(PLUGIN_GUI_CFLAGS) $(SSEFLAGS) $(ZITA_CPPFLAGS) \ - -DUSE_THREAD $(SAMPLERATE_CFLAGS) - -drumgizmo_la_SOURCES = \ - $(DRUMGIZMO_SOURCES) \ - $(PLUGIN_GUI_SOURCES) \ - lv2.cc \ - lv2_gui.cc \ - input_lv2.cc \ - output_lv2.cc - -drumgizmo_la_LDFLAGS = -module -avoid-version -drumgizmo_la_LIBADD = $(LV2_LIBS) $(PLUGIN_GUI_LIBS) $(DRUMGIZMO_LIBS) - diff --git a/lv2/drumgizmo.ttl b/lv2/drumgizmo.ttl deleted file mode 100644 index 1854d74..0000000 --- a/lv2/drumgizmo.ttl +++ /dev/null @@ -1,156 +0,0 @@ -# LV2 DrumGizmo Plugin -# Copyright 2011 Bent Bisballe Nyeng <deva@aasimon.org> -# -# 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. - -@prefix doap: <http://usefulinc.com/ns/doap#> . -@prefix foaf: <http://xmlns.com/foaf/0.1/> . -@prefix lv2: <http://lv2plug.in/ns/lv2core#> . -@prefix atom: <http://lv2plug.in/ns/ext/atom#> . -@prefix uiext: <http://lv2plug.in/ns/extensions/ui#> . -@prefix state: <http://lv2plug.in/ns/ext/state#> . -@prefix pprops: <http://lv2plug.in/ns/ext/port-props#> . - -<http://drumgizmo.org/lv2-gui> - a uiext:external ; - uiext:binary <drumgizmo.so> . - -<http://drumgizmo.org/lv2> - a lv2:InstrumentPlugin ; - doap:name "DrumGizmo" ; - doap:maintainer [ - foaf:name "DrumGizmo.org"; - foaf:homepage <http://www.drumgizmo.org> ; - ] ; - doap:license <http://usefulinc.com/doap/licenses/gpl> ; - uiext:ui <http://drumgizmo.org/lv2-gui> ; - doap:license <http://opensource.org/licenses/gpl-3.0> ; - lv2:optionalFeature <http://lv2plug.in/ns/ext/uri-map> ; - lv2:optionalFeature <http://lv2plug.in/ns/ext/event> ; - lv2:extensionData state:interface ; - lv2:port [ - a lv2:InputPort, lv2:ControlPort ; - lv2:index 0 ; - lv2:symbol "lv2_freewheel" ; - lv2:name "Freewheel" ; - lv2:default 0.0 ; - lv2:minimum 0.0 ; - lv2:maximum 1.0 ; - lv2:designation <http://lv2plug.in/ns/lv2core#freeWheeling> ; - lv2:portProperty lv2:toggled ; - lv2:portProperty pprops:hasStrictBounds; - ] , [ - a atom:AtomPort , - lv2:InputPort; - atom:bufferType atom:Sequence ; - atom:supports <http://lv2plug.in/ns/ext/midi#MidiEvent> ; - lv2:index 1 ; - lv2:symbol "control" ; - lv2:name "Control" - ] , [ - a lv2:AudioPort , - lv2:OutputPort ; - lv2:index 2 ; - lv2:symbol "out1" ; - lv2:name "Out1" - ], [ - a lv2:AudioPort , - lv2:OutputPort ; - lv2:index 3 ; - lv2:symbol "out2" ; - lv2:name "Out2" - ], [ - a lv2:AudioPort , - lv2:OutputPort ; - lv2:index 4 ; - lv2:symbol "out3" ; - lv2:name "Out3" - ], [ - a lv2:AudioPort , - lv2:OutputPort ; - lv2:index 5 ; - lv2:symbol "out4" ; - lv2:name "Out4" - ], [ - a lv2:AudioPort , - lv2:OutputPort ; - lv2:index 6 ; - lv2:symbol "out5" ; - lv2:name "Out5" - ], [ - a lv2:AudioPort , - lv2:OutputPort ; - lv2:index 7 ; - lv2:symbol "out6" ; - lv2:name "Out6" - ], [ - a lv2:AudioPort , - lv2:OutputPort ; - lv2:index 8 ; - lv2:symbol "out7" ; - lv2:name "Out7" - ], [ - a lv2:AudioPort , - lv2:OutputPort ; - lv2:index 9 ; - lv2:symbol "out8" ; - lv2:name "Out8" - ], [ - a lv2:AudioPort , - lv2:OutputPort ; - lv2:index 10 ; - lv2:symbol "out9" ; - lv2:name "Out9" - ], [ - a lv2:AudioPort , - lv2:OutputPort ; - lv2:index 11 ; - lv2:symbol "out10" ; - lv2:name "Out10" - ], [ - a lv2:AudioPort , - lv2:OutputPort ; - lv2:index 12 ; - lv2:symbol "out11" ; - lv2:name "Out11" - ], [ - a lv2:AudioPort , - lv2:OutputPort ; - lv2:index 13 ; - lv2:symbol "out12" ; - lv2:name "Out12" - ], [ - a lv2:AudioPort , - lv2:OutputPort ; - lv2:index 14 ; - lv2:symbol "out13" ; - lv2:name "Out13" - ], [ - a lv2:AudioPort , - lv2:OutputPort ; - lv2:index 15 ; - lv2:symbol "out14" ; - lv2:name "Out14" - ], [ - a lv2:AudioPort , - lv2:OutputPort ; - lv2:index 16 ; - lv2:symbol "out15" ; - lv2:name "Out15" - ], [ - a lv2:AudioPort , - lv2:OutputPort ; - lv2:index 17 ; - lv2:symbol "out16" ; - lv2:name "Out16" - ] . diff --git a/lv2/input_lv2.cc b/lv2/input_lv2.cc deleted file mode 100644 index aa3ff9d..0000000 --- a/lv2/input_lv2.cc +++ /dev/null @@ -1,117 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/*************************************************************************** - * input_lv2.cc - * - * Wed Jul 13 14:27:02 CEST 2011 - * Copyright 2011 Bent Bisballe Nyeng - * deva@aasimon.org - ****************************************************************************/ - -/* - * This file is part of DrumGizmo. - * - * DrumGizmo 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 3 of the License, or - * (at your option) any later version. - * - * DrumGizmo 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 DrumGizmo; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ -#include "input_lv2.h" - -#include "lv2/lv2plug.in/ns/ext/atom/util.h" - -#include <midimapparser.h> - -#include <hugin.hpp> - -InputLV2::InputLV2() -{ - eventPort = NULL; -} - -InputLV2::~InputLV2() -{ -} - -bool InputLV2::init(Instruments &i) -{ - instruments = &i; - return true; -} - -void InputLV2::setParm(std::string parm, std::string value) -{ -} - -bool InputLV2::start() -{ - return true; -} - -void InputLV2::stop() -{ -} - -void InputLV2::pre() -{ -} - -event_t *InputLV2::run(size_t pos, size_t len, size_t *nevents) -{ - if(eventPort == NULL) { - *nevents = 0; - return NULL; - } - - event_t *list; - size_t listsize; - - list = (event_t *)malloc(sizeof(event_t) * 1000); - listsize = 0; - - LV2_Atom_Event* ev = lv2_atom_sequence_begin(&eventPort->body); - - while(!lv2_atom_sequence_is_end(&eventPort->body, - eventPort->atom.size, - ev)) { - uint8_t* const data = (uint8_t*)(ev+1); - - if ((data[0] & 0xF0) == 0x80) { // note off - int key = data[1]; - (void)key; - DEBUG(lv2input, "Event (off) key:%d\n", key); - } - - if ((data[0] & 0xF0) == 0x90) { // note on - int key = data[1]; - int velocity = data[2]; - - DEBUG(lv2input, "Event key:%d vel:%d\n", key, velocity); - - int i = mmap.lookup(key); - if(velocity && i != -1) { - list[listsize].type = TYPE_ONSET; - list[listsize].instrument = i; - list[listsize].velocity = velocity / 127.0; - list[listsize].offset = ev->time.frames; - listsize++; - } - } - ev = lv2_atom_sequence_next(ev); - } - - *nevents = listsize; - return list; -} - -void InputLV2::post() -{ -} diff --git a/lv2/input_lv2.h b/lv2/input_lv2.h deleted file mode 100644 index 44ad7da..0000000 --- a/lv2/input_lv2.h +++ /dev/null @@ -1,56 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/*************************************************************************** - * input_lv2.h - * - * Wed Jul 13 14:27:02 CEST 2011 - * Copyright 2011 Bent Bisballe Nyeng - * deva@aasimon.org - ****************************************************************************/ - -/* - * This file is part of DrumGizmo. - * - * DrumGizmo 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 3 of the License, or - * (at your option) any later version. - * - * DrumGizmo 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 DrumGizmo; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ -#ifndef __DRUMGIZMO_INPUT_LV2_H__ -#define __DRUMGIZMO_INPUT_LV2_H__ - -#include <audioinputenginemidi.h> - -#include <lv2/lv2plug.in/ns/ext/atom/atom.h> - -class InputLV2 : public AudioInputEngineMidi { -public: - InputLV2(); - ~InputLV2(); - - bool init(Instruments &instruments); - - void setParm(std::string parm, std::string value); - - bool start(); - void stop(); - - void pre(); - event_t *run(size_t pos, size_t len, size_t *nevents); - void post(); - - LV2_Atom_Sequence *eventPort{nullptr}; - -private: - Instruments *instruments{nullptr}; -}; - -#endif/*__DRUMGIZMO_INPUT_LV2_H__*/ diff --git a/lv2/lv2.cc b/lv2/lv2.cc deleted file mode 100644 index 224fca9..0000000 --- a/lv2/lv2.cc +++ /dev/null @@ -1,250 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/*************************************************************************** - * lv2.cc - * - * Wed Jul 13 13:50:33 CEST 2011 - * Copyright 2011 Bent Bisballe Nyeng - * deva@aasimon.org - ****************************************************************************/ - -/* - * This file is part of DrumGizmo. - * - * DrumGizmo 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 3 of the License, or - * (at your option) any later version. - * - * DrumGizmo 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 DrumGizmo; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ -#include <lv2/lv2plug.in/ns/lv2core/lv2.h> -#include <lv2/lv2plug.in/ns/ext/atom/atom.h> - -#include <stdlib.h> -#include <string.h> - -#include "lv2_gui.h" -#include "lv2_instance.h" - -#include <hugin.hpp> - -enum { - FREE_WHEEL_PORT = 0, - MIDI_PORT, - AUDIO_PORT_BASE -}; - -#define DRUMGIZMO_URI "http://drumgizmo.org/lv2" -#define NS_DG DRUMGIZMO_URI "/atom#" - -// Stuff to handle DrumGizmo* transmission from instance to GUI. -static LV2_DrumGizmo_Descriptor dg_descriptor; - -static DrumGizmo *dg_get_pci(LV2_Handle instance) -{ - DGLV2 *dglv2 = (DGLV2 *)instance; - return dglv2->dg; -} - -LV2_State_Status dg_save(LV2_Handle instance, - LV2_State_Store_Function store, - LV2_State_Handle handle, - uint32_t flags, - const LV2_Feature *const * features) -{ - DGLV2 *dglv2 = (DGLV2 *)instance; - - if(!dglv2 || !dglv2->map || !dglv2->map->map) { - // Missing urid feature? - return LV2_STATE_ERR_NO_FEATURE; - } - - std::string config = dglv2->dg->configString(); - - // Backwards compatible fix for errornously stored '\0' byte in < v0.9.8. - // Remove when we reach v1.0 - config += "\n"; - - store(handle, - dglv2->map->map(dglv2->map->handle, NS_DG "config"), - config.data(), - config.length(), - dglv2->map->map(dglv2->map->handle, LV2_ATOM__Chunk), - LV2_STATE_IS_POD | LV2_STATE_IS_PORTABLE); - - return LV2_STATE_SUCCESS; -} - -LV2_State_Status dg_restore(LV2_Handle instance, - LV2_State_Retrieve_Function retrieve, - LV2_State_Handle handle, - uint32_t flags, - const LV2_Feature *const * features) -{ - DGLV2 *dglv2 = (DGLV2 *)instance; - - if(!dglv2 || !dglv2->map || !dglv2->map->map) { - // Missing urid feature? - return LV2_STATE_ERR_NO_FEATURE; - } - - size_t size; - uint32_t type; - - const char* data = - (const char*)retrieve(handle, - dglv2->map->map(dglv2->map->handle, NS_DG "config"), - &size, &type, &flags); - - DEBUG(lv2, "Config string size: %d, data*: %p\n", (int)size, data); - - if(data && size) { - std::string config; - - // Fix for errornously stored '\0' byte in < v0.9.8. - // Remove when we reach v1.0 - if(data[size - 1] == '\0') size--; - - config.append(data, size); - dglv2->dg->setConfigString(config); - } - - return LV2_STATE_SUCCESS; -} - -static LV2_State_Interface dg_persist = { - dg_save, - dg_restore -}; - -LV2_Handle instantiate(const struct _LV2_Descriptor *descriptor, - double sample_rate, - const char *bundle_path, - const LV2_Feature *const *features) -{ - DGLV2 *dglv2 = new DGLV2; - - dglv2->free_wheel_port = NULL; // Not assigned - dglv2->pos = 0; // Start from the beginning - - dglv2->map = NULL; - for (int i = 0 ; features[i] ; i++) { - if (!strcmp(features[i]->URI, LV2_URID_URI "#map")) { - dglv2->map = (LV2_URID_Map*)features[i]->data; - } - } - - dg_descriptor.get_pci = dg_get_pci; - - dglv2->in = new InputLV2(); - dglv2->out = new OutputLV2(); - - dglv2->buffer = NULL; - dglv2->buffer_size = 0; - - dglv2->dg = new DrumGizmo(dglv2->out, dglv2->in); - dglv2->dg->setSamplerate(sample_rate); - - return (LV2_Handle)dglv2; -} - -void connect_port(LV2_Handle instance, uint32_t port, void *data_location) -{ - DGLV2 *dglv2 = (DGLV2 *)instance; - - if(port == FREE_WHEEL_PORT) { - dglv2->free_wheel_port = (float*)data_location; - } - - if(port == MIDI_PORT) { // MIDI in - dglv2->in->eventPort = (LV2_Atom_Sequence*)data_location; - } - - if(port >= AUDIO_PORT_BASE) { // Audio Port - uint32_t audio_port = port - AUDIO_PORT_BASE; - dglv2->out->outputPorts[audio_port].samples = (sample_t*)data_location; - dglv2->out->outputPorts[audio_port].size = 0; - } -} - -void activate(LV2_Handle instance) -{ - // We don't really need to do anything here. - DGLV2 *dglv2 = (DGLV2 *)instance; - (void)dglv2; -} - -void run(LV2_Handle instance, uint32_t sample_count) -{ - DGLV2 *dglv2 = (DGLV2 *)instance; - - if(dglv2->free_wheel_port) { - dglv2->dg->setFreeWheel(*dglv2->free_wheel_port); - } - - if(dglv2->buffer_size != sample_count) { - dglv2->buffer_size = sample_count; - dglv2->dg->setFrameSize(sample_count); - } - dglv2->dg->run(dglv2->pos, dglv2->buffer, sample_count); - - dglv2->pos += sample_count; -} - -void deactivate(LV2_Handle instance) -{ - DGLV2 *dglv2 = (DGLV2 *)instance; - dglv2->dg->stop(); -} - -void cleanup(LV2_Handle instance) -{ - DGLV2 *dglv2 = (DGLV2 *)instance; - delete dglv2->dg; - delete dglv2->in; - delete dglv2->out; -} - -const void* extension_data(const char *uri) -{ - if(!strcmp(uri, PLUGIN_INSTANCE_URI)) return &dg_descriptor; - if(!strcmp(uri, LV2_STATE__interface)) return &dg_persist; - return NULL; -} - -#ifdef __cplusplus -extern "C" { -#endif - -static const LV2_Descriptor descriptor = { - DRUMGIZMO_URI, - 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; - } -} - -#ifdef __cplusplus -} -#endif diff --git a/lv2/lv2_event.h b/lv2/lv2_event.h deleted file mode 100644 index 2c340ba..0000000 --- a/lv2/lv2_event.h +++ /dev/null @@ -1,281 +0,0 @@ -/* - LV2 Event Extension - Copyright 2008-2011 David Robillard <http://drobilla.net> - Copyright 2006-2007 Lars Luthman <lars.luthman@gmail.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. -*/ - -#ifndef LV2_EVENT_H -#define LV2_EVENT_H - -#define LV2_EVENT_URI "http://lv2plug.in/ns/ext/event" -#define LV2_EVENT_AUDIO_STAMP 0 - -#include <stdint.h> - -/** - @file event.h - C API for the LV2 Event extension <http://lv2plug.in/ns/ext/event>. - - This extension is a generic transport mechanism for time stamped events - of any type (e.g. MIDI, OSC, ramps, etc). Each port can transport mixed - events of any type; the type of events and timestamps are defined by a URI - which is mapped to an integer by the host for performance reasons. - - This extension requires the host to support the LV2 URI Map extension. - Any host which supports this extension MUST guarantee that any call to - the LV2 URI Map uri_to_id function with the URI of this extension as the - 'map' argument returns a value within the range of uint16_t. -*/ - -/** - The best Pulses Per Quarter Note for tempo-based uint32_t timestamps. - Equal to 2^12 * 5 * 7 * 9 * 11 * 13 * 17, which is evenly divisble - by all integers from 1 through 18 inclusive, and powers of 2 up to 2^12. -*/ -static const uint32_t LV2_EVENT_PPQN = 3136573440U; - -/** - An LV2 event (header only). - - LV2 events are generic time-stamped containers for any type of event. - The type field defines the format of a given event's contents. - - This struct defines the header of an LV2 event. An LV2 event is a single - chunk of POD (plain old data), usually contained in a flat buffer (see - LV2_EventBuffer below). Unless a required feature says otherwise, hosts may - assume a deep copy of an LV2 event can be created safely using a simple: - - memcpy(ev_copy, ev, sizeof(LV2_Event) + ev->size); (or equivalent) -*/ -typedef struct { - - /** - The frames portion of timestamp. The units used here can optionally be - set for a port (with the lv2ev:timeUnits property), otherwise this is - audio frames, corresponding to the sample_count parameter of the LV2 run - method (e.g. frame 0 is the first frame for that call to run). - */ - uint32_t frames; - - /** - The sub-frames portion of timestamp. The units used here can optionally - be set for a port (with the lv2ev:timeUnits property), otherwise this is - 1/(2^32) of an audio frame. - */ - uint32_t subframes; - - /** - The type of this event, as a number which represents some URI - defining an event type. This value MUST be some value previously - returned from a call to the uri_to_id function defined in the LV2 - URI map extension (see lv2_uri_map.h). - There are special rules which must be followed depending on the type - of an event. If the plugin recognizes an event type, the definition - of that event type will describe how to interpret the event, and - any required behaviour. Otherwise, if the type is 0, this event is a - non-POD event and lv2_event_unref MUST be called if the event is - 'dropped' (see above). Even if the plugin does not understand an event, - it may pass the event through to an output by simply copying (and NOT - calling lv2_event_unref). These rules are designed to allow for generic - event handling plugins and large non-POD events, but with minimal hassle - on simple plugins that "don't care" about these more advanced features. - */ - uint16_t type; - - /** - The size of the data portion of this event in bytes, which immediately - follows. The header size (12 bytes) is not included in this value. - */ - uint16_t size; - - /* size bytes of data follow here */ - -} LV2_Event; - - -/** - A buffer of LV2 events (header only). - - Like events (which this contains) an event buffer is a single chunk of POD: - the entire buffer (including contents) can be copied with a single memcpy. - The first contained event begins sizeof(LV2_EventBuffer) bytes after the - start of this struct. - - After this header, the buffer contains an event header (defined by struct - LV2_Event), followed by that event's contents (padded to 64 bits), followed - by another header, etc: - - | | | | | | | - | | | | | | | | | | | | | | | | | | | | | | | | | - |FRAMES |SUBFRMS|TYP|LEN|DATA..DATA..PAD|FRAMES | ... -*/ -typedef struct { - - /** - The contents of the event buffer. This may or may not reside in the - same block of memory as this header, plugins must not assume either. - The host guarantees this points to at least capacity bytes of allocated - memory (though only size bytes of that are valid events). - */ - uint8_t* data; - - /** - The size of this event header in bytes (including everything). - - This is to allow for extending this header in the future without - breaking binary compatibility. Whenever this header is copied, - it MUST be done using this field (and NOT the sizeof this struct). - */ - uint16_t header_size; - - /** - The type of the time stamps for events in this buffer. - As a special exception, '0' always means audio frames and subframes - (1/UINT32_MAX'th of a frame) in the sample rate passed to instantiate. - - INPUTS: The host must set this field to the numeric ID of some URI - defining the meaning of the frames/subframes fields of contained events - (obtained by the LV2 URI Map uri_to_id function with the URI of this - extension as the 'map' argument, see lv2_uri_map.h). The host must - never pass a plugin a buffer which uses a stamp type the plugin does not - 'understand'. The value of this field must never change, except when - connect_port is called on the input port, at which time the host MUST - have set the stamp_type field to the value that will be used for all - subsequent run calls. - - OUTPUTS: The plugin may set this to any value that has been returned - from uri_to_id with the URI of this extension for a 'map' argument. - When connected to a buffer with connect_port, output ports MUST set this - field to the type of time stamp they will be writing. On any call to - connect_port on an event input port, the plugin may change this field on - any output port, it is the responsibility of the host to check if any of - these values have changed and act accordingly. - */ - uint16_t stamp_type; - - /** - The number of events in this buffer. - - INPUTS: The host must set this field to the number of events contained - in the data buffer before calling run(). The plugin must not change - this field. - - OUTPUTS: The plugin must set this field to the number of events it has - written to the buffer before returning from run(). Any initial value - should be ignored by the plugin. - */ - uint32_t event_count; - - /** - The size of the data buffer in bytes. - This is set by the host and must not be changed by the plugin. - The host is allowed to change this between run() calls. - */ - uint32_t capacity; - - /** - The size of the initial portion of the data buffer containing data. - - INPUTS: The host must set this field to the number of bytes used - by all events it has written to the buffer (including headers) - before calling the plugin's run(). - The plugin must not change this field. - - OUTPUTS: The plugin must set this field to the number of bytes - used by all events it has written to the buffer (including headers) - before returning from run(). - Any initial value should be ignored by the plugin. - */ - uint32_t size; - -} LV2_Event_Buffer; - - -/** - Opaque pointer to host data. -*/ -typedef void* LV2_Event_Callback_Data; - - -/** - Non-POD events feature. - - To support this feature the host must pass an LV2_Feature struct to the - plugin's instantiate method with URI "http://lv2plug.in/ns/ext/event" - and data pointed to an instance of this struct. Note this feature - is not mandatory to support the event extension. -*/ -typedef struct { - - /** - Opaque pointer to host data. - - The plugin MUST pass this to any call to functions in this struct. - Otherwise, it must not be interpreted in any way. - */ - LV2_Event_Callback_Data callback_data; - - /** - Take a reference to a non-POD event. - - If a plugin receives an event with type 0, it means the event is a - pointer to some object in memory and not a flat sequence of bytes - in the buffer. When receiving a non-POD event, the plugin already - has an implicit reference to the event. If the event is stored AND - passed to an output, lv2_event_ref MUST be called on that event. - If the event is only stored OR passed through, this is not necessary - (as the plugin already has 1 implicit reference). - - @param event An event received at an input that will not be copied to - an output or stored in any way. - - @param context The calling context. Like event types, this is a mapped - URI, see lv2_context.h. Simple plugin with just a run() method should - pass 0 here (the ID of the 'standard' LV2 run context). The host - guarantees that this function is realtime safe iff @a context is - realtime safe. - - PLUGINS THAT VIOLATE THESE RULES MAY CAUSE CRASHES AND MEMORY LEAKS. - */ - uint32_t (*lv2_event_ref)(LV2_Event_Callback_Data callback_data, - LV2_Event* event); - - /** - Drop a reference to a non-POD event. - - If a plugin receives an event with type 0, it means the event is a - pointer to some object in memory and not a flat sequence of bytes - in the buffer. If the plugin does not pass the event through to - an output or store it internally somehow, it MUST call this function - on the event (more information on using non-POD events below). - - @param event An event received at an input that will not be copied to an - output or stored in any way. - - @param context The calling context. Like event types, this is a mapped - URI, see lv2_context.h. Simple plugin with just a run() method should - pass 0 here (the ID of the 'standard' LV2 run context). The host - guarantees that this function is realtime safe iff @a context is - realtime safe. - - PLUGINS THAT VIOLATE THESE RULES MAY CAUSE CRASHES AND MEMORY LEAKS. - */ - uint32_t (*lv2_event_unref)(LV2_Event_Callback_Data callback_data, - LV2_Event* event); - -} LV2_Event_Feature; - - -#endif /* LV2_EVENT_H */ diff --git a/lv2/lv2_gui.cc b/lv2/lv2_gui.cc deleted file mode 100644 index f683c8c..0000000 --- a/lv2/lv2_gui.cc +++ /dev/null @@ -1,237 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/*************************************************************************** - * lv2.cc - * - * Wed Jul 13 13:50:33 CEST 2011 - * Copyright 2011 Bent Bisballe Nyeng - * deva@aasimon.org - ****************************************************************************/ - -/* - * This file is part of DrumGizmo. - * - * DrumGizmo 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 3 of the License, or - * (at your option) any later version. - * - * DrumGizmo 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 DrumGizmo; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ -#include "lv2_gui.h" - -#include <stdio.h> -#include <string.h> - -#include <lv2/lv2plug.in/ns/ext/instance-access/instance-access.h> -#include <lv2/lv2plug.in/ns/extensions/ui/ui.h> - -#include "lv2_instance.h" - -// From: http://codesearch.google.com/#50sg5qT6WNE/src/lv2_ui_dssi.c -// git://repo.or.cz/nekobee.git/src/lv2_ui_dssi.c - -#define DRUMGIZMO_UI_URI "http://drumgizmo.org/lv2-gui" - -#include <plugingui.h> - -/** - * When LV2_EXTERNAL_UI_URI UI is instantiated, the returned - * LV2UI_Widget handle must be cast to pointer to struct lv2_external_ui. - * UI is created in invisible state. - */ -struct lv2_external_ui -{ - /** - * Host calls this function regulary. UI library implementing the - * callback may do IPC or redraw the UI. - * - * @param _this_ the UI context - */ - void (* run)(struct lv2_external_ui * _this_); - - /** - * Host calls this function to make the plugin UI visible. - * - * @param _this_ the UI context - */ - void (* show)(struct lv2_external_ui * _this_); - - /** - * Host calls this function to make the plugin UI invisible again. - * - * @param _this_ the UI context - */ - void (* hide)(struct lv2_external_ui * _this_); -}; - -/** UI extension suitable for out-of-process UIs */ -#define LV2_EXTERNAL_UI_URI "http://lv2plug.in/ns/extensions/ui#external" - -/** - * On UI instantiation, host must supply LV2_EXTERNAL_UI_URI - * feature. LV2_Feature::data must be pointer to struct lv2_external_ui_host. */ -struct lv2_external_ui_host -{ - /** - * Callback that plugin UI will call - * when UI (GUI window) is closed by user. - * This callback wil; be called during execution of lv2_external_ui::run() - * (i.e. not from background thread). - * - * After this callback is called, UI is defunct. Host must call - * LV2UI_Descriptor::cleanup(). If host wants to make the UI visible - * again UI must be reinstantiated. - * - * @param controller Host context associated with plugin UI, as - * supplied to LV2UI_Descriptor::instantiate() - */ - void (* ui_closed)(LV2UI_Controller controller); - - /** - * Optional (may be NULL) "user friendly" identifier which the UI - * may display to allow a user to easily associate this particular - * UI instance with the correct plugin instance as it is represented - * by the host (e.g. "track 1" or "channel 4"). - * - * If supplied by host, the string will be referenced only during - * LV2UI_Descriptor::instantiate() - */ - const char * plugin_human_id; -}; - -struct DG_GUI { - struct lv2_external_ui virt; - - LV2_Handle instance_handle; - LV2_Extension_Data_Feature *data_access; - DrumGizmo *instance; - LV2UI_Controller controller; - - GUI::PluginGUI *gui; - struct lv2_external_ui_host *ui_host_ptr; -}; - -static void ui_run(struct lv2_external_ui * _this_) -{ - struct DG_GUI *dggui = (struct DG_GUI *)_this_; - dggui->gui->processEvents(); -} - -static void ui_show(struct lv2_external_ui * _this_) -{ - struct DG_GUI *dggui = (struct DG_GUI *)_this_; - dggui->gui->show(); -} - -static void ui_hide(struct lv2_external_ui * _this_) -{ - struct DG_GUI *dggui = (struct DG_GUI *)_this_; - if(dggui->gui) dggui->gui->hide(); -} - -static void closeHandler(void *ptr) -{ - struct DG_GUI *gui = (struct DG_GUI *)ptr; - - if(gui->ui_host_ptr && gui->ui_host_ptr->ui_closed) { - gui->ui_host_ptr->ui_closed(gui->controller); - } - - delete gui->gui; - gui->gui = NULL; -} - -static LV2UI_Handle ui_instantiate(const struct _LV2UI_Descriptor * descriptor, - const char * plugin_uri, - const char * bundle_path, - LV2UI_Write_Function write_function, - LV2UI_Controller controller, - LV2UI_Widget * widget, - const LV2_Feature * const * features) -{ - printf("ui_instantiate\n"); - - struct DG_GUI* pt = new struct DG_GUI; - - pt->ui_host_ptr = NULL; - pt->controller = controller; - - while (*features != NULL) { - std::string uri = (*features)->URI; - void *data = (*features)->data; - - printf("DGUI: feature: %s\n", uri.c_str()); - - if(uri == LV2_INSTANCE_ACCESS_URI) { - pt->instance_handle = data; - } - - if(uri == LV2_DATA_ACCESS_URI) { - pt->data_access = (LV2_Extension_Data_Feature *)data; - } - - if(uri == LV2_EXTERNAL_UI_URI) { - pt->ui_host_ptr = (struct lv2_external_ui_host *)data; - } - features++; - } - - LV2_DrumGizmo_Descriptor *dgd = - (LV2_DrumGizmo_Descriptor *)(*pt->data_access->data_access)(PLUGIN_INSTANCE_URI); - - pt->instance = dgd->get_pci(pt->instance_handle); - pt->virt.run = ui_run; - pt->virt.show = ui_show; - pt->virt.hide = ui_hide; - pt->gui = new GUI::PluginGUI(); - pt->gui->setWindowClosedCallback(closeHandler, pt); - - *widget = (LV2UI_Widget)pt; - - return pt; -} - -static void ui_cleanup(LV2UI_Handle ui) -{ - struct DG_GUI* pt = (struct DG_GUI*)ui; - delete pt->gui; - pt->gui = NULL; - delete pt; -} - -static void ui_port_event(LV2UI_Handle ui, - uint32_t port_index, - uint32_t buffer_size, - uint32_t format, - const void * buffer) -{ -} - -#ifdef __cplusplus -extern "C" { -#endif - -static LV2UI_Descriptor descriptor = { - DRUMGIZMO_UI_URI, - ui_instantiate, - ui_cleanup, - ui_port_event, - NULL -}; - -const LV2UI_Descriptor *lv2ui_descriptor(uint32_t index) -{ - if(index == 0) return &descriptor; - return NULL; -} - -#ifdef __cplusplus -} -#endif diff --git a/lv2/lv2_gui.h b/lv2/lv2_gui.h deleted file mode 100644 index a929da3..0000000 --- a/lv2/lv2_gui.h +++ /dev/null @@ -1,40 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/*************************************************************************** - * lv2_gui.h - * - * Fri Oct 21 10:48:53 CEST 2011 - * Copyright 2011 Bent Bisballe Nyeng - * deva@aasimon.org - ****************************************************************************/ - -/* - * This file is part of DrumGizmo. - * - * DrumGizmo 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 3 of the License, or - * (at your option) any later version. - * - * DrumGizmo 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 DrumGizmo; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ -#ifndef __DRUMGIZMO_LV2_GUI_H__ -#define __DRUMGIZMO_LV2_GUI_H__ - -#include <lv2/lv2plug.in/ns/lv2core/lv2.h> -#include <lv2/lv2plug.in/ns/ext/data-access/data-access.h> - -#define PLUGIN_INSTANCE_URI "http://drumgizmo.org/ns/drumgizmo-plugin-instance" - -class DrumGizmo; -struct LV2_DrumGizmo_Descriptor { - DrumGizmo *(*get_pci)(LV2_Handle instance); -}; - -#endif/*__DRUMGIZMO_LV2_GUI_H__*/ diff --git a/lv2/lv2_instance.h b/lv2/lv2_instance.h deleted file mode 100644 index d1abb9a..0000000 --- a/lv2/lv2_instance.h +++ /dev/null @@ -1,50 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/*************************************************************************** - * lv2_instance.h - * - * Sun Nov 20 15:27:41 CET 2011 - * Copyright 2011 Bent Bisballe Nyeng - * deva@aasimon.org - ****************************************************************************/ - -/* - * This file is part of DrumGizmo. - * - * DrumGizmo 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 3 of the License, or - * (at your option) any later version. - * - * DrumGizmo 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 DrumGizmo; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ -#ifndef __DRUMGIZMO_LV2_INSTANCE_H__ -#define __DRUMGIZMO_LV2_INSTANCE_H__ - -#include <lv2/lv2plug.in/ns/lv2core/lv2.h> -#include <lv2/lv2plug.in/ns/ext/state/state.h> -#include <lv2/lv2plug.in/ns/ext/urid/urid.h> - -#include "input_lv2.h" -#include "output_lv2.h" - -#include <drumgizmo.h> - -typedef struct { - InputLV2 *in; - OutputLV2 *out; - DrumGizmo *dg; - sample_t *buffer; - size_t buffer_size; - LV2_URID_Map* map; - float* free_wheel_port; - size_t pos; -} DGLV2; - -#endif/*__DRUMGIZMO_LV2_INSTANCE_H__*/ diff --git a/lv2/manifest.ttl b/lv2/manifest.ttl deleted file mode 100644 index 65a8953..0000000 --- a/lv2/manifest.ttl +++ /dev/null @@ -1,7 +0,0 @@ -@prefix lv2: <http://lv2plug.in/ns/lv2core#> . -@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . - -<http://drumgizmo.org/lv2> - a lv2:Plugin ; - lv2:binary <drumgizmo.so> ; - rdfs:seeAlso <drumgizmo.ttl> . diff --git a/lv2/output_lv2.cc b/lv2/output_lv2.cc deleted file mode 100644 index fdd795b..0000000 --- a/lv2/output_lv2.cc +++ /dev/null @@ -1,82 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/*************************************************************************** - * output_lv2.cc - * - * Wed Jul 13 14:27:06 CEST 2011 - * Copyright 2011 Bent Bisballe Nyeng - * deva@aasimon.org - ****************************************************************************/ - -/* - * This file is part of DrumGizmo. - * - * DrumGizmo 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 3 of the License, or - * (at your option) any later version. - * - * DrumGizmo 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 DrumGizmo; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ -#include "output_lv2.h" - -#include <string.h> - -OutputLV2::OutputLV2() -{ - for(size_t i = 0; i < NUM_OUTPUTS; i++) { - outputPorts[i].size = 0; - outputPorts[i].samples = NULL; - } -} - -OutputLV2::~OutputLV2() -{ -} - -bool OutputLV2::init(Channels channels) -{ - return true; -} - -void OutputLV2::setParm(std::string parm, std::string value) -{ -} - -bool OutputLV2::start() -{ - return true; -} - -void OutputLV2::stop() -{ -} - -void OutputLV2::pre(size_t nsamples) -{ -} - -void OutputLV2::run(int ch, sample_t *samples, size_t nsamples) -{ - if(ch < NUM_OUTPUTS) { - if(outputPorts[ch].samples) { - memcpy(outputPorts[ch].samples, samples, nsamples * sizeof(sample_t)); - } - } -} - -void OutputLV2::post(size_t nsamples) -{ -} - -sample_t *OutputLV2::getBuffer(int ch) -{ - if(ch < NUM_OUTPUTS) return outputPorts[ch].samples; - return NULL; -} diff --git a/lv2/output_lv2.h b/lv2/output_lv2.h deleted file mode 100644 index 88b8a4b..0000000 --- a/lv2/output_lv2.h +++ /dev/null @@ -1,61 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/*************************************************************************** - * output_lv2.h - * - * Wed Jul 13 14:27:06 CEST 2011 - * Copyright 2011 Bent Bisballe Nyeng - * deva@aasimon.org - ****************************************************************************/ - -/* - * This file is part of DrumGizmo. - * - * DrumGizmo 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 3 of the License, or - * (at your option) any later version. - * - * DrumGizmo 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 DrumGizmo; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ -#ifndef __DRUMGIZMO_OUTPUT_LV2_H__ -#define __DRUMGIZMO_OUTPUT_LV2_H__ - -#include <audiooutputengine.h> - -#define NUM_OUTPUTS 64 - -class OutputPort { -public: - size_t size; - sample_t *samples; -}; - -class OutputLV2 : public AudioOutputEngine { -public: - OutputLV2(); - ~OutputLV2(); - - bool init(Channels channels); - - void setParm(std::string parm, std::string value); - - bool start(); - void stop(); - - void pre(size_t nsamples); - void run(int ch, sample_t *samples, size_t nsamples); - void post(size_t nsamples); - - sample_t *getBuffer(int c); - - OutputPort outputPorts[NUM_OUTPUTS]; -}; - -#endif/*__DRUMGIZMO_OUTPUT_LV2_H__*/ |