Merge branch 'master' into cairocanvas
[ardour.git] / libs / plugins / reasonablesynth.lv2 / lv2.c
index b29590c78aa9af4cd3e921aa0da17ac72c3b1376..586ca54c86a37a32a6e0f6eff3431a94168ba815 100644 (file)
@@ -22,6 +22,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdint.h>
+#include <time.h>
 
 /* LV2 */
 #include "lv2/lv2plug.in/ns/lv2core/lv2.h"
@@ -56,6 +57,7 @@ typedef struct {
 
   double SampleRateD;
   void *synth;
+  bool xmas;
 } RSynth;
 
 /* main LV2 */
@@ -98,6 +100,16 @@ instantiate(const LV2_Descriptor*     descriptor,
   self->synth = synth_alloc();
   synth_init(self->synth, rate);
 
+
+  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;
+  }
+
   return (LV2_Handle)self;
 }
 
@@ -146,7 +158,11 @@ run(LV2_Handle handle, uint32_t n_samples)
           written = synth_sound(self->synth, written, ev->time.frames, audio);
         }
         /* send midi message to synth */
-        synth_parse_midi(self->synth, (const uint8_t*)(ev+1), ev->body.size);
+        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()
         ((const uint8_t*)ev + sizeof(LV2_Atom_Event) + ((ev->body.size + 7) & ~7));
@@ -183,7 +199,11 @@ static const LV2_Descriptor descriptor = {
   extension_data
 };
 
-LV2_SYMBOL_EXPORT
+#if defined(COMPILER_MSVC)
+__declspec(dllexport)
+#else
+__attribute__ ((visibility ("default")))
+#endif
 const LV2_Descriptor*
 lv2_descriptor(uint32_t idx)
 {