Commit 54de16fc authored by Hanspeter Portner's avatar Hanspeter Portner

prototype osc_inspector and midi_inspector.

parent cd9b98d8
......@@ -5,6 +5,7 @@ project(sherlock.lv2)
include_directories(${PROJECT_SOURCE_DIR})
include_directories(${PROJECT_SOURCE_DIR}/libosc)
include_directories(${PROJECT_SOURCE_DIR}/eo_ui.lv2)
include_directories(${PROJECT_SOURCE_DIR}/osc.lv2)
set(CMAKE_C_FLAGS "-std=gnu99 -Wextra -Wno-unused-parameter -ffast-math -fvisibility=hidden ${CMAKE_C_FLAGS}")
set(CMAKE_C_FLAGS "-Wshadow -Wimplicit-function-declaration -Wredundant-decls -Wmissing-prototypes -Wstrict-prototypes ${CMAKE_C_FLAGS}")
......@@ -15,6 +16,7 @@ set(SHERLOCK_MINOR_VERSION 1)
set(SHERLOCK_MICRO_VERSION 1)
set(SHERLOCK_VERSION "${SHERLOCK_MAJOR_VERSION}.${SHERLOCK_MINOR_VERSION}.${SHERLOCK_MICRO_VERSION}")
add_definitions("-DSHERLOCK_VERSION=\"${SHERLOCK_VERSION}\"")
add_definitions("-D_GNU_SOURCE=1") # asprintf
set(DEST lib/lv2/sherlock.lv2)
if(WIN32)
......@@ -48,14 +50,18 @@ endif()
add_library(sherlock MODULE
sherlock.c
atom_inspector.c)
atom_inspector.c
midi_inspector.c
osc_inspector.c)
target_link_libraries(sherlock ${LIBS})
set_target_properties(sherlock PROPERTIES PREFIX "")
install(TARGETS sherlock DESTINATION ${DEST})
add_library(sherlock_ui MODULE
sherlock_ui.c
atom_inspector_ui.c)
atom_inspector_ui.c
midi_inspector_ui.c
osc_inspector_ui.c)
target_link_libraries(sherlock_ui ${LIBS_UI})
set_target_properties(sherlock_ui PROPERTIES PREFIX "")
install(TARGETS sherlock_ui DESTINATION ${DEST})
......
......@@ -76,13 +76,6 @@ connect_port(LV2_Handle instance, uint32_t port, void *data)
}
}
static void
activate(LV2_Handle instance)
{
handle_t *handle = (handle_t *)instance;
//nothing
}
static void
run(LV2_Handle instance, uint32_t nsamples)
{
......@@ -120,19 +113,13 @@ run(LV2_Handle instance, uint32_t nsamples)
lv2_atom_forge_pad(forge, size);
}
if(ref)
lv2_atom_forge_pop(forge, &frame);
else
lv2_atom_sequence_clear(handle->notify);
}
static void
deactivate(LV2_Handle instance)
{
handle_t *handle = (handle_t *)instance;
//nothing
}
static void
cleanup(LV2_Handle instance)
{
......@@ -141,19 +128,13 @@ cleanup(LV2_Handle instance)
free(handle);
}
static const void*
extension_data(const char* uri)
{
return NULL;
}
const LV2_Descriptor atom_inspector = {
.URI = SHERLOCK_ATOM_INSPECTOR_URI,
.instantiate = instantiate,
.connect_port = connect_port,
.activate = activate,
.activate = NULL,
.run = run,
.deactivate = deactivate,
.deactivate = NULL,
.cleanup = cleanup,
.extension_data = extension_data
.extension_data = NULL
};
......@@ -59,3 +59,61 @@ sherlock:atom_inspector_kx
a kx:Widget ;
ui:binary <sherlock_ui@LIB_EXT@> ;
rdfs:seeAlso <sherlock.ttl> .
# MIDI Inspector Plugin
sherlock:midi_inspector
a lv2:Plugin ;
lv2:minorVersion @SHERLOCK_MINOR_VERSION@ ;
lv2:microVersion @SHERLOCK_MICRO_VERSION@ ;
lv2:binary <sherlock@LIB_EXT@> ;
@EO_UI_WRAP@ui:ui sherlock:midi_inspector_eo ;
@UI_UI_WRAP@ui:ui sherlock:midi_inspector_ui ;
@KX_UI_WRAP@ui:ui sherlock:midi_inspector_kx ;
@X11_UI_WRAP@ui:ui sherlock:midi_inspector_x11 ;
rdfs:seeAlso <sherlock.ttl> .
sherlock:midi_inspector_eo
a ui:EoUI ;
ui:binary <sherlock_ui@LIB_EXT@> ;
rdfs:seeAlso <sherlock.ttl> .
sherlock:midi_inspector_ui
a ui:UI ;
ui:binary <sherlock_ui@LIB_EXT@> ;
rdfs:seeAlso <sherlock.ttl> .
sherlock:midi_inspector_x11
a ui:X11UI ;
ui:binary <sherlock_ui@LIB_EXT@> ;
rdfs:seeAlso <sherlock.ttl> .
sherlock:midi_inspector_kx
a kx:Widget ;
ui:binary <sherlock_ui@LIB_EXT@> ;
rdfs:seeAlso <sherlock.ttl> .
# OSC Inspector Plugin
sherlock:osc_inspector
a lv2:Plugin ;
lv2:minorVersion @SHERLOCK_MINOR_VERSION@ ;
lv2:microVersion @SHERLOCK_MICRO_VERSION@ ;
lv2:binary <sherlock@LIB_EXT@> ;
@EO_UI_WRAP@ui:ui sherlock:osc_inspector_eo ;
@UI_UI_WRAP@ui:ui sherlock:osc_inspector_ui ;
@KX_UI_WRAP@ui:ui sherlock:osc_inspector_kx ;
@X11_UI_WRAP@ui:ui sherlock:osc_inspector_x11 ;
rdfs:seeAlso <sherlock.ttl> .
sherlock:osc_inspector_eo
a ui:EoUI ;
ui:binary <sherlock_ui@LIB_EXT@> ;
rdfs:seeAlso <sherlock.ttl> .
sherlock:osc_inspector_ui
a ui:UI ;
ui:binary <sherlock_ui@LIB_EXT@> ;
rdfs:seeAlso <sherlock.ttl> .
sherlock:osc_inspector_x11
a ui:X11UI ;
ui:binary <sherlock_ui@LIB_EXT@> ;
rdfs:seeAlso <sherlock.ttl> .
sherlock:osc_inspector_kx
a kx:Widget ;
ui:binary <sherlock_ui@LIB_EXT@> ;
rdfs:seeAlso <sherlock.ttl> .
/*
* Copyright (c) 2015 Hanspeter Portner (dev@open-music-kontrollers.ch)
*
* This is free software: you can redistribute it and/or modify
* it under the terms of the Artistic License 2.0 as published by
* The Perl Foundation.
*
* This source 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
* Artistic License 2.0 for more details.
*
* You should have received a copy of the Artistic License 2.0
* along the source as a COPYING file. If not, obtain it from
* http://www.perlfoundation.org/artistic_license_2_0.
*/
#include <stdio.h>
#include <stdlib.h>
#include <sherlock.h>
#include "lv2/lv2plug.in/ns/ext/midi/midi.h"
typedef struct _handle_t handle_t;
struct _handle_t {
LV2_URID_Map *map;
const LV2_Atom_Sequence *control_in;
LV2_Atom_Sequence *control_out;
LV2_Atom_Sequence *notify;
LV2_Atom_Forge forge;
LV2_URID midi_event;
};
static LV2_Handle
instantiate(const LV2_Descriptor* descriptor, double rate,
const char *bundle_path, const LV2_Feature *const *features)
{
int i;
handle_t *handle = calloc(1, sizeof(handle_t));
if(!handle)
return NULL;
for(i=0; features[i]; i++)
if(!strcmp(features[i]->URI, LV2_URID__map))
handle->map = (LV2_URID_Map *)features[i]->data;
if(!handle->map)
{
fprintf(stderr, "%s: Host does not support urid:map\n", descriptor->URI);
free(handle);
return NULL;
}
handle->midi_event = handle->map->map(handle->map->handle, LV2_MIDI__MidiEvent);
lv2_atom_forge_init(&handle->forge, handle->map);
return handle;
}
static void
connect_port(LV2_Handle instance, uint32_t port, void *data)
{
handle_t *handle = (handle_t *)instance;
switch(port)
{
case 0:
handle->control_in = (const LV2_Atom_Sequence *)data;
break;
case 1:
handle->control_out = (LV2_Atom_Sequence *)data;
break;
case 2:
handle->notify = (LV2_Atom_Sequence *)data;
break;
default:
break;
}
}
static void
run(LV2_Handle instance, uint32_t nsamples)
{
handle_t *handle = (handle_t *)instance;
uint32_t capacity;
LV2_Atom_Forge *forge = &handle->forge;
LV2_Atom_Forge_Frame frame [2];
LV2_Atom_Forge_Ref ref;
// size of input sequence
size_t size = sizeof(LV2_Atom) + handle->control_in->atom.size;
// copy whole input sequence to through port
capacity = handle->control_out->atom.size;
lv2_atom_forge_set_buffer(forge, (uint8_t *)handle->control_out, capacity);
ref = lv2_atom_forge_raw(forge, handle->control_in, size);
if(!ref)
lv2_atom_sequence_clear(handle->control_out);
// forge whole sequence as single event
capacity = handle->notify->atom.size;
lv2_atom_forge_set_buffer(forge, (uint8_t *)handle->notify, capacity);
ref = lv2_atom_forge_sequence_head(forge, &frame[0], 0);
if(ref)
ref = lv2_atom_forge_frame_time(forge, 0);
if(ref)
ref = lv2_atom_forge_sequence_head(forge, &frame[1], 0);
// only serialize MIDI events to UI
LV2_ATOM_SEQUENCE_FOREACH(handle->control_in, ev)
{
if(ev->body.type == handle->midi_event)
{
if(ref)
ref = lv2_atom_forge_frame_time(forge, ev->time.frames);
if(ref)
ref = lv2_atom_forge_raw(forge, &ev->body, sizeof(LV2_Atom) + ev->body.size);
if(ref)
lv2_atom_forge_pad(forge, ev->body.size);
}
}
if(ref)
lv2_atom_forge_pop(forge, &frame[1]);
if(ref)
lv2_atom_forge_pop(forge, &frame[0]);
else
lv2_atom_sequence_clear(handle->notify);
}
static void
cleanup(LV2_Handle instance)
{
handle_t *handle = (handle_t *)instance;
free(handle);
}
const LV2_Descriptor midi_inspector = {
.URI = SHERLOCK_MIDI_INSPECTOR_URI,
.instantiate = instantiate,
.connect_port = connect_port,
.activate = NULL,
.run = run,
.deactivate = NULL,
.cleanup = cleanup,
.extension_data = NULL
};
This diff is collapsed.
/*
* Copyright (c) 2015 Hanspeter Portner (dev@open-music-kontrollers.ch)
*
* This is free software: you can redistribute it and/or modify
* it under the terms of the Artistic License 2.0 as published by
* The Perl Foundation.
*
* This source 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
* Artistic License 2.0 for more details.
*
* You should have received a copy of the Artistic License 2.0
* along the source as a COPYING file. If not, obtain it from
* http://www.perlfoundation.org/artistic_license_2_0.
*/
#include <stdio.h>
#include <stdlib.h>
#include <sherlock.h>
#include <lv2_osc.h>
typedef struct _handle_t handle_t;
struct _handle_t {
LV2_URID_Map *map;
const LV2_Atom_Sequence *control_in;
LV2_Atom_Sequence *control_out;
LV2_Atom_Sequence *notify;
LV2_Atom_Forge forge;
osc_forge_t oforge;
};
static LV2_Handle
instantiate(const LV2_Descriptor* descriptor, double rate,
const char *bundle_path, const LV2_Feature *const *features)
{
int i;
handle_t *handle = calloc(1, sizeof(handle_t));
if(!handle)
return NULL;
for(i=0; features[i]; i++)
if(!strcmp(features[i]->URI, LV2_URID__map))
handle->map = (LV2_URID_Map *)features[i]->data;
if(!handle->map)
{
fprintf(stderr, "%s: Host does not support urid:map\n", descriptor->URI);
free(handle);
return NULL;
}
osc_forge_init(&handle->oforge, handle->map);
lv2_atom_forge_init(&handle->forge, handle->map);
return handle;
}
static void
connect_port(LV2_Handle instance, uint32_t port, void *data)
{
handle_t *handle = (handle_t *)instance;
switch(port)
{
case 0:
handle->control_in = (const LV2_Atom_Sequence *)data;
break;
case 1:
handle->control_out = (LV2_Atom_Sequence *)data;
break;
case 2:
handle->notify = (LV2_Atom_Sequence *)data;
break;
default:
break;
}
}
static void
run(LV2_Handle instance, uint32_t nsamples)
{
handle_t *handle = (handle_t *)instance;
uint32_t capacity;
LV2_Atom_Forge *forge = &handle->forge;
LV2_Atom_Forge_Frame frame [2];
LV2_Atom_Forge_Ref ref;
// size of input sequence
size_t size = sizeof(LV2_Atom) + handle->control_in->atom.size;
// copy whole input sequence to through port
capacity = handle->control_out->atom.size;
lv2_atom_forge_set_buffer(forge, (uint8_t *)handle->control_out, capacity);
ref = lv2_atom_forge_raw(forge, handle->control_in, size);
if(!ref)
lv2_atom_sequence_clear(handle->control_out);
// forge whole sequence as single event
capacity = handle->notify->atom.size;
lv2_atom_forge_set_buffer(forge, (uint8_t *)handle->notify, capacity);
ref = lv2_atom_forge_sequence_head(forge, &frame[0], 0);
if(ref)
ref = lv2_atom_forge_frame_time(forge, 0);
if(ref)
ref = lv2_atom_forge_sequence_head(forge, &frame[1], 0);
// only serialize OSC events to UI
LV2_ATOM_SEQUENCE_FOREACH(handle->control_in, ev)
{
const LV2_Atom_Object *obj = (const LV2_Atom_Object *)&ev->body;
if( osc_atom_is_bundle(&handle->oforge, obj)
|| osc_atom_is_message(&handle->oforge, obj) )
{
if(ref)
ref = lv2_atom_forge_frame_time(forge, ev->time.frames);
if(ref)
ref = lv2_atom_forge_raw(forge, &ev->body, sizeof(LV2_Atom) + ev->body.size);
if(ref)
lv2_atom_forge_pad(forge, ev->body.size);
}
}
if(ref)
lv2_atom_forge_pop(forge, &frame[1]);
if(ref)
lv2_atom_forge_pop(forge, &frame[0]);
else
lv2_atom_sequence_clear(handle->notify);
}
static void
cleanup(LV2_Handle instance)
{
handle_t *handle = (handle_t *)instance;
free(handle);
}
const LV2_Descriptor osc_inspector = {
.URI = SHERLOCK_OSC_INSPECTOR_URI,
.instantiate = instantiate,
.connect_port = connect_port,
.activate = NULL,
.run = run,
.deactivate = NULL,
.cleanup = cleanup,
.extension_data = NULL
};
This diff is collapsed.
......@@ -24,6 +24,10 @@ lv2_descriptor(uint32_t index)
{
case 0:
return &atom_inspector;
case 1:
return &midi_inspector;
case 2:
return &osc_inspector;
default:
return NULL;
}
......
......@@ -32,20 +32,40 @@
#define SHERLOCK_URI "http://open-music-kontrollers.ch/lv2/sherlock"
#define SHERLOCK_OBJECT_URI SHERLOCK_URI"#object"
#define SHERLOCK_EVENT_URI SHERLOCK_URI"#frametime"
#define SHERLOCK_FRAMETIME_URI SHERLOCK_URI"#event"
#define SHERLOCK_ATOM_INSPECTOR_URI SHERLOCK_URI"#atom_inspector"
#define SHERLOCK_ATOM_INSPECTOR_EO_URI SHERLOCK_URI"#atom_inspector_eo"
#define SHERLOCK_ATOM_INSPECTOR_UI_URI SHERLOCK_URI"#atom_inspector_ui"
#define SHERLOCK_ATOM_INSPECTOR_X11_URI SHERLOCK_URI"#atom_inspector_x11"
#define SHERLOCK_ATOM_INSPECTOR_KX_URI SHERLOCK_URI"#atom_inspector_kx"
#define SHERLOCK_MIDI_INSPECTOR_URI SHERLOCK_URI"#midi_inspector"
#define SHERLOCK_MIDI_INSPECTOR_EO_URI SHERLOCK_URI"#midi_inspector_eo"
#define SHERLOCK_MIDI_INSPECTOR_UI_URI SHERLOCK_URI"#midi_inspector_ui"
#define SHERLOCK_MIDI_INSPECTOR_X11_URI SHERLOCK_URI"#midi_inspector_x11"
#define SHERLOCK_MIDI_INSPECTOR_KX_URI SHERLOCK_URI"#midi_inspector_kx"
#define SHERLOCK_OSC_INSPECTOR_URI SHERLOCK_URI"#osc_inspector"
#define SHERLOCK_OSC_INSPECTOR_EO_URI SHERLOCK_URI"#osc_inspector_eo"
#define SHERLOCK_OSC_INSPECTOR_UI_URI SHERLOCK_URI"#osc_inspector_ui"
#define SHERLOCK_OSC_INSPECTOR_X11_URI SHERLOCK_URI"#osc_inspector_x11"
#define SHERLOCK_OSC_INSPECTOR_KX_URI SHERLOCK_URI"#osc_inspector_kx"
extern const LV2_Descriptor atom_inspector;
extern const LV2UI_Descriptor atom_inspector_eo;
extern const LV2UI_Descriptor atom_inspector_ui;
extern const LV2UI_Descriptor atom_inspector_x11;
extern const LV2UI_Descriptor atom_inspector_kx;
extern const LV2_Descriptor midi_inspector;
extern const LV2UI_Descriptor midi_inspector_eo;
extern const LV2UI_Descriptor midi_inspector_ui;
extern const LV2UI_Descriptor midi_inspector_x11;
extern const LV2UI_Descriptor midi_inspector_kx;
extern const LV2_Descriptor osc_inspector;
extern const LV2UI_Descriptor osc_inspector_eo;
extern const LV2UI_Descriptor osc_inspector_ui;
extern const LV2UI_Descriptor osc_inspector_x11;
extern const LV2UI_Descriptor osc_inspector_kx;
#endif // _SHERLOCK_LV2_H
......@@ -16,6 +16,7 @@
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix doap: <http://usefulinc.com/ns/doap#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
@prefix ui: <http://lv2plug.in/ns/extensions/ui#> .
@prefix atom: <http://lv2plug.in/ns/ext/atom#> .
......@@ -26,12 +27,17 @@
@prefix patch: <http://lv2plug.in/ns/ext/patch#> .
@prefix kx: <http://kxstudio.sf.net/ns/lv2ext/external-ui#> .
@prefix osc: <http://opensoundcontrol.org#> .
@prefix osc: <http://open-music-kontrollers.ch/lv2/osc#> .
@prefix lic: <http://opensource.org/licenses/> .
@prefix omk: <http://open-music-kontrollers.ch/ventosus#> .
@prefix proj: <http://open-music-kontrollers.ch/lv2/> .
@prefix sherlock: <http://open-music-kontrollers.ch/lv2/sherlock#> .
osc:Event
a rdfs:Class ;
rdfs:subClassOf atom:Object ;
rdfs:label "OSC Event (Bundle or Message)" .
# Maintainer
omk:me
a foaf:Person ;
......@@ -162,3 +168,159 @@ sherlock:atom_inspector
lv2:symbol "notify" ;
lv2:name "Notify" ;
] .
# MIDI Inspector UI
sherlock:midi_inspector_eo
a ui:EoUI ;
ui:portNotification [
ui:plugin sherlock:midi_inspector ;
lv2:symbol "notify" ;
ui:protocol midi:eventTransfer ;
] ;
lv2:requiredFeature urid:map .
sherlock:midi_inspector_ui
a ui:UI ;
ui:portNotification [
ui:plugin sherlock:midi_inspector ;
lv2:symbol "notify" ;
ui:protocol midi:eventTransfer ;
] ;
lv2:requiredFeature ui:idleInterface, urid:map ;
lv2:extensionData ui:idleInterface, ui:showInterface .
sherlock:midi_inspector_x11
a ui:X11UI ;
ui:portNotification [
ui:plugin sherlock:midi_inspector ;
lv2:symbol "notify" ;
ui:protocol midi:eventTransfer ;
] ;
lv2:requiredFeature ui:idleInterface, urid:map ;
lv2:optionalFeature ui:resize ;
lv2:extensionData ui:idleInterface .
sherlock:midi_inspector_kx
a kx:Widget ;
ui:portNotification [
ui:plugin sherlock:midi_inspector ;
lv2:symbol "notify" ;
ui:protocol midi:eventTransfer ;
] ;
lv2:requiredFeature kx:Host, urid:map .
# MIDI Inspector Plugin
sherlock:midi_inspector
a lv2:Plugin,
lv2:AnalyserPlugin ;
doap:name "Sherlock MIDI Inspector" ;
doap:license lic:Artistic-2.0 ;
lv2:project proj:sherlock ;
lv2:optionalFeature lv2:isLive, lv2:hardRTCapable ;
lv2:requiredFeature urid:map ;
lv2:port [
# input event port
a lv2:InputPort ,
atom:AtomPort ;
atom:bufferType atom:Sequence ;
atom:supports midi:MidiEvent ;
lv2:index 0 ;
lv2:symbol "control_in" ;
lv2:name "Control In" ;
lv2:designation lv2:control ;
] , [
# output event port
a lv2:OutputPort ,
atom:AtomPort ;
atom:bufferType atom:Sequence ;
atom:supports midi:MidiEvent ;
lv2:index 1 ;
lv2:symbol "control_out" ;
lv2:name "Control Out" ;
lv2:designation lv2:control ;
] , [
# output notify port
a lv2:OutputPort ,
atom:AtomPort ;
atom:bufferType atom:Sequence ;
atom:supports atom:Sequence ;
lv2:index 2 ;
lv2:symbol "notify" ;
lv2:name "Notify" ;
] .
# OSC Inspector UI
sherlock:osc_inspector_eo
a ui:EoUI ;
ui:portNotification [
ui:plugin sherlock:osc_inspector ;
lv2:symbol "notify" ;
ui:protocol osc:eventTransfer ;
] ;
lv2:requiredFeature urid:map .
sherlock:osc_inspector_ui
a ui:UI ;
ui:portNotification [
ui:plugin sherlock:osc_inspector ;
lv2:symbol "notify" ;
ui:protocol osc:eventTransfer ;
] ;
lv2:requiredFeature ui:idleInterface, urid:map ;
lv2:extensionData ui:idleInterface, ui:showInterface .
sherlock:osc_inspector_x11
a ui:X11UI ;
ui:portNotification [
ui:plugin sherlock:osc_inspector ;
lv2:symbol "notify" ;
ui:protocol osc:eventTransfer ;
] ;
lv2:requiredFeature ui:idleInterface, urid:map ;
lv2:optionalFeature ui:resize ;
lv2:extensionData ui:idleInterface .
sherlock:osc_inspector_kx
a kx:Widget ;
ui:portNotification [
ui:plugin sherlock:osc_inspector ;
lv2:symbol "notify" ;
ui:protocol osc:eventTransfer ;
] ;
lv2:requiredFeature kx:Host, urid:map .
# OSC Inspector Plugin
sherlock:osc_inspector
a lv2:Plugin,
lv2:AnalyserPlugin ;
doap:name "Sherlock OSC Inspector" ;
doap:license lic:Artistic-2.0 ;
lv2:project proj:sherlock ;
lv2:optionalFeature lv2:isLive, lv2:hardRTCapable ;
lv2:requiredFeature urid:map ;
lv2:port [
# input event port
a lv2:InputPort ,
atom:AtomPort ;
atom:bufferType atom:Sequence ;
atom:supports osc:Event ;
lv2:index 0 ;
lv2:symbol "control_in" ;
lv2:name "Control In" ;
lv2:designation lv2:control ;
] , [
# output event port
a lv2:OutputPort ,
atom:AtomPort ;
atom:bufferType atom:Sequence ;
atom:supports osc:Event ;
lv2:index 1 ;
lv2:symbol "control_out" ;
lv2:name "Control Out" ;
lv2:designation lv2:control ;
] , [
# output notify port
a lv2:OutputPort ,
atom:AtomPort ;
atom:bufferType atom:Sequence ;
atom:supports atom:Sequence ;
lv2:index 2 ;
lv2:symbol "notify" ;
lv2:name "Notify" ;
] .
......@@ -30,6 +30,25 @@ lv2ui_descriptor(uint32_t index)
return &atom_inspector_x11;
case 3:
return &atom_inspector_kx;
case 4:
return &midi_inspector_eo;
case 5:
return &midi_inspector_ui;
case 6:
return &midi_inspector_x11;
case 7:
return &midi_inspector_kx;
case 8:
return &osc_inspector_eo;
case 9:
return &osc_inspector_ui;
case 10:
return &osc_inspector_x11;
case 11:
return &osc_inspector_kx;
default:
return NULL;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment