[LV2] Midi output using atomport
Lucas Takejame
lucas at takejame.com.br
Thu Apr 3 16:11:49 PDT 2014
Hello everybody, Im trying to make a lv2 plugin that translate audio to
MIDI, im using Aubio lib and Im having trouble to send the MIDI output. I
already saw a bunch of lv2 examples, like fifths, sampler and gxtuner but
couldn't solve my problem... I'm confuse about the steps i should follow to
prepare my LV2_Atom_Sequence struct to output. Here's what i did until now
(This is not the actual code, I modified it to give a context, tried to put
only things related to the midi output port):
class Note2midi {
public:
LV2_Atom_Sequence *out;
MIDINoteEvent note;
LV2_URID_Map* map;
LV2_URID midi_event;
.
.
.
};
uint32_t out_capacity;
/*****(MIDINoteEvent is the struct used in fifths example:
typedef struct {
LV2_Atom_Event event;
uint8_t msg[3];
} MIDINoteEvent;
) *****/
LV2_Handle Note2midi::instantiate(const LV2_Descriptor* descriptor, double
SampleRate, const char* bundle_path, const LV2_Feature* const* features)
{
Note2midi *plugin = new Note2midi();
plugin->out = new LV2_Atom_Sequence();
for (int i = 0; features[i]; ++i) {
if (!strcmp(features[i]->URI, LV2_URID__map)) {
plugin->map = (LV2_URID_Map*)features[i]->data;
}
}
if (!plugin->map) {
// fprintf(stderr, "Missing feature urid:map\n");
delete (plugin);
return NULL;
}
plugin->midi_event = plugin->map->map(plugin->map->handle,
LV2_MIDI__MidiEvent);
.
.
.
plugin->out->atom.type = plugin->midi_event;
plugin->out->atom.size = sizeof(plugin->note.msg);
out_capacity = plugin->out->atom.size;
}
void Note2midi::run(LV2_Handle instance, uint32_t SampleCount)
{
Note2midi *plugin = (Note2midi *) instance;
lv2_atom_sequence_clear(plugin->out);
plugin->note.event.body.size = 3;
plugin->note.event.body.type = 19;
plugin->note.event.time.frames = rand()%256;
plugin->note.msg[2] = velo;
plugin->note.msg[1] = mpitch;
if (velo == 0) {
plugins->note.msg[0] = 0x80; /* note off */
}
else{
plugin->note.msg[0] = 0x90; /* note on */
}
lv2_atom_sequence_append_event(plugin->out, out_capacity,
&(plugin->note.event));
}
Hope this is not asking too much =)
Thanks in advance
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lv2plug.in/pipermail/devel-lv2plug.in/attachments/20140403/0a4b933b/attachment.htm>
More information about the Devel
mailing list