Merge pull request #238 from carlo-bramini/fluidsynth-on-mcu-1

Fluidsynth on mcu 1
This commit is contained in:
Tom M 2017-10-21 17:39:19 +02:00 committed by GitHub
commit 53e8e27049
16 changed files with 165 additions and 164 deletions

View File

@ -1065,7 +1065,7 @@ fluidmax_version(t_object *o)
post(" Max/MSP integration by Norbert Schnell IMTR IRCAM - Centre Pompidou"); post(" Max/MSP integration by Norbert Schnell IMTR IRCAM - Centre Pompidou");
} }
extern fluid_gen_info_t fluid_gen_info[]; extern const fluid_gen_info_t fluid_gen_info[];
static void static void
fluidmax_print(t_object *o, Symbol *s, short ac, Atom *at) fluidmax_print(t_object *o, Symbol *s, short ac, Atom *at)

View File

@ -64,6 +64,17 @@ struct _fluid_shell_t {
fluid_ostream_t out; fluid_ostream_t out;
}; };
/**
* Reduced command information structure for constant data.
* For internal use only.
*/
typedef struct {
const char *name; /**< The name of the command, as typed in the shell */
const char *topic; /**< The help topic group of this command */
fluid_cmd_func_t handler; /**< Pointer to the handler for this command */
const char *help; /**< A help string */
} fluid_cmd_int_t;
static int fluid_shell_run(fluid_shell_t* shell); static int fluid_shell_run(fluid_shell_t* shell);
static void fluid_shell_init(fluid_shell_t* shell, static void fluid_shell_init(fluid_shell_t* shell,
fluid_settings_t* settings, fluid_cmd_handler_t* handler, fluid_settings_t* settings, fluid_cmd_handler_t* handler,
@ -80,128 +91,127 @@ void fluid_shell_settings(fluid_settings_t* settings)
/** the table of all handled commands */ /** the table of all handled commands */
static fluid_cmd_t fluid_commands[] = { static const fluid_cmd_int_t fluid_commands[] = {
{ "help", "general", (fluid_cmd_func_t) fluid_handle_help, NULL, { "help", "general", (fluid_cmd_func_t) fluid_handle_help,
"help Show help topics ('help TOPIC' for more info)" }, "help Show help topics ('help TOPIC' for more info)" },
{ "quit", "general", (fluid_cmd_func_t) fluid_handle_quit, NULL, { "quit", "general", (fluid_cmd_func_t) fluid_handle_quit,
"quit Quit the synthesizer" }, "quit Quit the synthesizer" },
{ "source", "general", (fluid_cmd_func_t) fluid_handle_source, NULL, { "source", "general", (fluid_cmd_func_t) fluid_handle_source,
"source filename Load a file and parse every line as a command" }, "source filename Load a file and parse every line as a command" },
{ "noteon", "event", (fluid_cmd_func_t) fluid_handle_noteon, NULL, { "noteon", "event", (fluid_cmd_func_t) fluid_handle_noteon,
"noteon chan key vel Send noteon" }, "noteon chan key vel Send noteon" },
{ "noteoff", "event", (fluid_cmd_func_t) fluid_handle_noteoff, NULL, { "noteoff", "event", (fluid_cmd_func_t) fluid_handle_noteoff,
"noteoff chan key Send noteoff" }, "noteoff chan key Send noteoff" },
{ "pitch_bend", "event", (fluid_cmd_func_t) fluid_handle_pitch_bend, NULL, { "pitch_bend", "event", (fluid_cmd_func_t) fluid_handle_pitch_bend,
"pitch_bend chan offset Bend pitch" }, "pitch_bend chan offset Bend pitch" },
{ "pitch_bend_range", "event", (fluid_cmd_func_t) fluid_handle_pitch_bend_range, NULL, { "pitch_bend_range", "event", (fluid_cmd_func_t) fluid_handle_pitch_bend_range,
"pitch_bend chan range Set bend pitch range" }, "pitch_bend chan range Set bend pitch range" },
{ "cc", "event", (fluid_cmd_func_t) fluid_handle_cc, NULL, { "cc", "event", (fluid_cmd_func_t) fluid_handle_cc,
"cc chan ctrl value Send control-change message" }, "cc chan ctrl value Send control-change message" },
{ "prog", "event", (fluid_cmd_func_t) fluid_handle_prog, NULL, { "prog", "event", (fluid_cmd_func_t) fluid_handle_prog,
"prog chan num Send program-change message" }, "prog chan num Send program-change message" },
{ "select", "event", (fluid_cmd_func_t) fluid_handle_select, NULL, { "select", "event", (fluid_cmd_func_t) fluid_handle_select,
"select chan sfont bank prog Combination of bank-select and program-change" }, "select chan sfont bank prog Combination of bank-select and program-change" },
{ "load", "general", (fluid_cmd_func_t) fluid_handle_load, NULL, { "load", "general", (fluid_cmd_func_t) fluid_handle_load,
"load file [reset] [bankofs] Load SoundFont (reset=0|1, def 1; bankofs=n, def 0)" }, "load file [reset] [bankofs] Load SoundFont (reset=0|1, def 1; bankofs=n, def 0)" },
{ "unload", "general", (fluid_cmd_func_t) fluid_handle_unload, NULL, { "unload", "general", (fluid_cmd_func_t) fluid_handle_unload,
"unload id [reset] Unload SoundFont by ID (reset=0|1, default 1)"}, "unload id [reset] Unload SoundFont by ID (reset=0|1, default 1)"},
{ "reload", "general", (fluid_cmd_func_t) fluid_handle_reload, NULL, { "reload", "general", (fluid_cmd_func_t) fluid_handle_reload,
"reload id Reload the SoundFont with the specified ID" }, "reload id Reload the SoundFont with the specified ID" },
{ "fonts", "general", (fluid_cmd_func_t) fluid_handle_fonts, NULL, { "fonts", "general", (fluid_cmd_func_t) fluid_handle_fonts,
"fonts Display the list of loaded SoundFonts" }, "fonts Display the list of loaded SoundFonts" },
{ "inst", "general", (fluid_cmd_func_t) fluid_handle_inst, NULL, { "inst", "general", (fluid_cmd_func_t) fluid_handle_inst,
"inst font Print out the available instruments for the font" }, "inst font Print out the available instruments for the font" },
{ "channels", "general", (fluid_cmd_func_t) fluid_handle_channels, NULL, { "channels", "general", (fluid_cmd_func_t) fluid_handle_channels,
"channels [-verbose] Print out preset of all channels" }, "channels [-verbose] Print out preset of all channels" },
{ "interp", "general", (fluid_cmd_func_t) fluid_handle_interp, NULL, { "interp", "general", (fluid_cmd_func_t) fluid_handle_interp,
"interp num Choose interpolation method for all channels" }, "interp num Choose interpolation method for all channels" },
{ "interpc", "general", (fluid_cmd_func_t) fluid_handle_interpc, NULL, { "interpc", "general", (fluid_cmd_func_t) fluid_handle_interpc,
"interpc chan num Choose interpolation method for one channel" }, "interpc chan num Choose interpolation method for one channel" },
{ "rev_preset", "reverb", (fluid_cmd_func_t) fluid_handle_reverbpreset, NULL, { "rev_preset", "reverb", (fluid_cmd_func_t) fluid_handle_reverbpreset,
"rev_preset num Load preset num into the reverb unit" }, "rev_preset num Load preset num into the reverb unit" },
{ "rev_setroomsize", "reverb", (fluid_cmd_func_t) fluid_handle_reverbsetroomsize, NULL, { "rev_setroomsize", "reverb", (fluid_cmd_func_t) fluid_handle_reverbsetroomsize,
"rev_setroomsize num Change reverb room size" }, "rev_setroomsize num Change reverb room size" },
{ "rev_setdamp", "reverb", (fluid_cmd_func_t) fluid_handle_reverbsetdamp, NULL, { "rev_setdamp", "reverb", (fluid_cmd_func_t) fluid_handle_reverbsetdamp,
"rev_setdamp num Change reverb damping" }, "rev_setdamp num Change reverb damping" },
{ "rev_setwidth", "reverb", (fluid_cmd_func_t) fluid_handle_reverbsetwidth, NULL, { "rev_setwidth", "reverb", (fluid_cmd_func_t) fluid_handle_reverbsetwidth,
"rev_setwidth num Change reverb width" }, "rev_setwidth num Change reverb width" },
{ "rev_setlevel", "reverb", (fluid_cmd_func_t) fluid_handle_reverbsetlevel, NULL, { "rev_setlevel", "reverb", (fluid_cmd_func_t) fluid_handle_reverbsetlevel,
"rev_setlevel num Change reverb level" }, "rev_setlevel num Change reverb level" },
{ "reverb", "reverb", (fluid_cmd_func_t) fluid_handle_reverb, NULL, { "reverb", "reverb", (fluid_cmd_func_t) fluid_handle_reverb,
"reverb [0|1|on|off] Turn the reverb on or off" }, "reverb [0|1|on|off] Turn the reverb on or off" },
{ "cho_set_nr", "chorus", (fluid_cmd_func_t) fluid_handle_chorusnr, NULL, { "cho_set_nr", "chorus", (fluid_cmd_func_t) fluid_handle_chorusnr,
"cho_set_nr n Use n delay lines (default 3)" }, "cho_set_nr n Use n delay lines (default 3)" },
{ "cho_set_level", "chorus", (fluid_cmd_func_t) fluid_handle_choruslevel, NULL, { "cho_set_level", "chorus", (fluid_cmd_func_t) fluid_handle_choruslevel,
"cho_set_level num Set output level of each chorus line to num" }, "cho_set_level num Set output level of each chorus line to num" },
{ "cho_set_speed", "chorus", (fluid_cmd_func_t) fluid_handle_chorusspeed, NULL, { "cho_set_speed", "chorus", (fluid_cmd_func_t) fluid_handle_chorusspeed,
"cho_set_speed num Set mod speed of chorus to num (Hz)" }, "cho_set_speed num Set mod speed of chorus to num (Hz)" },
{ "cho_set_depth", "chorus", (fluid_cmd_func_t) fluid_handle_chorusdepth, NULL, { "cho_set_depth", "chorus", (fluid_cmd_func_t) fluid_handle_chorusdepth,
"cho_set_depth num Set chorus modulation depth to num (ms)" }, "cho_set_depth num Set chorus modulation depth to num (ms)" },
{ "chorus", "chorus", (fluid_cmd_func_t) fluid_handle_chorus, NULL, { "chorus", "chorus", (fluid_cmd_func_t) fluid_handle_chorus,
"chorus [0|1|on|off] Turn the chorus on or off" }, "chorus [0|1|on|off] Turn the chorus on or off" },
{ "gain", "general", (fluid_cmd_func_t) fluid_handle_gain, NULL, { "gain", "general", (fluid_cmd_func_t) fluid_handle_gain,
"gain value Set the master gain (0 < gain < 5)" }, "gain value Set the master gain (0 < gain < 5)" },
{ "voice_count", "general", (fluid_cmd_func_t) fluid_handle_voice_count, NULL, { "voice_count", "general", (fluid_cmd_func_t) fluid_handle_voice_count,
"voice_count Get number of active synthesis voices" }, "voice_count Get number of active synthesis voices" },
{ "tuning", "tuning", (fluid_cmd_func_t) fluid_handle_tuning, NULL, { "tuning", "tuning", (fluid_cmd_func_t) fluid_handle_tuning,
"tuning name bank prog Create a tuning with name, bank number, \n" "tuning name bank prog Create a tuning with name, bank number, \n"
" and program number (0 <= bank,prog <= 127)" }, " and program number (0 <= bank,prog <= 127)" },
{ "tune", "tuning", (fluid_cmd_func_t) fluid_handle_tune, NULL, { "tune", "tuning", (fluid_cmd_func_t) fluid_handle_tune,
"tune bank prog key pitch Tune a key" }, "tune bank prog key pitch Tune a key" },
{ "settuning", "tuning", (fluid_cmd_func_t) fluid_handle_settuning, NULL, { "settuning", "tuning", (fluid_cmd_func_t) fluid_handle_settuning,
"settuning chan bank prog Set the tuning for a MIDI channel" }, "settuning chan bank prog Set the tuning for a MIDI channel" },
{ "resettuning", "tuning", (fluid_cmd_func_t) fluid_handle_resettuning, NULL, { "resettuning", "tuning", (fluid_cmd_func_t) fluid_handle_resettuning,
"resettuning chan Restore the default tuning of a MIDI channel" }, "resettuning chan Restore the default tuning of a MIDI channel" },
{ "tunings", "tuning", (fluid_cmd_func_t) fluid_handle_tunings, NULL, { "tunings", "tuning", (fluid_cmd_func_t) fluid_handle_tunings,
"tunings Print the list of available tunings" }, "tunings Print the list of available tunings" },
{ "dumptuning", "tuning", (fluid_cmd_func_t) fluid_handle_dumptuning, NULL, { "dumptuning", "tuning", (fluid_cmd_func_t) fluid_handle_dumptuning,
"dumptuning bank prog Print the pitch details of the tuning" }, "dumptuning bank prog Print the pitch details of the tuning" },
{ "reset", "general", (fluid_cmd_func_t) fluid_handle_reset, NULL, { "reset", "general", (fluid_cmd_func_t) fluid_handle_reset,
"reset System reset (all notes off, reset controllers)" }, "reset System reset (all notes off, reset controllers)" },
{ "set", "settings", (fluid_cmd_func_t) fluid_handle_set, NULL, { "set", "settings", (fluid_cmd_func_t) fluid_handle_set,
"set name value Set the value of a controller or settings" }, "set name value Set the value of a controller or settings" },
{ "get", "settings", (fluid_cmd_func_t) fluid_handle_get, NULL, { "get", "settings", (fluid_cmd_func_t) fluid_handle_get,
"get name Get the value of a controller or settings" }, "get name Get the value of a controller or settings" },
{ "info", "settings", (fluid_cmd_func_t) fluid_handle_info, NULL, { "info", "settings", (fluid_cmd_func_t) fluid_handle_info,
"info name Get information about a controller or settings" }, "info name Get information about a controller or settings" },
{ "settings", "settings", (fluid_cmd_func_t) fluid_handle_settings, NULL, { "settings", "settings", (fluid_cmd_func_t) fluid_handle_settings,
"settings Print out all settings" }, "settings Print out all settings" },
{ "echo", "general", (fluid_cmd_func_t) fluid_handle_echo, NULL, { "echo", "general", (fluid_cmd_func_t) fluid_handle_echo,
"echo arg Print arg" }, "echo arg Print arg" },
/* LADSPA-related commands */ /* LADSPA-related commands */
#ifdef LADSPA #ifdef LADSPA
{ "ladspa_plugin", "ladspa", (fluid_cmd_func_t) fluid_handle_ladspa_plugin, NULL, { "ladspa_plugin", "ladspa", (fluid_cmd_func_t) fluid_handle_ladspa_plugin,
"ladspa_plugin Instantiate a new LADSPA plugin"}, "ladspa_plugin Instantiate a new LADSPA plugin"},
{ "ladspa_port", "ladspa", (fluid_cmd_func_t) fluid_handle_ladspa_port, NULL, { "ladspa_port", "ladspa", (fluid_cmd_func_t) fluid_handle_ladspa_port,
"ladspa_port Connect a LADSPA plugin port"}, "ladspa_port Connect a LADSPA plugin port"},
{ "ladspa_node", "ladspa", (fluid_cmd_func_t) fluid_handle_ladspa_node, NULL, { "ladspa_node", "ladspa", (fluid_cmd_func_t) fluid_handle_ladspa_node,
"ladspa_node Create a LADSPA audio or control node"}, "ladspa_node Create a LADSPA audio or control node"},
{ "ladspa_control", "ladspa", (fluid_cmd_func_t) fluid_handle_ladspa_control, NULL, { "ladspa_control", "ladspa", (fluid_cmd_func_t) fluid_handle_ladspa_control,
"ladspa_control Set the value of a LADSPA control node"}, "ladspa_control Set the value of a LADSPA control node"},
{ "ladspa_check", "ladspa", (fluid_cmd_func_t) fluid_handle_ladspa_check, NULL, { "ladspa_check", "ladspa", (fluid_cmd_func_t) fluid_handle_ladspa_check,
"ladspa_check Check LADSPA configuration"}, "ladspa_check Check LADSPA configuration"},
{ "ladspa_start", "ladspa", (fluid_cmd_func_t) fluid_handle_ladspa_start, NULL, { "ladspa_start", "ladspa", (fluid_cmd_func_t) fluid_handle_ladspa_start,
"ladspa_start Start LADSPA effects"}, "ladspa_start Start LADSPA effects"},
{ "ladspa_stop", "ladspa", (fluid_cmd_func_t) fluid_handle_ladspa_stop, NULL, { "ladspa_stop", "ladspa", (fluid_cmd_func_t) fluid_handle_ladspa_stop,
"ladspa_stop Stop LADSPA effect unit"}, "ladspa_stop Stop LADSPA effect unit"},
{ "ladspa_reset", "ladspa", (fluid_cmd_func_t) fluid_handle_ladspa_reset, NULL, { "ladspa_reset", "ladspa", (fluid_cmd_func_t) fluid_handle_ladspa_reset,
"ladspa_reset Stop and reset LADSPA effects"}, "ladspa_reset Stop and reset LADSPA effects"},
#endif #endif
{ "router_clear", "router", (fluid_cmd_func_t) fluid_handle_router_clear, NULL, { "router_clear", "router", (fluid_cmd_func_t) fluid_handle_router_clear,
"router_clear Clears all routing rules from the midi router"}, "router_clear Clears all routing rules from the midi router"},
{ "router_default", "router", (fluid_cmd_func_t) fluid_handle_router_default, NULL, { "router_default", "router", (fluid_cmd_func_t) fluid_handle_router_default,
"router_default Resets the midi router to default state"}, "router_default Resets the midi router to default state"},
{ "router_begin", "router", (fluid_cmd_func_t) fluid_handle_router_begin, NULL, { "router_begin", "router", (fluid_cmd_func_t) fluid_handle_router_begin,
"router_begin [note|cc|prog|pbend|cpress|kpress]: Starts a new routing rule"}, "router_begin [note|cc|prog|pbend|cpress|kpress]: Starts a new routing rule"},
{ "router_chan", "router", (fluid_cmd_func_t) fluid_handle_router_chan, NULL, { "router_chan", "router", (fluid_cmd_func_t) fluid_handle_router_chan,
"router_chan min max mul add filters and maps midi channels on current rule"}, "router_chan min max mul add filters and maps midi channels on current rule"},
{ "router_par1", "router", (fluid_cmd_func_t) fluid_handle_router_par1, NULL, { "router_par1", "router", (fluid_cmd_func_t) fluid_handle_router_par1,
"router_par1 min max mul add filters and maps parameter 1 (key/ctrl nr)"}, "router_par1 min max mul add filters and maps parameter 1 (key/ctrl nr)"},
{ "router_par2", "router", (fluid_cmd_func_t) fluid_handle_router_par2, NULL, { "router_par2", "router", (fluid_cmd_func_t) fluid_handle_router_par2,
"router_par2 min max mul add filters and maps parameter 2 (vel/cc val)"}, "router_par2 min max mul add filters and maps parameter 2 (vel/cc val)"},
{ "router_end", "router", (fluid_cmd_func_t) fluid_handle_router_end, NULL, { "router_end", "router", (fluid_cmd_func_t) fluid_handle_router_end,
"router_end closes and commits the current routing rule"}, "router_end closes and commits the current routing rule"}
{ NULL, NULL, NULL, NULL, NULL }
}; };
/** /**
@ -1609,7 +1619,7 @@ fluid_handle_help(fluid_cmd_handler_t* handler, int ac, char** av, fluid_ostream
char* topic = "help"; /* default, if no topic is given */ char* topic = "help"; /* default, if no topic is given */
int count = 0; int count = 0;
int i; unsigned int i;
fluid_ostream_printf(out, "\n"); fluid_ostream_printf(out, "\n");
/* 1st argument (optional): help topic */ /* 1st argument (optional): help topic */
@ -1621,9 +1631,9 @@ fluid_handle_help(fluid_cmd_handler_t* handler, int ac, char** av, fluid_ostream
fluid_ostream_printf(out, fluid_ostream_printf(out,
"*** Help topics:***\n" "*** Help topics:***\n"
"help all (prints all topics)\n"); "help all (prints all topics)\n");
for (i = 0; fluid_commands[i].name != NULL; i++) { for (i = 0; i < FLUID_N_ELEMENTS(fluid_commands); i++) {
int listed_first_time = 1; int listed_first_time = 1;
int ii; unsigned int ii;
for (ii = 0; ii < i; ii++){ for (ii = 0; ii < i; ii++){
if (strcmp(fluid_commands[i].topic, fluid_commands[ii].topic) == 0){ if (strcmp(fluid_commands[i].topic, fluid_commands[ii].topic) == 0){
listed_first_time = 0; listed_first_time = 0;
@ -1635,10 +1645,9 @@ fluid_handle_help(fluid_cmd_handler_t* handler, int ac, char** av, fluid_ostream
}; /* for all topics (outer loop) */ }; /* for all topics (outer loop) */
} else { } else {
/* help (arbitrary topic or "all") */ /* help (arbitrary topic or "all") */
for (i = 0; fluid_commands[i].name != NULL; i++) { for (i = 0; FLUID_N_ELEMENTS(fluid_commands); i++) {
fluid_cmd_t cmd = fluid_commands[i]; if (fluid_commands[i].help != NULL) {
if (cmd.help != NULL) { if (strcmp(topic,"all") == 0 || strcmp(topic,fluid_commands[i].topic) == 0){
if (strcmp(topic,"all") == 0 || strcmp(topic,cmd.topic) == 0){
fluid_ostream_printf(out, "%s\n", fluid_commands[i].help); fluid_ostream_printf(out, "%s\n", fluid_commands[i].help);
count++; count++;
}; /* if it matches the topic */ }; /* if it matches the topic */
@ -2188,7 +2197,7 @@ fluid_cmd_handler_destroy_hash_value (void *value)
*/ */
fluid_cmd_handler_t* new_fluid_cmd_handler(fluid_synth_t* synth, fluid_midi_router_t* router) fluid_cmd_handler_t* new_fluid_cmd_handler(fluid_synth_t* synth, fluid_midi_router_t* router)
{ {
int i; unsigned int i;
fluid_cmd_handler_t* handler; fluid_cmd_handler_t* handler;
handler = FLUID_NEW(fluid_cmd_handler_t); handler = FLUID_NEW(fluid_cmd_handler_t);
@ -2206,11 +2215,17 @@ fluid_cmd_handler_t* new_fluid_cmd_handler(fluid_synth_t* synth, fluid_midi_rout
handler->router = router; handler->router = router;
if (synth != NULL) { if (synth != NULL) {
for (i = 0; fluid_commands[i].name != NULL; i++) for (i = 0; i < FLUID_N_ELEMENTS(fluid_commands); i++)
{ {
fluid_commands[i].data = handler; fluid_cmd_t cmd = {
fluid_cmd_handler_register(handler, &fluid_commands[i]); (char *)fluid_commands[i].name,
fluid_commands[i].data = NULL; (char *)fluid_commands[i].topic,
fluid_commands[i].handler,
handler,
(char *)fluid_commands[i].help
};
fluid_cmd_handler_register(handler, &cmd);
} }
} }

View File

@ -54,21 +54,20 @@ struct _fluid_file_renderer_t {
/* File audio format names. /* File audio format names.
* !! Keep in sync with format_ids[] */ * !! Keep in sync with format_ids[] */
const char *format_names[] = { static const char * const format_names[] = {
"s8", "s8",
"s16", "s16",
"s24", "s24",
"s32", "s32",
"u8", "u8",
"float", "float",
"double", "double"
NULL /* Terminator */
}; };
/* File audio format IDs. /* File audio format IDs.
* !! Keep in sync with format_names[] */ * !! Keep in sync with format_names[] */
const int format_ids[] = { static const int format_ids[] = {
SF_FORMAT_PCM_S8, SF_FORMAT_PCM_S8,
SF_FORMAT_PCM_16, SF_FORMAT_PCM_16,
SF_FORMAT_PCM_24, SF_FORMAT_PCM_24,
@ -80,17 +79,16 @@ const int format_ids[] = {
/* File endian byte order names. /* File endian byte order names.
* !! Keep in sync with endian_ids[] */ * !! Keep in sync with endian_ids[] */
const char *endian_names[] = { static const char * const endian_names[] = {
"auto", "auto",
"little", "little",
"big", "big",
"cpu", "cpu"
NULL
}; };
/* File endian byte order ids. /* File endian byte order ids.
* !! Keep in sync with endian_names[] */ * !! Keep in sync with endian_names[] */
const int endian_ids[] = { static const int endian_ids[] = {
SF_ENDIAN_FILE, SF_ENDIAN_FILE,
SF_ENDIAN_LITTLE, SF_ENDIAN_LITTLE,
SF_ENDIAN_BIG, SF_ENDIAN_BIG,
@ -107,21 +105,18 @@ static int fluid_file_renderer_find_valid_format (SF_INFO *info);
/* File type names. */ /* File type names. */
const char *type_names[] = { static const char * const type_names[] = {
"raw", "raw"
NULL /* Terminator */
}; };
/* File audio format names. */ /* File audio format names. */
const char *format_names[] = { static const char * const format_names[] = {
"s16", "s16"
NULL /* Terminator */
}; };
/* File endian byte order names. */ /* File endian byte order names. */
const char *endian_names[] = { static const char * const endian_names[] = {
"cpu", "cpu"
NULL
}; };
#endif #endif
@ -134,7 +129,7 @@ fluid_file_renderer_settings (fluid_settings_t* settings)
SF_FORMAT_INFO finfo, cmpinfo; SF_FORMAT_INFO finfo, cmpinfo;
int major_count; int major_count;
int i, i2; int i, i2;
const char **np; unsigned int n;
fluid_settings_register_str(settings, "audio.file.name", "fluidsynth.wav", fluid_settings_register_str(settings, "audio.file.name", "fluidsynth.wav",
FLUID_HINT_FILENAME, NULL, NULL); FLUID_HINT_FILENAME, NULL, NULL);
@ -165,11 +160,11 @@ fluid_file_renderer_settings (fluid_settings_t* settings)
fluid_settings_add_option (settings, "audio.file.type", finfo.extension); fluid_settings_add_option (settings, "audio.file.type", finfo.extension);
} }
for (np = format_names; *np; np++) for (n = 0; n < FLUID_N_ELEMENTS(format_names); n++)
fluid_settings_add_option (settings, "audio.file.format", *np); fluid_settings_add_option (settings, "audio.file.format", format_names[n]);
for (np = endian_names; *np; np++) for (n = 0; n < FLUID_N_ELEMENTS(endian_names); n++)
fluid_settings_add_option (settings, "audio.file.endian", *np); fluid_settings_add_option (settings, "audio.file.endian", endian_names[n]);
#else #else
@ -417,7 +412,7 @@ fluid_file_renderer_parse_options (char *filetype, char *format, char *endian,
{ {
int type = -1; /* -1 indicates "auto" type */ int type = -1; /* -1 indicates "auto" type */
char *s; char *s;
int i; unsigned int i;
/* If "auto" type, then use extension to search for a match */ /* If "auto" type, then use extension to search for a match */
if (!filetype || FLUID_STRCMP (filetype, "auto") == 0) if (!filetype || FLUID_STRCMP (filetype, "auto") == 0)
@ -443,11 +438,11 @@ fluid_file_renderer_parse_options (char *filetype, char *format, char *endian,
/* Look for subtype */ /* Look for subtype */
if (format) if (format)
{ {
for (i = 0; format_names[i]; i++) for (i = 0; i < FLUID_N_ELEMENTS(format_names); i++)
if (FLUID_STRCMP (format, format_names[i]) == 0) if (FLUID_STRCMP (format, format_names[i]) == 0)
break; break;
if (!format_names[i]) if (i >= FLUID_N_ELEMENTS(format_names))
{ {
FLUID_LOG (FLUID_ERR, "Invalid or unsupported file audio format '%s'", format); FLUID_LOG (FLUID_ERR, "Invalid or unsupported file audio format '%s'", format);
return FALSE; return FALSE;
@ -466,11 +461,11 @@ fluid_file_renderer_parse_options (char *filetype, char *format, char *endian,
/* Look for endian */ /* Look for endian */
if (endian) if (endian)
{ {
for (i = 0; endian_names[i]; i++) for (i = 0; i < FLUID_N_ELEMENTS(endian_names); i++)
if (FLUID_STRCMP (endian, endian_names[i]) == 0) if (FLUID_STRCMP (endian, endian_names[i]) == 0)
break; break;
if (!endian_names[i]) if (i >= FLUID_N_ELEMENTS(endian_names))
{ {
FLUID_LOG (FLUID_ERR, "Invalid or unsupported endian byte order '%s'", endian); FLUID_LOG (FLUID_ERR, "Invalid or unsupported endian byte order '%s'", endian);
return FALSE; return FALSE;

View File

@ -27,7 +27,7 @@
typedef struct _fluid_audriver_definition_t typedef struct _fluid_audriver_definition_t
{ {
char* name; const char* name;
fluid_audio_driver_t* (*new)(fluid_settings_t* settings, fluid_synth_t* synth); fluid_audio_driver_t* (*new)(fluid_settings_t* settings, fluid_synth_t* synth);
fluid_audio_driver_t* (*new2)(fluid_settings_t* settings, fluid_audio_driver_t* (*new2)(fluid_settings_t* settings,
fluid_audio_func_t func, fluid_audio_func_t func,
@ -119,7 +119,7 @@ int delete_fluid_file_audio_driver(fluid_audio_driver_t* p);
#endif #endif
/* Available audio drivers, listed in order of preference */ /* Available audio drivers, listed in order of preference */
fluid_audriver_definition_t fluid_audio_drivers[] = { static const fluid_audriver_definition_t fluid_audio_drivers[] = {
#if JACK_SUPPORT #if JACK_SUPPORT
{ "jack", { "jack",
new_fluid_jack_audio_driver, new_fluid_jack_audio_driver,
@ -190,7 +190,6 @@ fluid_audriver_definition_t fluid_audio_drivers[] = {
delete_fluid_file_audio_driver, delete_fluid_file_audio_driver,
NULL }, NULL },
#endif #endif
{ NULL, NULL, NULL, NULL, NULL }
}; };
@ -198,7 +197,7 @@ fluid_audriver_definition_t fluid_audio_drivers[] = {
void fluid_audio_driver_settings(fluid_settings_t* settings) void fluid_audio_driver_settings(fluid_settings_t* settings)
{ {
int i; unsigned int i;
fluid_settings_register_str(settings, "audio.sample-format", "16bits", 0, NULL, NULL); fluid_settings_register_str(settings, "audio.sample-format", "16bits", 0, NULL, NULL);
fluid_settings_add_option(settings, "audio.sample-format", "16bits"); fluid_settings_add_option(settings, "audio.sample-format", "16bits");
@ -275,7 +274,7 @@ void fluid_audio_driver_settings(fluid_settings_t* settings)
fluid_settings_add_option(settings, "audio.driver", "file"); fluid_settings_add_option(settings, "audio.driver", "file");
#endif #endif
for (i = 0; fluid_audio_drivers[i].name != NULL; i++) { for (i = 0; i < FLUID_N_ELEMENTS(fluid_audio_drivers); i++) {
if (fluid_audio_drivers[i].settings != NULL) { if (fluid_audio_drivers[i].settings != NULL) {
fluid_audio_drivers[i].settings(settings); fluid_audio_drivers[i].settings(settings);
} }
@ -295,12 +294,12 @@ void fluid_audio_driver_settings(fluid_settings_t* settings)
fluid_audio_driver_t* fluid_audio_driver_t*
new_fluid_audio_driver(fluid_settings_t* settings, fluid_synth_t* synth) new_fluid_audio_driver(fluid_settings_t* settings, fluid_synth_t* synth)
{ {
int i; unsigned int i;
fluid_audio_driver_t* driver = NULL; fluid_audio_driver_t* driver = NULL;
char* name; char* name;
char *allnames; char *allnames;
for (i = 0; fluid_audio_drivers[i].name != NULL; i++) { for (i = 0; i < FLUID_N_ELEMENTS(fluid_audio_drivers); i++) {
if (fluid_settings_str_equal(settings, "audio.driver", fluid_audio_drivers[i].name)) { if (fluid_settings_str_equal(settings, "audio.driver", fluid_audio_drivers[i].name)) {
FLUID_LOG(FLUID_DBG, "Using '%s' audio driver", fluid_audio_drivers[i].name); FLUID_LOG(FLUID_DBG, "Using '%s' audio driver", fluid_audio_drivers[i].name);
driver = (*fluid_audio_drivers[i].new)(settings, synth); driver = (*fluid_audio_drivers[i].new)(settings, synth);
@ -337,11 +336,11 @@ new_fluid_audio_driver(fluid_settings_t* settings, fluid_synth_t* synth)
fluid_audio_driver_t* fluid_audio_driver_t*
new_fluid_audio_driver2(fluid_settings_t* settings, fluid_audio_func_t func, void* data) new_fluid_audio_driver2(fluid_settings_t* settings, fluid_audio_func_t func, void* data)
{ {
int i; unsigned int i;
fluid_audio_driver_t* driver = NULL; fluid_audio_driver_t* driver = NULL;
char* name; char* name;
for (i = 0; fluid_audio_drivers[i].name != NULL; i++) { for (i = 0; i < FLUID_N_ELEMENTS(fluid_audio_drivers); i++) {
if (fluid_settings_str_equal(settings, "audio.driver", fluid_audio_drivers[i].name) && if (fluid_settings_str_equal(settings, "audio.driver", fluid_audio_drivers[i].name) &&
(fluid_audio_drivers[i].new2 != NULL)) { (fluid_audio_drivers[i].new2 != NULL)) {
FLUID_LOG(FLUID_DBG, "Using '%s' audio driver", fluid_audio_drivers[i].name); FLUID_LOG(FLUID_DBG, "Using '%s' audio driver", fluid_audio_drivers[i].name);
@ -369,9 +368,9 @@ new_fluid_audio_driver2(fluid_settings_t* settings, fluid_audio_func_t func, voi
void void
delete_fluid_audio_driver(fluid_audio_driver_t* driver) delete_fluid_audio_driver(fluid_audio_driver_t* driver)
{ {
int i; unsigned int i;
for (i = 0; fluid_audio_drivers[i].name != NULL; i++) { for (i = 0; i < FLUID_N_ELEMENTS(fluid_audio_drivers); i++) {
if (fluid_audio_drivers[i].name == driver->name) { if (fluid_audio_drivers[i].name == driver->name) {
fluid_audio_drivers[i].free(driver); fluid_audio_drivers[i].free(driver);
return; return;

View File

@ -21,7 +21,7 @@
#ifndef _FLUID_AUDRIVER_H #ifndef _FLUID_AUDRIVER_H
#define _FLUID_AUDRIVER_H #define _FLUID_AUDRIVER_H
#include "fluidsynth_priv.h" #include "fluid_sys.h"
void fluid_audio_driver_settings(fluid_settings_t* settings); void fluid_audio_driver_settings(fluid_settings_t* settings);
@ -32,7 +32,7 @@ void fluid_audio_driver_settings(fluid_settings_t* settings);
struct _fluid_audio_driver_t struct _fluid_audio_driver_t
{ {
char* name; const char* name;
}; };

View File

@ -86,7 +86,7 @@ void fluid_coremidi_driver_settings(fluid_settings_t* settings);
* fluid_mdriver_definition * fluid_mdriver_definition
*/ */
struct fluid_mdriver_definition_t { struct fluid_mdriver_definition_t {
char* name; const char* name;
fluid_midi_driver_t* (*new)(fluid_settings_t* settings, fluid_midi_driver_t* (*new)(fluid_settings_t* settings,
handle_midi_event_func_t event_handler, handle_midi_event_func_t event_handler,
void* event_handler_data); void* event_handler_data);
@ -95,7 +95,7 @@ struct fluid_mdriver_definition_t {
}; };
struct fluid_mdriver_definition_t fluid_midi_drivers[] = { static const struct fluid_mdriver_definition_t fluid_midi_drivers[] = {
#if JACK_SUPPORT #if JACK_SUPPORT
{ "jack", { "jack",
new_fluid_jack_midi_driver, new_fluid_jack_midi_driver,
@ -136,14 +136,13 @@ struct fluid_mdriver_definition_t fluid_midi_drivers[] = {
delete_fluid_coremidi_driver, delete_fluid_coremidi_driver,
fluid_coremidi_driver_settings }, fluid_coremidi_driver_settings },
#endif #endif
{ NULL, NULL, NULL, NULL }
}; };
void fluid_midi_driver_settings(fluid_settings_t* settings) void fluid_midi_driver_settings(fluid_settings_t* settings)
{ {
int i; unsigned int i;
fluid_settings_register_int (settings, "midi.realtime-prio", fluid_settings_register_int (settings, "midi.realtime-prio",
FLUID_DEFAULT_MIDI_RT_PRIO, 0, 99, 0, NULL, NULL); FLUID_DEFAULT_MIDI_RT_PRIO, 0, 99, 0, NULL, NULL);
@ -186,7 +185,7 @@ void fluid_midi_driver_settings(fluid_settings_t* settings)
fluid_settings_add_option(settings, "midi.driver", "coremidi"); fluid_settings_add_option(settings, "midi.driver", "coremidi");
#endif #endif
for (i = 0; fluid_midi_drivers[i].name != NULL; i++) { for (i = 0; i < FLUID_N_ELEMENTS(fluid_midi_drivers); i++) {
if (fluid_midi_drivers[i].settings != NULL) { if (fluid_midi_drivers[i].settings != NULL) {
fluid_midi_drivers[i].settings(settings); fluid_midi_drivers[i].settings(settings);
} }
@ -205,9 +204,9 @@ fluid_midi_driver_t* new_fluid_midi_driver(fluid_settings_t* settings, handle_mi
{ {
fluid_midi_driver_t* driver = NULL; fluid_midi_driver_t* driver = NULL;
char *allnames; char *allnames;
int i; unsigned int i;
for (i = 0; fluid_midi_drivers[i].name != NULL; i++) { for (i = 0; i < FLUID_N_ELEMENTS(fluid_midi_drivers); i++) {
if (fluid_settings_str_equal(settings, "midi.driver", fluid_midi_drivers[i].name)) { if (fluid_settings_str_equal(settings, "midi.driver", fluid_midi_drivers[i].name)) {
FLUID_LOG(FLUID_DBG, "Using '%s' midi driver", fluid_midi_drivers[i].name); FLUID_LOG(FLUID_DBG, "Using '%s' midi driver", fluid_midi_drivers[i].name);
driver = fluid_midi_drivers[i].new(settings, handler, event_handler_data); driver = fluid_midi_drivers[i].new(settings, handler, event_handler_data);
@ -232,9 +231,9 @@ fluid_midi_driver_t* new_fluid_midi_driver(fluid_settings_t* settings, handle_mi
*/ */
void delete_fluid_midi_driver(fluid_midi_driver_t* driver) void delete_fluid_midi_driver(fluid_midi_driver_t* driver)
{ {
int i; unsigned int i;
for (i = 0; fluid_midi_drivers[i].name != NULL; i++) { for (i = 0; i < FLUID_N_ELEMENTS(fluid_midi_drivers); i++) {
if (fluid_midi_drivers[i].name == driver->name) { if (fluid_midi_drivers[i].name == driver->name) {
fluid_midi_drivers[i].free(driver); fluid_midi_drivers[i].free(driver);
return; return;

View File

@ -21,7 +21,7 @@
#ifndef _FLUID_MDRIVER_H #ifndef _FLUID_MDRIVER_H
#define _FLUID_MDRIVER_H #define _FLUID_MDRIVER_H
#include "fluidsynth_priv.h" #include "fluid_sys.h"
void fluid_midi_driver_settings(fluid_settings_t* settings); void fluid_midi_driver_settings(fluid_settings_t* settings);
@ -32,7 +32,7 @@ void fluid_midi_driver_settings(fluid_settings_t* settings);
struct _fluid_midi_driver_t struct _fluid_midi_driver_t
{ {
char* name; const char* name;
handle_midi_event_func_t handler; handle_midi_event_func_t handler;
void* data; void* data;
}; };

View File

@ -46,7 +46,7 @@ typedef enum
* reverb preset * reverb preset
*/ */
typedef struct _fluid_revmodel_presets_t { typedef struct _fluid_revmodel_presets_t {
char* name; const char* name;
fluid_real_t roomsize; fluid_real_t roomsize;
fluid_real_t damp; fluid_real_t damp;
fluid_real_t width; fluid_real_t width;

View File

@ -2132,7 +2132,7 @@ static int fixup_pgen (SFData * sf);
static int fixup_igen (SFData * sf); static int fixup_igen (SFData * sf);
static int fixup_sample (SFData * sf); static int fixup_sample (SFData * sf);
char idlist[] = { static const char idlist[] = {
"RIFFLISTsfbkINFOsdtapdtaifilisngINAMiromiverICRDIENGIPRD" "RIFFLISTsfbkINFOsdtapdtaifilisngINAMiromiverICRDIENGIPRD"
"ICOPICMTISFTsnamsmplphdrpbagpmodpgeninstibagimodigenshdr" "ICOPICMTISFTsnamsmplphdrpbagpmodpgeninstibagimodigenshdr"
}; };
@ -2421,7 +2421,7 @@ pdtahelper (unsigned int expid, unsigned int reclen, SFChunk * chunk,
int * size, FILE * fd) int * size, FILE * fd)
{ {
unsigned int id; unsigned int id;
char *expstr; const char *expstr;
expstr = CHNKIDSTR (expid); /* in case we need it */ expstr = CHNKIDSTR (expid); /* in case we need it */
@ -3429,11 +3429,13 @@ fixup_sample (SFData * sf)
#define MOD_CHUNK_OPTIMUM_AREA 256 #define MOD_CHUNK_OPTIMUM_AREA 256
#define GEN_CHUNK_OPTIMUM_AREA 256 #define GEN_CHUNK_OPTIMUM_AREA 256
unsigned short badgen[] = { Gen_Unused1, Gen_Unused2, Gen_Unused3, Gen_Unused4, static const unsigned short badgen[] = {
Gen_Unused1, Gen_Unused2, Gen_Unused3, Gen_Unused4,
Gen_Reserved1, Gen_Reserved2, Gen_Reserved3, 0 Gen_Reserved1, Gen_Reserved2, Gen_Reserved3, 0
}; };
unsigned short badpgen[] = { Gen_StartAddrOfs, Gen_EndAddrOfs, Gen_StartLoopAddrOfs, static const unsigned short badpgen[] = {
Gen_StartAddrOfs, Gen_EndAddrOfs, Gen_StartLoopAddrOfs,
Gen_EndLoopAddrOfs, Gen_StartAddrCoarseOfs, Gen_EndAddrCoarseOfs, Gen_EndLoopAddrOfs, Gen_StartAddrCoarseOfs, Gen_EndAddrCoarseOfs,
Gen_StartLoopAddrCoarseOfs, Gen_Keynum, Gen_Velocity, Gen_StartLoopAddrCoarseOfs, Gen_Keynum, Gen_Velocity,
Gen_EndLoopAddrCoarseOfs, Gen_SampleModes, Gen_ExclusiveClass, Gen_EndLoopAddrCoarseOfs, Gen_SampleModes, Gen_ExclusiveClass,

View File

@ -212,11 +212,6 @@ typedef enum
} }
Gen_Unit; Gen_Unit;
/* global data */
extern unsigned short badgen[]; /* list of bad generators */
extern unsigned short badpgen[]; /* list of bad preset generators */
/* functions */ /* functions */
void sfont_init_chunks (void); void sfont_init_chunks (void);
@ -295,9 +290,6 @@ typedef struct _SFShdr
} }
SFShdr; SFShdr;
/* data */
extern char idlist[];
/* functions */ /* functions */
SFData *sfload_file (const char * fname); SFData *sfload_file (const char * fname);

View File

@ -24,7 +24,7 @@
/* See SFSpec21 $8.1.3 */ /* See SFSpec21 $8.1.3 */
fluid_gen_info_t fluid_gen_info[] = { static const fluid_gen_info_t fluid_gen_info[] = {
/* number/name init scale min max def */ /* number/name init scale min max def */
{ GEN_STARTADDROFS, 1, 1, 0.0f, 1e10f, 0.0f }, { GEN_STARTADDROFS, 1, 1, 0.0f, 1e10f, 0.0f },
{ GEN_ENDADDROFS, 1, 1, -1e10f, 0.0f, 0.0f }, { GEN_ENDADDROFS, 1, 1, -1e10f, 0.0f, 0.0f },

View File

@ -139,14 +139,13 @@ fluid_mod_t default_chorus_mod; /* SF2.01 section 8.4.9 */
fluid_mod_t default_pitch_bend_mod; /* SF2.01 section 8.4.10 */ fluid_mod_t default_pitch_bend_mod; /* SF2.01 section 8.4.10 */
/* reverb presets */ /* reverb presets */
static fluid_revmodel_presets_t revmodel_preset[] = { static const fluid_revmodel_presets_t revmodel_preset[] = {
/* name */ /* roomsize */ /* damp */ /* width */ /* level */ /* name */ /* roomsize */ /* damp */ /* width */ /* level */
{ "Test 1", 0.2f, 0.0f, 0.5f, 0.9f }, { "Test 1", 0.2f, 0.0f, 0.5f, 0.9f },
{ "Test 2", 0.4f, 0.2f, 0.5f, 0.8f }, { "Test 2", 0.4f, 0.2f, 0.5f, 0.8f },
{ "Test 3", 0.6f, 0.4f, 0.5f, 0.7f }, { "Test 3", 0.6f, 0.4f, 0.5f, 0.7f },
{ "Test 4", 0.8f, 0.7f, 0.5f, 0.6f }, { "Test 4", 0.8f, 0.7f, 0.5f, 0.6f },
{ "Test 5", 0.8f, 1.0f, 0.5f, 0.5f }, { "Test 5", 0.8f, 1.0f, 0.5f, 0.5f },
{ NULL, 0.0f, 0.0f, 0.0f, 0.0f }
}; };
@ -1741,7 +1740,6 @@ fluid_synth_system_reset(fluid_synth_t* synth)
static int static int
fluid_synth_system_reset_LOCAL(fluid_synth_t* synth) fluid_synth_system_reset_LOCAL(fluid_synth_t* synth)
{ {
fluid_voice_t* voice;
int i; int i;
fluid_synth_all_sounds_off_LOCAL(synth, -1); fluid_synth_all_sounds_off_LOCAL(synth, -1);
@ -3801,7 +3799,7 @@ fluid_synth_get_channel_info (fluid_synth_t *synth, int chan,
{ {
fluid_channel_t *channel; fluid_channel_t *channel;
fluid_preset_t *preset; fluid_preset_t *preset;
char *name; const char *name;
if (info) if (info)
{ {
@ -3899,19 +3897,17 @@ fluid_synth_set_reverb_on(fluid_synth_t* synth, int on)
* @note Currently private to libfluidsynth. * @note Currently private to libfluidsynth.
*/ */
int int
fluid_synth_set_reverb_preset(fluid_synth_t* synth, int num) fluid_synth_set_reverb_preset(fluid_synth_t* synth, unsigned int num)
{ {
int i = 0; fluid_return_val_if_fail (
while (revmodel_preset[i].name != NULL) { num < FLUID_N_ELEMENTS(revmodel_preset),
if (i == num) { FLUID_FAILED
fluid_synth_set_reverb (synth, revmodel_preset[i].roomsize, );
revmodel_preset[i].damp, revmodel_preset[i].width,
revmodel_preset[i].level); fluid_synth_set_reverb (synth, revmodel_preset[num].roomsize,
return FLUID_OK; revmodel_preset[num].damp, revmodel_preset[num].width,
} revmodel_preset[num].level);
i++; return FLUID_OK;
}
return FLUID_FAILED;
} }
/** /**

View File

@ -191,7 +191,7 @@ void fluid_synth_dither_s16(int *dither_index, int len, float* lin, float* rin,
void* rout, int roff, int rincr); void* rout, int roff, int rincr);
int fluid_synth_reset_reverb(fluid_synth_t* synth); int fluid_synth_reset_reverb(fluid_synth_t* synth);
int fluid_synth_set_reverb_preset(fluid_synth_t* synth, int num); int fluid_synth_set_reverb_preset(fluid_synth_t* synth, unsigned int num);
int fluid_synth_set_reverb_full(fluid_synth_t* synth, int set, double roomsize, int fluid_synth_set_reverb_full(fluid_synth_t* synth, int set, double roomsize,
double damping, double width, double level); double damping, double width, double level);

View File

@ -86,13 +86,13 @@ fluid_conversion_config(void)
implemented according to the pictures on SF2.01 page 73. */ implemented according to the pictures on SF2.01 page 73. */
for (i = 1; i < 127; i++) { for (i = 1; i < 127; i++) {
x = -20.0 / 96.0 * log((i * i) / (127.0 * 127.0)) / log(10.0); x = -20.0 / 96.0 * log((i * i) / (127.0 * 127.0)) / M_LN10;
fluid_convex_tab[i] = (fluid_real_t) (1.0 - x); fluid_convex_tab[i] = (fluid_real_t) (1.0 - x);
fluid_concave_tab[127 - i] = (fluid_real_t) x; fluid_concave_tab[127 - i] = (fluid_real_t) x;
} }
/* initialize the pan conversion table */ /* initialize the pan conversion table */
x = PI / 2.0 / (FLUID_PAN_SIZE - 1.0); x = M_PI / 2.0 / (FLUID_PAN_SIZE - 1.0);
for (i = 0; i < FLUID_PAN_SIZE; i++) { for (i = 0; i < FLUID_PAN_SIZE; i++) {
fluid_pan_tab[i] = (fluid_real_t) sin(i * x); fluid_pan_tab[i] = (fluid_real_t) sin(i * x);
} }
@ -281,7 +281,7 @@ fluid_act2hz(fluid_real_t c)
fluid_real_t fluid_real_t
fluid_hz2ct(fluid_real_t f) fluid_hz2ct(fluid_real_t f)
{ {
return (fluid_real_t) (6900 + 1200 * log(f / 440.0) / log(2.0)); return (fluid_real_t) (6900 + 1200 * log(f / 440.0) / M_LN2);
} }
/* /*

View File

@ -74,7 +74,7 @@ static fluid_log_function_t fluid_log_function[LAST_LOG_LEVEL];
static void* fluid_log_user_data[LAST_LOG_LEVEL]; static void* fluid_log_user_data[LAST_LOG_LEVEL];
static int fluid_log_initialized = 0; static int fluid_log_initialized = 0;
static char* fluid_libname = "fluidsynth"; static const char fluid_libname[] = "fluidsynth";
void fluid_sys_config() void fluid_sys_config()

View File

@ -206,10 +206,6 @@ typedef struct _fluid_sample_timer_t fluid_sample_timer_t;
#define FLUID_DEFAULT_AUDIO_RT_PRIO 60 /**< Default setting for audio.realtime-prio */ #define FLUID_DEFAULT_AUDIO_RT_PRIO 60 /**< Default setting for audio.realtime-prio */
#define FLUID_DEFAULT_MIDI_RT_PRIO 50 /**< Default setting for midi.realtime-prio */ #define FLUID_DEFAULT_MIDI_RT_PRIO 50 /**< Default setting for midi.realtime-prio */
#ifndef PI
#define PI 3.141592654
#endif
/*************************************************************** /***************************************************************
* *
* SYSTEM INTERFACE * SYSTEM INTERFACE
@ -291,6 +287,13 @@ do { strncpy(_dst,_src,_n); \
#define M_PI 3.1415926535897932384626433832795 #define M_PI 3.1415926535897932384626433832795
#endif #endif
#ifndef M_LN2
#define M_LN2 0.69314718055994530941723212145818
#endif
#ifndef M_LN10
#define M_LN10 2.3025850929940456840179914546844
#endif
#define FLUID_ASSERT(a,b) #define FLUID_ASSERT(a,b)
#define FLUID_ASSERT_P(a,b) #define FLUID_ASSERT_P(a,b)