fix typo
[software/lv2-mdametapiano.git] / src / mdaPiano.cpp
index 9ecbc3e..7341ee9 100644 (file)
 #include "mdaPiano.h"
 #include <cstdlib> //for exit
 
-#include <stdio.h>
-#include <math.h>
-
 #define STRING_BUF 2048
-static const char* sample_file = "samples.raw";
-
 
 mdaPiano::mdaPiano(double rate)
   : LV2::Synth<mdaPianoVoice, mdaPiano>(p_n_ports, p_midi) {
 
-  load_samples(&waves);
+  static const char* sample_names[] =
+    { "0c.raw", "0e.raw", "0g.raw"
+    , "1c.raw", "1e.raw", "1g.raw"
+    , "2c.raw", "2e.raw", "2g.raw"
+    , "3c.raw", "3e.raw", "3g.raw"
+    , "4c.raw", "4e.raw", "4a.raw"
+    };
+
+  for (unsigned char i=0; i<15; ++i) {
+    load_sample(&samples[i], sample_names[i]);
+  }
+
   load_kgrp(kgrp);
 
   for(uint32_t i=0; i<NVOICES; ++i) {
-    voices[i] = new mdaPianoVoice(rate, waves, kgrp);
+    voices[i] = new mdaPianoVoice(rate, samples, kgrp);
     add_voices(voices[i]);
   }
 
@@ -80,18 +86,6 @@ void mdaPiano::setVolume(float value)
 }
 
 
-void mdaPiano::setParameter(unsigned char id, float value)
-{
-  if(id>=NPARAMS)
-    return;
-  *p(id+PARAM_OFFSET) = value;
-  update();
-#ifdef DEBUG
-  printf("changed %i to %f\n", id, value);
-#endif
-}
-
-
 void mdaPiano::handle_midi(uint32_t size, unsigned char* data) {
 #ifdef DEBUG
   printf("%d\n", data[1]);
@@ -140,7 +134,7 @@ void mdaPiano::handle_midi(uint32_t size, unsigned char* data) {
           break;
 
         case 0x40:  //sustain pedal
-        case 0x42:  //sustenuto pedal
+        case 0x42:  //sostenuto pedal
           sustain = data[2] & 0x40;
 
           for (unsigned i = 0; i < NVOICES; ++i) {
@@ -190,7 +184,7 @@ void mdaPiano::load_kgrp(KGRP *kgrp)
 }
 
 
-void mdaPiano::load_samples(short **buffer)
+void mdaPiano::load_sample(Sample *s, const char* name)
 {
   FILE *f;
   long num, size;
@@ -198,7 +192,7 @@ void mdaPiano::load_samples(short **buffer)
 
   strncpy(filepath, bundle_path(), STRING_BUF);
   strncat(filepath,
-          sample_file,
+          name,
           STRING_BUF - strlen(filepath));
   f = fopen(filepath, "rb");
   if (f == NULL) {
@@ -212,19 +206,23 @@ void mdaPiano::load_samples(short **buffer)
   rewind(f);
 
   // allocate memory to contain the whole file
-  *buffer = (short*) malloc (sizeof(short)*size);
-  if (*buffer == NULL) {
+  s->buffer = (short*) malloc (sizeof(short)*size);
+  if (s->buffer == NULL) {
     fputs("Memory error", stderr);
     exit(2);
   }
 
   // copy the file into the buffer
-  num = fread(*buffer, 1, size, f);
+  num = fread(s->buffer, 1, size, f);
   if (num != size) {
     fputs ("Reading error", stderr);
     exit (3);
   }
   fclose (f);
+
+  // 16 bit
+  s->size = size / 2;
+
   return;
 }