summaryrefslogtreecommitdiff
path: root/note_compiler/templates
diff options
context:
space:
mode:
authorFlorian Jung <flo@thinkpad.(none)>2011-01-06 20:16:19 +0100
committerFlorian Jung <flo@thinkpad.(none)>2011-01-06 20:16:19 +0100
commite78131ccbbcb81da94e5992f788c6ea291a2050d (patch)
treeae15e6f8d77be250f168f1871c5a4de34c990abb /note_compiler/templates
parente8382521c1a35ad59efea5e8cebb915a67c0008e (diff)
The synthesizer can now load the compiled notes
There are still issues: - filtertest.prog.so: output_note-message which is not true - huge size of the .so (48K are too much!)
Diffstat (limited to 'note_compiler/templates')
-rw-r--r--note_compiler/templates/head.116
-rw-r--r--note_compiler/templates/interface.119
2 files changed, 34 insertions, 1 deletions
diff --git a/note_compiler/templates/head.1 b/note_compiler/templates/head.1
index 3d9e903..af3c227 100644
--- a/note_compiler/templates/head.1
+++ b/note_compiler/templates/head.1
@@ -1,17 +1,29 @@
#include <jack/jack.h>
#include <cmath>
+#include <string>
-#include "globals.h"
#include "defines.h"
#include "programs.h"
#include "envelope.h"
#include "fixed.h"
#include "filter.h"
#include "note_skel.h"
+#include "util.h"
using namespace std;
+int filter_update_frames=0;
+int samp_rate=0;
+fixed_t** wave=NULL;
+fixed_t** curr_lfo=NULL;
+
+typedef void output_note_func_t(string s);
+typedef string IntToStr_func_t(int i);
+
+output_note_func_t* output_note=NULL;
+IntToStr_func_t* IntToStr=NULL;
+
class Note : public NoteSkel
{
public:
@@ -25,6 +37,8 @@ class Note : public NoteSkel
bool still_active();
void set_param(const parameter_t &p, fixed_t v);
+ void destroy();
+
private:
void do_ksl();
void do_ksr();
diff --git a/note_compiler/templates/interface.1 b/note_compiler/templates/interface.1
new file mode 100644
index 0000000..cacc175
--- /dev/null
+++ b/note_compiler/templates/interface.1
@@ -0,0 +1,19 @@
+extern "C" NoteSkel* create_note(int n, float v,program_t &prg, jack_nframes_t pf, fixed_t pb, int prg_no)
+{
+ if (wave==NULL)
+ throw string("FATAL: trying to create a new note from a shared object without initalizing\n"
+ " the object first! this should /never/ happen, please contact the developer");
+
+ return new Note(n,v,prg,pf,pb,prg_no);
+}
+
+extern "C" void init_vars(int sr, int fupfr, fixed_t **w, fixed_t **clfo, output_note_func_t* out_n, IntToStr_func_t* its)
+{
+ samp_rate=sr;
+ filter_update_frames=fupfr;
+ wave=w;
+ curr_lfo=clfo;
+ IntToStr=its;
+ output_note=out_n;
+}
+