/*
Copyright (C) 2010-2012 Florian Jung
This file is part of flo's FM synth.
flo's FM synth is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
flo's FM synth is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with flo's FM synth. If not, see .
*/
#include
#include
#include "note_loader.h"
#include "programs.h"
#include "note_funcs.h"
#include "globals.h"
#include "shared_object_manager.h"
using namespace std;
void load_note_from_so(string file, program_t &prog)
{
void *handle;
handle = my_dlopen(file);
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;
dlref_dec(handle);
throw err;
}
}
void maybe_unload_note(program_t &prog)
{
if (prog.dl_handle)
{
dlref_dec(prog.dl_handle);
prog.dl_handle=NULL;
prog.create_func=NULL;
}
}