#include <iostream>
#include <vector>
#include <cstdlib>
#include <lvtk/plugin.hpp>
#include "silence.h"
using std::vector;
#define LVTK_SILENCE_URI "http://lvtoolkit.org/plugins/silence"
#define LVTK_SILENCE_PREFIX LVTK_SILENCE_URI "#"
#define LVTK_SILENCE_MSG LVTK_SILENCE_PREFIX "msg"
class Silence :
public Plugin<Silence, URID<true>, State<true> >
{
public:
Silence (double rate)
{
urids.atom_String = map (LV2_ATOM__String);
urids.silence_msg = map (LVTK_SILENCE_MSG);
urids.midi_type = map (LV2_MIDI__MidiEvent);
}
void
run(uint32_t nframes)
{
float *out = p(0);
check_midi();
for (int i = 0; i < nframes; i++)
{
out[i] = 0.0f;
}
}
{
const char* msg = "Sorry I can't hear you. Please speak up";
return store (urids.silence_msg, (void*)msg,
strlen(msg), urids.atom_String,
}
{
size_t size;
uint32_t type,fs;
const void *message = retrieve (urids.silence_msg, &size, &type, &fs);
if (message)
{
std::cout << "[silence] " << (char*)message << std::endl;
}
}
private:
void
check_midi ()
{
const LV2_Atom_Sequence* midiseq = p<LV2_Atom_Sequence> (p_midi);
LV2_ATOM_SEQUENCE_FOREACH(midiseq, ev)
{
uint32_t frame_offset = ev->time.frames;
if (ev->body.type == urids.midi_type)
{
std::cout << "MIDI\n";
}
}
}
struct SilenceURIs {
LV2_URID atom_String;
LV2_URID silence_msg;
LV2_URID midi_type;
} urids;
};
static int _ = Silence::register_class (LVTK_SILENCE_URI);