From e78131ccbbcb81da94e5992f788c6ea291a2050d Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Thu, 6 Jan 2011 20:16:19 +0100 Subject: 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!) --- synth/note_loader.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 synth/note_loader.cpp (limited to 'synth/note_loader.cpp') diff --git a/synth/note_loader.cpp b/synth/note_loader.cpp new file mode 100644 index 0000000..b7ccc99 --- /dev/null +++ b/synth/note_loader.cpp @@ -0,0 +1,44 @@ + +#include +#include + +#include "note_loader.h" +#include "programs.h" +#include "note_funcs.h" +#include "globals.h" + +using namespace std; + +void load_note_from_so(string file, program_t &prog) +{ + void *handle; + + handle = dlopen(file.c_str(), RTLD_LAZY); + + if (handle==NULL) + throw string("could not open shared object (")+string(dlerror())+string(")"); + + try + { + prog.create_func=(create_func_t*) dlsym(handle,"create_note"); + if (prog.create_func==NULL) + throw string("could not find symbol create_note in shared object (")+dlerror()+")"; + + init_func_t* initfunc=(init_func_t*) dlsym(handle,"init_vars"); + if (initfunc==NULL) + throw string("could not find symbol init_vars in shared object (")+dlerror()+")"; + + initfunc(samp_rate, filter_update_frames, wave, curr_lfo, &output_note, &IntToStr); + + + + prog.dl_handle=handle; + } + catch (string err) + { + prog.create_func=NULL; + prog.dl_handle=NULL; + dlclose(handle); + throw err; + } +} -- cgit v1.2.3