summaryrefslogtreecommitdiff
path: root/libs/plugins/reasonablesynth.lv2/lv2.c
diff options
context:
space:
mode:
Diffstat (limited to 'libs/plugins/reasonablesynth.lv2/lv2.c')
-rw-r--r--libs/plugins/reasonablesynth.lv2/lv2.c238
1 files changed, 118 insertions, 120 deletions
diff --git a/libs/plugins/reasonablesynth.lv2/lv2.c b/libs/plugins/reasonablesynth.lv2/lv2.c
index bc3715ac4e..f8bbcdee2d 100644
--- a/libs/plugins/reasonablesynth.lv2/lv2.c
+++ b/libs/plugins/reasonablesynth.lv2/lv2.c
@@ -42,82 +42,82 @@ static uint32_t synth_sound (void *, uint32_t written, uint32_t nframes, fl
#include "rsynth.c"
typedef enum {
- RSY_MIDIIN = 0,
- RSY_OUTL,
- RSY_OUTR
+ RSY_MIDIIN = 0,
+ RSY_OUTL,
+ RSY_OUTR
} PortIndex;
typedef struct {
- const LV2_Atom_Sequence* midiin;
- float* outL;
- float* outR;
+ const LV2_Atom_Sequence* midiin;
+ float* outL;
+ float* outR;
- LV2_URID_Map* map;
- LV2_URID midi_MidiEvent;
+ LV2_URID_Map* map;
+ LV2_URID midi_MidiEvent;
- double SampleRateD;
- void *synth;
- bool xmas;
+ double SampleRateD;
+ void *synth;
+ bool xmas;
} RSynth;
/* main LV2 */
static LV2_Handle
-instantiate(const LV2_Descriptor* descriptor,
- double rate,
- const char* bundle_path,
- const LV2_Feature* const* features)
+instantiate (const LV2_Descriptor* descriptor,
+ double rate,
+ const char* bundle_path,
+ const LV2_Feature* const* features)
{
- (void) descriptor; /* unused variable */
- (void) bundle_path; /* unused variable */
-
- if (rate < 8000) {
- fprintf(stderr, "RSynth.lv2 error: unsupported sample-rate (must be > 8k)\n");
- return NULL;
- }
- RSynth* self = (RSynth*)calloc(1, sizeof(RSynth));
- if(!self) {
- return NULL;
- }
-
- self->SampleRateD = rate;
-
- int i;
- for (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, "RSynth.lv2 error: Host does not support urid:map\n");
- free(self);
- return NULL;
- }
-
- self->midi_MidiEvent = self->map->map(self->map->handle, LV2_MIDI__MidiEvent);
-
- self->synth = synth_alloc();
- synth_init(self->synth, rate);
+ (void) descriptor; /* unused variable */
+ (void) bundle_path; /* unused variable */
+
+ if (rate < 8000) {
+ fprintf(stderr, "RSynth.lv2 error: unsupported sample-rate (must be > 8k)\n");
+ return NULL;
+ }
+ RSynth* self = (RSynth*)calloc(1, sizeof(RSynth));
+ if(!self) {
+ return NULL;
+ }
+
+ self->SampleRateD = rate;
+
+ int i;
+ for (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, "RSynth.lv2 error: Host does not support urid:map\n");
+ free(self);
+ return NULL;
+ }
+
+ self->midi_MidiEvent = self->map->map(self->map->handle, LV2_MIDI__MidiEvent);
+
+ self->synth = synth_alloc();
+ synth_init(self->synth, rate);
#ifndef PLATFORM_WINDOWS // easter egg is for sane platforms with native support for localtime_r only
- struct tm date;
- time_t now;
- time(&now);
- localtime_r(&now, &date);
- if (getenv("ITSXMAS") || (date.tm_mon == 11 /*dec*/ && date.tm_mday == 25)) {
- printf("reasonable synth.lv2 says: happy holidays!\n");
- self->xmas = true;
- }
+ struct tm date;
+ time_t now;
+ time(&now);
+ localtime_r(&now, &date);
+ if (getenv("ITSXMAS") || (date.tm_mon == 11 /*dec*/ && date.tm_mday == 25)) {
+ printf("reasonable synth.lv2 says: happy holidays!\n");
+ self->xmas = true;
+ }
#endif
- return (LV2_Handle)self;
+ return (LV2_Handle)self;
}
static void
-connect_port(LV2_Handle handle,
- uint32_t port,
- void* data)
+connect_port (LV2_Handle handle,
+ uint32_t port,
+ void* data)
{
RSynth* self = (RSynth*)handle;
@@ -135,76 +135,76 @@ connect_port(LV2_Handle handle,
}
static void
-run(LV2_Handle handle, uint32_t n_samples)
+run (LV2_Handle handle, uint32_t n_samples)
{
- RSynth* self = (RSynth*)handle;
- float* audio[2];
-
- audio[0] = self->outL;
- audio[1] = self->outR;
-
- uint32_t written = 0;
-
- /* Process incoming MIDI events */
- if (self->midiin) {
- LV2_Atom_Event const* ev = (LV2_Atom_Event const*)((uintptr_t)((&(self->midiin)->body) + 1)); // lv2_atom_sequence_begin
- while( // !lv2_atom_sequence_is_end
- (const uint8_t*)ev < ((const uint8_t*) &(self->midiin)->body + (self->midiin)->atom.size)
- )
- {
- if (ev->body.type == self->midi_MidiEvent) {
+ RSynth* self = (RSynth*)handle;
+ float* audio[2];
+
+ audio[0] = self->outL;
+ audio[1] = self->outR;
+
+ uint32_t written = 0;
+
+ /* Process incoming MIDI events */
+ if (self->midiin) {
+ LV2_Atom_Event const* ev = (LV2_Atom_Event const*)((uintptr_t)((&(self->midiin)->body) + 1)); // lv2_atom_sequence_begin
+ while( // !lv2_atom_sequence_is_end
+ (const uint8_t*)ev < ((const uint8_t*) &(self->midiin)->body + (self->midiin)->atom.size)
+ )
+ {
+ if (ev->body.type == self->midi_MidiEvent) {
#ifdef DEBUG_MIDI_EVENT // debug midi messages in synth -- not rt-safe(!)
- printf ("%5d (%d):", ev->time.frames, ev->body.size);
- for (uint8_t i = 0; i < ev->body.size; ++i) {
- printf (" %02x", ((const uint8_t*)(ev+1))[i]);
- }
- printf ("\n");
+ printf ("%5d (%d):", ev->time.frames, ev->body.size);
+ for (uint8_t i = 0; i < ev->body.size; ++i) {
+ printf (" %02x", ((const uint8_t*)(ev+1))[i]);
+ }
+ printf ("\n");
#endif
- if (written + BUFFER_SIZE_SAMPLES < ev->time.frames
- && ev->time.frames < n_samples) {
- /* first synthesize sound up until the message timestamp */
- written = synth_sound(self->synth, written, ev->time.frames, audio);
- }
- /* send midi message to synth */
- if (self->xmas) {
- synth_parse_xmas(self->synth, (const uint8_t*)(ev+1), ev->body.size);
- } else {
- synth_parse_midi(self->synth, (const uint8_t*)(ev+1), ev->body.size);
- }
- }
- ev = (LV2_Atom_Event const*) // lv2_atom_sequence_next()
- ((uintptr_t)((const uint8_t*)ev + sizeof(LV2_Atom_Event) + ((ev->body.size + 7) & ~7)));
- }
- }
-
- /* synthesize [remaining] sound */
- synth_sound(self->synth, written, n_samples, audio);
+ if (written + BUFFER_SIZE_SAMPLES < ev->time.frames
+ && ev->time.frames < n_samples) {
+ /* first synthesize sound up until the message timestamp */
+ written = synth_sound(self->synth, written, ev->time.frames, audio);
+ }
+ /* send midi message to synth */
+ if (self->xmas) {
+ synth_parse_xmas(self->synth, (const uint8_t*)(ev+1), ev->body.size);
+ } else {
+ synth_parse_midi(self->synth, (const uint8_t*)(ev+1), ev->body.size);
+ }
+ }
+ ev = (LV2_Atom_Event const*) // lv2_atom_sequence_next()
+ ((uintptr_t)((const uint8_t*)ev + sizeof(LV2_Atom_Event) + ((ev->body.size + 7) & ~7)));
+ }
+ }
+
+ /* synthesize [remaining] sound */
+ synth_sound(self->synth, written, n_samples, audio);
}
static void
cleanup(LV2_Handle handle)
{
- RSynth* self = (RSynth*)handle;
- synth_free(self->synth);
- free(handle);
+ RSynth* self = (RSynth*)handle;
+ synth_free(self->synth);
+ free(handle);
}
static const void*
extension_data(const char* uri)
{
- (void) uri; /* unused variable */
- return NULL;
+ (void) uri; /* unused variable */
+ return NULL;
}
static const LV2_Descriptor descriptor = {
- RSY_URI,
- instantiate,
- connect_port,
- NULL,
- run,
- NULL,
- cleanup,
- extension_data
+ RSY_URI,
+ instantiate,
+ connect_port,
+ NULL,
+ run,
+ NULL,
+ cleanup,
+ extension_data
};
#if defined(COMPILER_MSVC)
@@ -215,12 +215,10 @@ __attribute__ ((visibility ("default")))
const LV2_Descriptor*
lv2_descriptor(uint32_t idx)
{
- switch (idx) {
- case 0:
- return &descriptor;
- default:
- return NULL;
- }
+ switch (idx) {
+ case 0:
+ return &descriptor;
+ default:
+ return NULL;
+ }
}
-
-/* vi:set ts=8 sts=2 sw=2 et: */