From 75134e8ccf706208d4f4c1354444550ccf967408 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sat, 23 Feb 2019 17:58:05 +0100 Subject: Update Fluidsynth to v2.0.4 see https://github.com/FluidSynth/fluidsynth/releases/tag/v2.0.4 --- libs/fluidsynth/README | 2 +- libs/fluidsynth/config.h | 6 +- libs/fluidsynth/src/fluid_chan.c | 1 - libs/fluidsynth/src/fluid_chan.h | 15 +-- libs/fluidsynth/src/fluid_conv.c | 1 + libs/fluidsynth/src/fluid_defsfont.c | 15 ++- libs/fluidsynth/src/fluid_defsfont.h | 2 +- libs/fluidsynth/src/fluid_gen.c | 42 +------ libs/fluidsynth/src/fluid_gen.h | 6 +- libs/fluidsynth/src/fluid_hash.c | 2 +- libs/fluidsynth/src/fluid_midi.c | 13 +- libs/fluidsynth/src/fluid_ringbuffer.c | 2 +- libs/fluidsynth/src/fluid_rvoice_dsp.c | 3 +- libs/fluidsynth/src/fluid_rvoice_mixer.c | 1 - libs/fluidsynth/src/fluid_samplecache.c | 1 - libs/fluidsynth/src/fluid_settings.c | 15 ++- libs/fluidsynth/src/fluid_sffile.c | 12 +- libs/fluidsynth/src/fluid_sfont.c | 22 +++- libs/fluidsynth/src/fluid_synth.c | 49 ++------ libs/fluidsynth/src/fluid_synth.h | 3 - libs/fluidsynth/src/fluid_sys.c | 40 +++---- libs/fluidsynth/src/fluid_sys.h | 186 ++++++++++++++++++++++------- libs/fluidsynth/src/fluid_tuning.c | 1 - libs/fluidsynth/src/fluid_voice.c | 20 +--- libs/fluidsynth/src/fluid_voice.h | 3 +- libs/fluidsynth/src/fluidsynth_priv.h | 164 ++++++------------------- tools/fluid-patches/ardour_fluidsynth.diff | 69 +++++------ 27 files changed, 308 insertions(+), 388 deletions(-) diff --git a/libs/fluidsynth/README b/libs/fluidsynth/README index 3fcf3159f0..754d0e9117 100644 --- a/libs/fluidsynth/README +++ b/libs/fluidsynth/README @@ -1,7 +1,7 @@ This is a stripped down version of fluidsynth (library only) from git://github.com/FluidSynth/fluidsynth.git -rev. v2.0.3-16-g8b18205 +rev. v2.0.4-32-g5f8fa6f5 fluidsynth is licensed in terms of the LGPL-2+, see individual source files for (C) holders. diff --git a/libs/fluidsynth/config.h b/libs/fluidsynth/config.h index 47c5c27b48..7478013c3f 100644 --- a/libs/fluidsynth/config.h +++ b/libs/fluidsynth/config.h @@ -3,8 +3,8 @@ #define FLUIDSYNTH_VERSION_MAJOR 2 #define FLUIDSYNTH_VERSION_MINOR 0 -#define FLUIDSYNTH_VERSION_MICRO 2 -#define FLUIDSYNTH_VERSION "2.0.2" +#define FLUIDSYNTH_VERSION_MICRO 4 +#define FLUIDSYNTH_VERSION "2.0.4" /* Define to enable ALSA driver */ /* #undef ALSA_SUPPORT */ @@ -198,7 +198,7 @@ /* #undef TRAP_ON_FPE */ /* Version number of package */ -#define VERSION "1.1.6" +#define VERSION "2.0.4" /* Define to do all DSP in single floating point precision */ /* #undef WITH_FLOAT */ diff --git a/libs/fluidsynth/src/fluid_chan.c b/libs/fluidsynth/src/fluid_chan.c index 49ef99ecbe..365c0fd2a1 100644 --- a/libs/fluidsynth/src/fluid_chan.c +++ b/libs/fluidsynth/src/fluid_chan.c @@ -128,7 +128,6 @@ fluid_channel_init_ctrl(fluid_channel_t *chan, int is_all_ctrl_off) for(i = 0; i < GEN_LAST; i++) { chan->gen[i] = 0.0f; - chan->gen_abs[i] = 0; } if(is_all_ctrl_off) diff --git a/libs/fluidsynth/src/fluid_chan.h b/libs/fluidsynth/src/fluid_chan.h index 42d73df7b5..a9ca1bcabb 100644 --- a/libs/fluidsynth/src/fluid_chan.h +++ b/libs/fluidsynth/src/fluid_chan.h @@ -129,18 +129,6 @@ struct _fluid_channel_t * applied to future notes. They are copied to a voice's generators * in fluid_voice_init(), which calls fluid_gen_init(). */ fluid_real_t gen[GEN_LAST]; - - /* By default, the NRPN values are relative to the values of the - * generators set in the SoundFont. For example, if the NRPN - * specifies an attack of 100 msec then 100 msec will be added to the - * combined attack time of the sound font and the modulators. - * - * However, it is useful to be able to specify the generator value - * absolutely, completely ignoring the generators of the SoundFont - * and the values of modulators. The gen_abs field, is a boolean - * flag indicating whether the NRPN value is absolute or not. - */ - char gen_abs[GEN_LAST]; }; fluid_channel_t *new_fluid_channel(fluid_synth_t *synth, int num); @@ -200,9 +188,8 @@ void fluid_channel_get_sfont_bank_prog(fluid_channel_t *chan, int *sfont, #define fluid_channel_legato(_c) ((_c)->cc[LEGATO_SWITCH] >= 64) #define fluid_channel_sustained(_c) ((_c)->cc[SUSTAIN_SWITCH] >= 64) #define fluid_channel_sostenuto(_c) ((_c)->cc[SOSTENUTO_SWITCH] >= 64) -#define fluid_channel_set_gen(_c, _n, _v, _a) { (_c)->gen[_n] = _v; (_c)->gen_abs[_n] = _a; } +#define fluid_channel_set_gen(_c, _n, _v) { (_c)->gen[_n] = _v; } #define fluid_channel_get_gen(_c, _n) ((_c)->gen[_n]) -#define fluid_channel_get_gen_abs(_c, _n) ((_c)->gen_abs[_n]) #define fluid_channel_get_min_note_length_ticks(chan) \ ((chan)->synth->min_note_length_ticks) diff --git a/libs/fluidsynth/src/fluid_conv.c b/libs/fluidsynth/src/fluid_conv.c index 483b371d5e..6e169b038f 100644 --- a/libs/fluidsynth/src/fluid_conv.c +++ b/libs/fluidsynth/src/fluid_conv.c @@ -19,6 +19,7 @@ */ #include "fluid_conv.h" +#include "fluid_sys.h" #include "fluid_conv_tables.c" /* diff --git a/libs/fluidsynth/src/fluid_defsfont.c b/libs/fluidsynth/src/fluid_defsfont.c index d7960cbb9c..ae8a9fb2da 100644 --- a/libs/fluidsynth/src/fluid_defsfont.c +++ b/libs/fluidsynth/src/fluid_defsfont.c @@ -1015,7 +1015,7 @@ fluid_defpreset_import_sfont(fluid_defpreset_t *defpreset, while(p != NULL) { sfzone = (SFZone *)fluid_list_get(p); - FLUID_SNPRINTF(zone_name, sizeof(zone_name), "%s/%d", defpreset->name, count); + FLUID_SNPRINTF(zone_name, sizeof(zone_name), "pz:%s/%d", defpreset->name, count); zone = new_fluid_preset_zone(zone_name); if(zone == NULL) @@ -1133,7 +1133,7 @@ new_fluid_preset_zone(char *name) /* Flag all generators as unused (default, they will be set when they are found * in the sound font). * This also sets the generator values to default, but that is of no concern here.*/ - fluid_gen_set_default_values(&zone->gen[0]); + fluid_gen_init(&zone->gen[0], NULL); zone->mod = NULL; /* list of modulators */ return zone; } @@ -1605,7 +1605,7 @@ fluid_preset_zone_import_sfont(fluid_preset_zone_t *zone, SFZone *sfzone, fluid_ if(zone->inst == NULL) { - zone->inst = fluid_inst_import_sfont(zone, sfinst, defsfont); + zone->inst = fluid_inst_import_sfont(sfinst, defsfont); } if(zone->inst == NULL) @@ -1697,7 +1697,7 @@ fluid_inst_set_global_zone(fluid_inst_t *inst, fluid_inst_zone_t *zone) * fluid_inst_import_sfont */ fluid_inst_t * -fluid_inst_import_sfont(fluid_preset_zone_t *preset_zone, SFInst *sfinst, fluid_defsfont_t *defsfont) +fluid_inst_import_sfont(SFInst *sfinst, fluid_defsfont_t *defsfont) { fluid_list_t *p; fluid_inst_t *inst; @@ -1733,9 +1733,8 @@ fluid_inst_import_sfont(fluid_preset_zone_t *preset_zone, SFInst *sfinst, fluid_ { sfzone = (SFZone *)fluid_list_get(p); - /* integrates preset zone name in instrument zone name */ - FLUID_SNPRINTF(zone_name, sizeof(zone_name), "%s/%s/%d", preset_zone->name, - inst->name, count); + /* instrument zone name */ + FLUID_SNPRINTF(zone_name, sizeof(zone_name), "iz:%s/%d", inst->name, count); inst_zone = new_fluid_inst_zone(zone_name); @@ -1844,7 +1843,7 @@ new_fluid_inst_zone(char *name) zone->range.ignore = FALSE; /* Flag the generators as unused. * This also sets the generator values to default, but they will be overwritten anyway, if used.*/ - fluid_gen_set_default_values(&zone->gen[0]); + fluid_gen_init(&zone->gen[0], NULL); zone->mod = NULL; /* list of modulators */ return zone; } diff --git a/libs/fluidsynth/src/fluid_defsfont.h b/libs/fluidsynth/src/fluid_defsfont.h index 8b24934d81..86f782f96a 100644 --- a/libs/fluidsynth/src/fluid_defsfont.h +++ b/libs/fluidsynth/src/fluid_defsfont.h @@ -196,7 +196,7 @@ struct _fluid_inst_t }; fluid_inst_t *new_fluid_inst(void); -fluid_inst_t *fluid_inst_import_sfont(fluid_preset_zone_t *preset_zone, SFInst *sfinst, fluid_defsfont_t *defsfont); +fluid_inst_t *fluid_inst_import_sfont(SFInst *sfinst, fluid_defsfont_t *defsfont); void delete_fluid_inst(fluid_inst_t *inst); int fluid_inst_set_global_zone(fluid_inst_t *inst, fluid_inst_zone_t *zone); int fluid_inst_add_zone(fluid_inst_t *inst, fluid_inst_zone_t *zone); diff --git a/libs/fluidsynth/src/fluid_gen.c b/libs/fluidsynth/src/fluid_gen.c index 0d07d786c6..cf3cc48b46 100644 --- a/libs/fluidsynth/src/fluid_gen.c +++ b/libs/fluidsynth/src/fluid_gen.c @@ -92,54 +92,22 @@ static const fluid_gen_info_t fluid_gen_info[] = { GEN_CUSTOM_FILTERQ, 1, 1, 0.0f, 960.0f, 0.0f } }; - -/** - * Set an array of generators to their default values. - * @param gen Array of generators (should be #GEN_LAST in size). - * @return Always returns #FLUID_OK - */ -int -fluid_gen_set_default_values(fluid_gen_t *gen) -{ - int i; - - for(i = 0; i < GEN_LAST; i++) - { - gen[i].flags = GEN_UNUSED; - gen[i].mod = 0.0; - gen[i].nrpn = 0.0; - gen[i].val = fluid_gen_info[i].def; - } - - return FLUID_OK; -} - - /* fluid_gen_init * * Set an array of generators to their initial value */ -int +void fluid_gen_init(fluid_gen_t *gen, fluid_channel_t *channel) { int i; - fluid_gen_set_default_values(gen); - for(i = 0; i < GEN_LAST; i++) { - gen[i].nrpn = fluid_channel_get_gen(channel, i); - - /* This is an extension to the SoundFont standard. More - * documentation is available at the fluid_synth_set_gen2() - * function. */ - if(fluid_channel_get_gen_abs(channel, i)) - { - gen[i].flags = GEN_ABS_NRPN; - } + gen[i].flags = GEN_UNUSED; + gen[i].mod = 0.0; + gen[i].nrpn = (channel == NULL) ? 0.0 : fluid_channel_get_gen(channel, i); + gen[i].val = fluid_gen_info[i].def; } - - return FLUID_OK; } fluid_real_t fluid_gen_scale(int gen, float value) diff --git a/libs/fluidsynth/src/fluid_gen.h b/libs/fluidsynth/src/fluid_gen.h index d156b807b9..76d168c25f 100644 --- a/libs/fluidsynth/src/fluid_gen.h +++ b/libs/fluidsynth/src/fluid_gen.h @@ -31,7 +31,7 @@ typedef struct _fluid_gen_info_t char nrpn_scale; /* The scale to convert from NRPN (cfr. fluid_gen_map_nrpn()) */ float min; /* The minimum value */ float max; /* The maximum value */ - float def; /* The default value (cfr. fluid_gen_set_default_values()) */ + float def; /* The default value (cfr. fluid_gen_init()) */ } fluid_gen_info_t; /* @@ -52,7 +52,6 @@ enum fluid_gen_flags { GEN_UNUSED, /**< Generator value is not set */ GEN_SET, /**< Generator value is set */ - GEN_ABS_NRPN /**< Generator is an absolute value */ }; #define fluid_gen_set_mod(_gen, _val) { (_gen)->mod = (double) (_val); } @@ -60,8 +59,7 @@ enum fluid_gen_flags fluid_real_t fluid_gen_scale(int gen, float value); fluid_real_t fluid_gen_scale_nrpn(int gen, int nrpn); -int fluid_gen_init(fluid_gen_t *gen, fluid_channel_t *channel); -int fluid_gen_set_default_values(fluid_gen_t *gen); +void fluid_gen_init(fluid_gen_t *gen, fluid_channel_t *channel); #endif /* _FLUID_GEN_H */ diff --git a/libs/fluidsynth/src/fluid_hash.c b/libs/fluidsynth/src/fluid_hash.c index b6586895b5..79f83a4583 100644 --- a/libs/fluidsynth/src/fluid_hash.c +++ b/libs/fluidsynth/src/fluid_hash.c @@ -31,7 +31,7 @@ * MT safe */ -#include "fluidsynth_priv.h" +#include "fluid_sys.h" #include "fluid_hash.h" #include "fluid_list.h" diff --git a/libs/fluidsynth/src/fluid_midi.c b/libs/fluidsynth/src/fluid_midi.c index 8deb0b0d1b..73551a6d8c 100644 --- a/libs/fluidsynth/src/fluid_midi.c +++ b/libs/fluidsynth/src/fluid_midi.c @@ -34,6 +34,7 @@ static long fluid_getlength(unsigned char *s); * Note: This rewinds the file to the start before reading. * Returns NULL if there was an error reading or allocating memory. */ +typedef FILE *fluid_file; static char *fluid_file_read_full(fluid_file fp, size_t *length); static void fluid_midi_event_set_sysex_LOCAL(fluid_midi_event_t *evt, int type, void *data, int size, int dynamic); static void fluid_midi_event_get_sysex_LOCAL(fluid_midi_event_t *evt, void **data, int *size); @@ -92,17 +93,23 @@ static int fluid_midi_file_get_division(fluid_midi_file *midifile); */ int fluid_is_midifile(const char *filename) { - FILE *fp = FLUID_FOPEN(filename, "rb"); + FILE *fp; uint32_t id; int retcode = FALSE; do { - if(fp == NULL) + if(!fluid_file_test(filename, G_FILE_TEST_IS_REGULAR)) { return retcode; } - + + // file seems to exist and is a regular file or a symlink to such + if((fp = FLUID_FOPEN(filename, "rb")) == NULL) + { + return retcode; + } + if(FLUID_FREAD(&id, sizeof(id), 1, fp) != 1) { break; diff --git a/libs/fluidsynth/src/fluid_ringbuffer.c b/libs/fluidsynth/src/fluid_ringbuffer.c index 71fd1e48a3..e67200111c 100644 --- a/libs/fluidsynth/src/fluid_ringbuffer.c +++ b/libs/fluidsynth/src/fluid_ringbuffer.c @@ -24,7 +24,7 @@ */ #include "fluid_ringbuffer.h" -#include "fluidsynth_priv.h" +#include "fluid_sys.h" /** diff --git a/libs/fluidsynth/src/fluid_rvoice_dsp.c b/libs/fluidsynth/src/fluid_rvoice_dsp.c index 25f4a4b8b9..aec79aab5e 100644 --- a/libs/fluidsynth/src/fluid_rvoice_dsp.c +++ b/libs/fluidsynth/src/fluid_rvoice_dsp.c @@ -18,10 +18,9 @@ * 02110-1301, USA */ -#include "fluidsynth_priv.h" +#include "fluid_sys.h" #include "fluid_phase.h" #include "fluid_rvoice.h" -#include "fluid_sys.h" #include "fluid_rvoice_dsp_tables.c" /* Purpose: diff --git a/libs/fluidsynth/src/fluid_rvoice_mixer.c b/libs/fluidsynth/src/fluid_rvoice_mixer.c index 9acc5f8309..5ea08ff6fa 100644 --- a/libs/fluidsynth/src/fluid_rvoice_mixer.c +++ b/libs/fluidsynth/src/fluid_rvoice_mixer.c @@ -23,7 +23,6 @@ #include "fluid_sys.h" #include "fluid_rev.h" #include "fluid_chorus.h" -#include "fluidsynth_priv.h" #include "fluid_synth.h" diff --git a/libs/fluidsynth/src/fluid_samplecache.c b/libs/fluidsynth/src/fluid_samplecache.c index 036964f584..f464f178b7 100644 --- a/libs/fluidsynth/src/fluid_samplecache.c +++ b/libs/fluidsynth/src/fluid_samplecache.c @@ -29,7 +29,6 @@ #include "fluid_samplecache.h" #include "fluid_sys.h" -#include "fluidsynth.h" #include "fluid_list.h" diff --git a/libs/fluidsynth/src/fluid_settings.c b/libs/fluidsynth/src/fluid_settings.c index 9207ab063e..1811169846 100644 --- a/libs/fluidsynth/src/fluid_settings.c +++ b/libs/fluidsynth/src/fluid_settings.c @@ -456,7 +456,7 @@ fluid_settings_set(fluid_settings_t *settings, const char *name, fluid_setting_n else { /* path ends prematurely */ - FLUID_LOG(FLUID_WARN, "'%s' is not a node. Name of the setting was '%s'", tokens[n], name); + FLUID_LOG(FLUID_ERR, "'%s' is not a node. Name of the setting was '%s'", tokens[n], name); return FLUID_FAILED; } @@ -549,7 +549,7 @@ fluid_settings_register_str(fluid_settings_t *settings, const char *name, const } else { - FLUID_LOG(FLUID_WARN, "Type mismatch on setting '%s'", name); + FLUID_LOG(FLUID_ERR, "Failed to register string setting '%s' as it already exists with a different type", name); } } @@ -611,7 +611,7 @@ fluid_settings_register_num(fluid_settings_t *settings, const char *name, double else { /* type mismatch */ - FLUID_LOG(FLUID_WARN, "Type mismatch on setting '%s'", name); + FLUID_LOG(FLUID_ERR, "Failed to register numeric setting '%s' as it already exists with a different type", name); } } @@ -673,7 +673,7 @@ fluid_settings_register_int(fluid_settings_t *settings, const char *name, int de else { /* type mismatch */ - FLUID_LOG(FLUID_WARN, "Type mismatch on setting '%s'", name); + FLUID_LOG(FLUID_ERR, "Failed to register int setting '%s' as it already exists with a different type", name); } } @@ -935,6 +935,7 @@ fluid_settings_setstr(fluid_settings_t *settings, const char *name, const char * if((fluid_settings_get(settings, name, &node) != FLUID_OK) || (node->type != FLUID_STR_TYPE)) { + FLUID_LOG(FLUID_ERR, "Unknown string setting '%s'", name); goto error_recovery; } @@ -1312,6 +1313,7 @@ fluid_settings_setnum(fluid_settings_t *settings, const char *name, double val) if((fluid_settings_get(settings, name, &node) != FLUID_OK) || (node->type != FLUID_NUM_TYPE)) { + FLUID_LOG(FLUID_ERR, "Unknown numeric setting '%s'", name); goto error_recovery; } @@ -1319,7 +1321,7 @@ fluid_settings_setnum(fluid_settings_t *settings, const char *name, double val) if(val < setting->min || val > setting->max) { - FLUID_LOG(FLUID_DBG, "requested set value for %s out of range", name); + FLUID_LOG(FLUID_ERR, "requested set value for '%s' out of range", name); goto error_recovery; } @@ -1496,6 +1498,7 @@ fluid_settings_setint(fluid_settings_t *settings, const char *name, int val) if((fluid_settings_get(settings, name, &node) != FLUID_OK) || (node->type != FLUID_INT_TYPE)) { + FLUID_LOG(FLUID_ERR, "Unknown integer parameter '%s'", name); goto error_recovery; } @@ -1503,7 +1506,7 @@ fluid_settings_setint(fluid_settings_t *settings, const char *name, int val) if(val < setting->min || val > setting->max) { - FLUID_LOG(FLUID_DBG, "requested set value for %s out of range", name); + FLUID_LOG(FLUID_ERR, "requested set value for setting '%s' out of range", name); goto error_recovery; } diff --git a/libs/fluidsynth/src/fluid_sffile.c b/libs/fluidsynth/src/fluid_sffile.c index 302eea72a7..b5a641b63d 100644 --- a/libs/fluidsynth/src/fluid_sffile.c +++ b/libs/fluidsynth/src/fluid_sffile.c @@ -334,17 +334,23 @@ static int fluid_sffile_read_wav(SFData *sf, unsigned int start, unsigned int en */ int fluid_is_soundfont(const char *filename) { - FILE *fp = FLUID_FOPEN(filename, "rb"); + FILE *fp; uint32_t fcc; int retcode = FALSE; do { - if(fp == NULL) + if(!fluid_file_test(filename, G_FILE_TEST_IS_REGULAR)) { return retcode; } - + + // file seems to exist and is a regular file or a symlink to such + if((fp = FLUID_FOPEN(filename, "rb")) == NULL) + { + return retcode; + } + if(FLUID_FREAD(&fcc, sizeof(fcc), 1, fp) != 1) { break; diff --git a/libs/fluidsynth/src/fluid_sfont.c b/libs/fluidsynth/src/fluid_sfont.c index 548a80abce..d0ce264d0c 100644 --- a/libs/fluidsynth/src/fluid_sfont.c +++ b/libs/fluidsynth/src/fluid_sfont.c @@ -24,7 +24,27 @@ void *default_fopen(const char *path) { - return FLUID_FOPEN(path, "rb"); + FILE* handle; + + if(!fluid_file_test(path, G_FILE_TEST_EXISTS)) + { + FLUID_LOG(FLUID_ERR, "fluid_sfloader_load(): Unable to load non-existent file. ('%s')", path); + return NULL; + } + + if(!fluid_file_test(path, G_FILE_TEST_IS_REGULAR)) + { + FLUID_LOG(FLUID_ERR, "fluid_sfloader_load(): Refusing to load non-regular file! ('%s')", path); + return NULL; + } + + if((handle = FLUID_FOPEN(path, "rb")) == NULL) + { + FLUID_LOG(FLUID_ERR, "fluid_sfloader_load(): Specified file does not exists or insufficient permissions to open it! ('%s')", path); + return NULL; + } + + return handle; } int default_fclose(void *handle) diff --git a/libs/fluidsynth/src/fluid_synth.c b/libs/fluidsynth/src/fluid_synth.c index b4524a2acf..e267720733 100644 --- a/libs/fluidsynth/src/fluid_synth.c +++ b/libs/fluidsynth/src/fluid_synth.c @@ -109,7 +109,7 @@ static void fluid_synth_update_voice_tuning_LOCAL(fluid_synth_t *synth, static int fluid_synth_set_tuning_LOCAL(fluid_synth_t *synth, int chan, fluid_tuning_t *tuning, int apply); static void fluid_synth_set_gen_LOCAL(fluid_synth_t *synth, int chan, - int param, float value, int absolute); + int param, float value); static void fluid_synth_stop_LOCAL(fluid_synth_t *synth, unsigned int id); @@ -1107,12 +1107,10 @@ delete_fluid_synth(fluid_synth_t *synth) * @deprecated This function is not thread-safe and does not work with multiple synths. * It has been deprecated. It may return "" in a future release and will eventually be removed. */ -/* FIXME - The error messages are not thread-safe, yet. They are still stored - * in a global message buffer (see fluid_sys.c). */ const char * fluid_synth_error(fluid_synth_t *synth) { - return fluid_error(); + return ""; } /** @@ -1696,7 +1694,7 @@ fluid_synth_cc_LOCAL(fluid_synth_t *synth, int channum, int num) if(nrpn_select < GEN_LAST) { float val = fluid_gen_scale_nrpn(nrpn_select, data); - fluid_synth_set_gen_LOCAL(synth, channum, nrpn_select, val, FALSE); + fluid_synth_set_gen_LOCAL(synth, channum, nrpn_select, val); } chan->nrpn_select = 0; /* Reset to 0 */ @@ -1714,12 +1712,12 @@ fluid_synth_cc_LOCAL(fluid_synth_t *synth, int channum, int num) case RPN_CHANNEL_FINE_TUNE: /* Fine tune is 14 bit over +/-1 semitone (+/- 100 cents, 8192 = center) */ fluid_synth_set_gen_LOCAL(synth, channum, GEN_FINETUNE, - (data - 8192) / 8192.0 * 100.0, FALSE); + (data - 8192) / 8192.0 * 100.0); break; case RPN_CHANNEL_COARSE_TUNE: /* Coarse tune is 7 bit and in semitones (64 is center) */ fluid_synth_set_gen_LOCAL(synth, channum, GEN_COARSETUNE, - value - 64, FALSE); + value - 64); break; case RPN_TUNING_PROGRAM_CHANGE: @@ -6119,51 +6117,22 @@ fluid_synth_get_settings(fluid_synth_t *synth) */ int fluid_synth_set_gen(fluid_synth_t *synth, int chan, int param, float value) { - return fluid_synth_set_gen2(synth, chan, param, value, FALSE, FALSE); -} - -/** - * Set a SoundFont generator (effect) value on a MIDI channel in real-time. - * @param synth FluidSynth instance - * @param chan MIDI channel number (0 to MIDI channel count - 1) - * @param param SoundFont generator ID (#fluid_gen_type) - * @param value Offset or absolute generator value to assign to the MIDI channel - * @param absolute FALSE to assign a relative value, TRUE to assign an absolute value - * @param normalized FALSE if value is specified in the native units of the generator, - * TRUE to take the value as a 0.0-1.0 range and apply it to the valid - * generator effect range (scaled and shifted as necessary). - * @return #FLUID_OK on success, #FLUID_FAILED otherwise - * - * This function allows for setting all effect parameters in real time on a - * MIDI channel. Setting absolute to non-zero will cause the value to override - * any generator values set in the instruments played on the MIDI channel. - * See SoundFont 2.01 spec, paragraph 8.1.3, page 48 for details on SoundFont - * generator parameters and valid ranges. - */ -int -fluid_synth_set_gen2(fluid_synth_t *synth, int chan, int param, - float value, int absolute, int normalized) -{ - float v; fluid_return_val_if_fail(param >= 0 && param < GEN_LAST, FLUID_FAILED); FLUID_API_ENTRY_CHAN(FLUID_FAILED); - v = normalized ? fluid_gen_scale(param, value) : value; - - fluid_synth_set_gen_LOCAL(synth, chan, param, v, absolute); + fluid_synth_set_gen_LOCAL(synth, chan, param, value); FLUID_API_RETURN(FLUID_OK); } /* Synthesis thread local set gen function */ static void -fluid_synth_set_gen_LOCAL(fluid_synth_t *synth, int chan, int param, float value, - int absolute) +fluid_synth_set_gen_LOCAL(fluid_synth_t *synth, int chan, int param, float value) { fluid_voice_t *voice; int i; - fluid_channel_set_gen(synth->channel[chan], param, value, absolute); + fluid_channel_set_gen(synth->channel[chan], param, value); for(i = 0; i < synth->polyphony; i++) { @@ -6171,7 +6140,7 @@ fluid_synth_set_gen_LOCAL(fluid_synth_t *synth, int chan, int param, float value if(fluid_voice_get_channel(voice) == chan) { - fluid_voice_set_param(voice, param, value, absolute); + fluid_voice_set_param(voice, param, value); } } } diff --git a/libs/fluidsynth/src/fluid_synth.h b/libs/fluidsynth/src/fluid_synth.h index 58869730c6..9615cb1b53 100644 --- a/libs/fluidsynth/src/fluid_synth.h +++ b/libs/fluidsynth/src/fluid_synth.h @@ -209,9 +209,6 @@ void delete_fluid_sample_timer(fluid_synth_t *synth, fluid_sample_timer_t *timer void fluid_synth_process_event_queue(fluid_synth_t *synth); -int fluid_synth_set_gen2(fluid_synth_t *synth, int chan, - int param, float value, - int absolute, int normalized); /* * misc */ diff --git a/libs/fluidsynth/src/fluid_sys.c b/libs/fluidsynth/src/fluid_sys.c index 28911ee7fc..bcb86bac21 100644 --- a/libs/fluidsynth/src/fluid_sys.c +++ b/libs/fluidsynth/src/fluid_sys.c @@ -30,6 +30,12 @@ #include "fluid_rtkit.h" #endif +#if HAVE_PTHREAD_H && !defined(WIN32) +// Do not include pthread on windows. It includes winsock.h, which collides with ws2tcpip.h from fluid_sys.h +// It isn't need on Windows anyway. +#include +#endif + /* WIN32 HACK - Flag used to differentiate between a file descriptor and a socket. * Should work, so long as no SOCKET or file descriptor ends up with this bit set. - JG */ #ifdef _WIN32 @@ -73,9 +79,6 @@ struct _fluid_server_socket_t static int fluid_istream_gets(fluid_istream_t in, char *buf, int len); - -static char fluid_errbuf[512]; /* buffer for error message */ - static fluid_log_function_t fluid_log_function[LAST_LOG_LEVEL] = { fluid_default_log_function, @@ -169,20 +172,20 @@ fluid_default_log_function(int level, const char *message, void *data) int fluid_log(int level, const char *fmt, ...) { - fluid_log_function_t fun = NULL; - - va_list args; - va_start(args, fmt); - FLUID_VSNPRINTF(fluid_errbuf, sizeof(fluid_errbuf), fmt, args); - va_end(args); - if((level >= 0) && (level < LAST_LOG_LEVEL)) { - fun = fluid_log_function[level]; + fluid_log_function_t fun = fluid_log_function[level]; if(fun != NULL) { - (*fun)(level, fluid_errbuf, fluid_log_user_data[level]); + char errbuf[1024]; + + va_list args; + va_start(args, fmt); + FLUID_VSNPRINTF(errbuf, sizeof(errbuf), fmt, args); + va_end(args); + + (*fun)(level, errbuf, fluid_log_user_data[level]); } } @@ -266,15 +269,6 @@ char *fluid_strtok(char **str, const char *delim) return token; } -/* - * fluid_error - */ -char * -fluid_error() -{ - return fluid_errbuf; -} - /** * Suspend the execution of the current thread for the specified amount of time. * @param milliseconds to wait. @@ -1344,12 +1338,12 @@ fluid_ostream_printf(fluid_ostream_t out, const char *format, ...) /* Handle write differently depending on if its a socket or file descriptor */ if(!(out & FLUID_SOCKET_FLAG)) { - return write(out, buf, FLUID_STRLEN(buf)); + return write(out, buf, (unsigned int)FLUID_STRLEN(buf)); } #ifdef NETWORK_SUPPORT /* Socket */ - retval = send(out & ~FLUID_SOCKET_FLAG, buf, FLUID_STRLEN(buf), 0); + retval = send(out & ~FLUID_SOCKET_FLAG, buf, (int)FLUID_STRLEN(buf), 0); return retval != SOCKET_ERROR ? retval : -1; #else return -1; diff --git a/libs/fluidsynth/src/fluid_sys.h b/libs/fluidsynth/src/fluid_sys.h index 1229386550..e3a6967411 100644 --- a/libs/fluidsynth/src/fluid_sys.h +++ b/libs/fluidsynth/src/fluid_sys.h @@ -20,17 +20,20 @@ /** - - This header contains a bunch of (mostly) system and machine - dependent functions: - - - timers - - current time in milliseconds and microseconds - - debug logging - - profiling - - memory locking - - checking for floating point exceptions - + * @file fluid_sys.h + * + * This header contains a bunch of (mostly) system and machine + * dependent functions: + * + * - timers + * - current time in milliseconds and microseconds + * - debug logging + * - profiling + * - memory locking + * - checking for floating point exceptions + * + * fluidsynth's wrapper OSAL so to say; include it in .c files, be careful to include + * it in fluidsynth's private header files (see comment in fluid_coreaudio.c) */ #ifndef _FLUID_SYS_H @@ -38,6 +41,117 @@ #include "fluidsynth_priv.h" +#if HAVE_MATH_H +#include +#endif + +#if HAVE_ERRNO_H +#include +#endif + +#if HAVE_STDARG_H +#include +#endif + +#if HAVE_UNISTD_H +#include +#endif + +#if HAVE_FCNTL_H +#include +#endif + +#if HAVE_SYS_MMAN_H +#include +#endif + +#if HAVE_SYS_TYPES_H +#include +#endif + +#if HAVE_SYS_STAT_H +#include +#endif + +#if HAVE_SYS_TIME_H +#include +#endif + +#if HAVE_SYS_SOCKET_H +#include +#endif + +#if HAVE_NETINET_IN_H +#include +#endif + +#if HAVE_NETINET_TCP_H +#include +#endif + +#if HAVE_ARPA_INET_H +#include +#endif + +#if HAVE_LIMITS_H +#include +#endif + +#if HAVE_OPENMP +#include +#endif + +#if HAVE_IO_H +#include // _open(), _close(), read(), write() on windows +#endif + +#if HAVE_SIGNAL_H +#include +#endif + +/** Integer types */ +#if HAVE_STDINT_H +#include + +#else + +/* Assume GLIB types */ +typedef gint8 int8_t; +typedef guint8 uint8_t; +typedef gint16 int16_t; +typedef guint16 uint16_t; +typedef gint32 int32_t; +typedef guint32 uint32_t; +typedef gint64 int64_t; +typedef guint64 uint64_t; + +#endif + +#if defined(WIN32) && HAVE_WINDOWS_H +//#include +//#include /* Provides also socklen_t */ +#include + +/* WIN32 special defines */ +#define STDIN_FILENO 0 +#define STDOUT_FILENO 1 +#define STDERR_FILENO 2 + +#ifdef _MSC_VER +#pragma warning(disable : 4244) +#pragma warning(disable : 4101) +#pragma warning(disable : 4305) +#pragma warning(disable : 4996) +#endif + +#endif + +/* Darwin special defines (taken from config_macosx.h) */ +#ifdef DARWIN +# define MACINTOSH +# define __Types__ +#endif + #ifdef LADSPA #include #endif @@ -52,26 +166,12 @@ */ #define fluid_gerror_message(err) ((err) ? err->message : "No error details") -/* Misc */ -#if defined(__INTEL_COMPILER) -#define FLUID_RESTRICT restrict -#elif defined(__clang__) || defined(__GNUC__) || defined(__GNUG__) -#define FLUID_RESTRICT __restrict__ -#elif defined(_MSC_VER) && _MSC_VER >= 1400 -#define FLUID_RESTRICT __restrict -#else -#warning "Dont know how this compiler handles restrict pointers, refuse to use them." -#define FLUID_RESTRICT -#endif #define FLUID_INLINE inline #define FLUID_POINTER_TO_UINT GPOINTER_TO_UINT #define FLUID_UINT_TO_POINTER GUINT_TO_POINTER #define FLUID_POINTER_TO_INT GPOINTER_TO_INT #define FLUID_INT_TO_POINTER GINT_TO_POINTER -#define FLUID_N_ELEMENTS(struct) (sizeof (struct) / sizeof (struct[0])) -#define FLUID_MEMBER_SIZE(struct, member) ( sizeof (((struct *)0)->member) ) - #define FLUID_IS_BIG_ENDIAN (G_BYTE_ORDER == G_BIG_ENDIAN) #define FLUID_LE32TOH(x) GINT32_FROM_LE(x) @@ -85,17 +185,6 @@ (uint32_t)(((uint32_t)(_d) << 24) | ((uint32_t)(_c) << 16) | ((uint32_t)(_b) << 8) | (uint32_t)(_a)) #endif - -#define fluid_return_if_fail(cond) \ -if(cond) \ - ; \ -else \ - return - -#define fluid_return_val_if_fail(cond, val) \ - fluid_return_if_fail(cond) (val) - - /* * Utility functions */ @@ -356,11 +445,15 @@ typedef GModule fluid_module_t; /* Sockets and I/O */ -fluid_istream_t fluid_get_stdin(void); -fluid_ostream_t fluid_get_stdout(void); int fluid_istream_readline(fluid_istream_t in, fluid_ostream_t out, char *prompt, char *buf, int len); int fluid_ostream_printf(fluid_ostream_t out, const char *format, ...); +#if defined(WIN32) +typedef SOCKET fluid_socket_t; +#else +typedef int fluid_socket_t; +#endif + /* The function should return 0 if no error occured, non-zero otherwise. If the function return non-zero, the socket will be closed by the server. */ @@ -374,25 +467,26 @@ fluid_istream_t fluid_socket_get_istream(fluid_socket_t sock); fluid_ostream_t fluid_socket_get_ostream(fluid_socket_t sock); /* File access */ +#define fluid_stat(_filename, _statbuf) g_stat((_filename), (_statbuf)) #if !GLIB_CHECK_VERSION(2, 26, 0) /* GStatBuf has not been introduced yet, manually typedef to what they had at that time: * https://github.com/GNOME/glib/blob/e7763678b56e3be073cc55d707a6e92fc2055ee0/glib/gstdio.h#L98-L115 */ #if defined(WIN32) || HAVE_WINDOWS_H // somehow reliably mock G_OS_WIN32?? - #if defined (_MSC_VER) && !defined(_WIN64) - typedef struct _stat32 fluid_stat_buf_t; - #else - typedef struct _stat fluid_stat_buf_t; - #endif + // Any effort from our side to reliably mock GStatBuf on Windows is in vain. E.g. glib-2.16 is broken as it uses struct stat rather than struct _stat32 on Win x86. + // Disable it (the user has been warned by cmake). + #undef fluid_stat + #define fluid_stat(_filename, _statbuf) (-1) + typedef struct _fluid_stat_buf_t{int st_mtime;} fluid_stat_buf_t; #else - /* posix, OS/2, etc. */ - typedef struct stat fluid_stat_buf_t; + /* posix, OS/2, etc. */ + typedef struct stat fluid_stat_buf_t; #endif #else typedef GStatBuf fluid_stat_buf_t; #endif -#define fluid_stat(_filename, _statbuf) g_stat((_filename), (_statbuf)) +#define fluid_file_test g_file_test /* Profiling */ #if WITH_PROFILING diff --git a/libs/fluidsynth/src/fluid_tuning.c b/libs/fluidsynth/src/fluid_tuning.c index ee083116a2..0df248b7bf 100644 --- a/libs/fluidsynth/src/fluid_tuning.c +++ b/libs/fluidsynth/src/fluid_tuning.c @@ -20,7 +20,6 @@ #include "fluid_tuning.h" -#include "fluidsynth_priv.h" #include "fluid_sys.h" diff --git a/libs/fluidsynth/src/fluid_voice.c b/libs/fluidsynth/src/fluid_voice.c index 7c6265745b..5c5ad35598 100644 --- a/libs/fluidsynth/src/fluid_voice.c +++ b/libs/fluidsynth/src/fluid_voice.c @@ -18,7 +18,7 @@ * 02110-1301, USA */ -#include "fluidsynth_priv.h" +#include "fluid_sys.h" #include "fluid_voice.h" #include "fluid_mod.h" #include "fluid_chan.h" @@ -428,17 +428,7 @@ fluid_voice_gen_get(fluid_voice_t *voice, int gen) fluid_real_t fluid_voice_gen_value(const fluid_voice_t *voice, int num) { - /* This is an extension to the SoundFont standard. More - * documentation is available at the fluid_synth_set_gen2() - * function. */ - if(voice->gen[num].flags == GEN_ABS_NRPN) - { - return (fluid_real_t) voice->gen[num].nrpn; - } - else - { - return (fluid_real_t)(voice->gen[num].val + voice->gen[num].mod + voice->gen[num].nrpn); - } + return (fluid_real_t)(voice->gen[num].val + voice->gen[num].mod + voice->gen[num].nrpn); } /* @@ -605,7 +595,7 @@ fluid_voice_calculate_runtime_synthesis_parameters(fluid_voice_t *voice) * - Add the output value to the modulation value of the generator. * * Note: The generators have been initialized with - * fluid_gen_set_default_values. + * fluid_gen_init(). */ for(i = 0; i < voice->mod_count; i++) @@ -1789,10 +1779,10 @@ fluid_voice_get_lower_boundary_for_attenuation(fluid_voice_t *voice) -int fluid_voice_set_param(fluid_voice_t *voice, int gen, fluid_real_t nrpn_value, int abs) +int fluid_voice_set_param(fluid_voice_t *voice, int gen, fluid_real_t nrpn_value) { voice->gen[gen].nrpn = nrpn_value; - voice->gen[gen].flags = (abs) ? GEN_ABS_NRPN : GEN_SET; + voice->gen[gen].flags = GEN_SET; fluid_voice_update_param(voice, gen); return FLUID_OK; } diff --git a/libs/fluidsynth/src/fluid_voice.h b/libs/fluidsynth/src/fluid_voice.h index fb0b28239f..599a0e28a5 100644 --- a/libs/fluidsynth/src/fluid_voice.h +++ b/libs/fluidsynth/src/fluid_voice.h @@ -30,7 +30,6 @@ #include "fluid_lfo.h" #include "fluid_rvoice.h" #include "fluid_rvoice_event.h" -#include "fluid_sys.h" #define NO_CHANNEL 0xff @@ -131,7 +130,7 @@ int fluid_voice_modulate(fluid_voice_t *voice, int cc, int ctrl); int fluid_voice_modulate_all(fluid_voice_t *voice); /** Set the NRPN value of a generator. */ -int fluid_voice_set_param(fluid_voice_t *voice, int gen, fluid_real_t value, int abs); +int fluid_voice_set_param(fluid_voice_t *voice, int gen, fluid_real_t value); /** Set the gain. */ diff --git a/libs/fluidsynth/src/fluidsynth_priv.h b/libs/fluidsynth/src/fluidsynth_priv.h index 384785fccd..7a3ce6d6d1 100644 --- a/libs/fluidsynth/src/fluidsynth_priv.h +++ b/libs/fluidsynth/src/fluidsynth_priv.h @@ -18,6 +18,13 @@ * 02110-1301, USA */ +/** + * @file fluidsynth_priv.h + * + * lightweight part of fluid_sys.h, containing forward declarations of fluidsynth's private types and private macros + * + * include this one file in fluidsynth's private header files + */ #ifndef _FLUIDSYNTH_PRIV_H #define _FLUIDSYNTH_PRIV_H @@ -26,131 +33,16 @@ #include "config.h" -#if HAVE_STRING_H -#include -#endif - #if HAVE_STDLIB_H -#include +#include // malloc, free #endif #if HAVE_STDIO_H -#include -#endif - -#if HAVE_MATH_H -#include +#include // printf #endif -#if HAVE_ERRNO_H -#include -#endif - -#if HAVE_STDARG_H -#include -#endif - -#if HAVE_UNISTD_H -#include -#endif - -#if HAVE_FCNTL_H -#include -#endif - -#if HAVE_SYS_MMAN_H -#include -#endif - -#if HAVE_SYS_TYPES_H -#include -#endif - -#if HAVE_SYS_STAT_H -#include -#endif - -#if HAVE_SYS_TIME_H -#include -#endif - -#if HAVE_SYS_SOCKET_H -#include -#endif - -#if HAVE_NETINET_IN_H -#include -#endif - -#if HAVE_NETINET_TCP_H -#include -#endif - -#if HAVE_ARPA_INET_H -#include -#endif - -#if HAVE_LIMITS_H -#include -#endif - -#if HAVE_PTHREAD_H -#include -#endif - -#if HAVE_OPENMP -#include -#endif - -#if HAVE_IO_H -#include // _open(), _close(), read(), write() on windows -#endif - -#if HAVE_SIGNAL_H -#include -#endif - -/** Integer types */ -#if HAVE_STDINT_H -#include - -#else - -/* Assume GLIB types */ -typedef gint8 int8_t; -typedef guint8 uint8_t; -typedef gint16 int16_t; -typedef guint16 uint16_t; -typedef gint32 int32_t; -typedef guint32 uint32_t; -typedef gint64 int64_t; -typedef guint64 uint64_t; - -#endif - -#if defined(WIN32) && HAVE_WINDOWS_H -//#include -//#include /* Provides also socklen_t */ -#include - -/* WIN32 special defines */ -#define STDIN_FILENO 0 -#define STDOUT_FILENO 1 -#define STDERR_FILENO 2 - -#ifdef _MSC_VER -#pragma warning(disable : 4244) -#pragma warning(disable : 4101) -#pragma warning(disable : 4305) -#pragma warning(disable : 4996) -#endif - -#endif - -/* Darwin special defines (taken from config_macosx.h) */ -#ifdef DARWIN -# define MACINTOSH -# define __Types__ +#if HAVE_STRING_H +#include #endif @@ -168,13 +60,6 @@ typedef float fluid_real_t; typedef double fluid_real_t; #endif - -#if defined(WIN32) -typedef SOCKET fluid_socket_t; -#else -typedef int fluid_socket_t; -#endif - #if defined(SUPPORTS_VLA) # define FLUID_DECLARE_VLA(_type, _name, _len) \ _type _name[_len] @@ -240,7 +125,6 @@ typedef void (*fluid_rvoice_function_t)(void *obj, const fluid_rvoice_param_t pa * * SYSTEM INTERFACE */ -typedef FILE *fluid_file; #define FLUID_MALLOC(_n) malloc(_n) #define FLUID_REALLOC(_p,_n) realloc(_p,_n) @@ -349,6 +233,30 @@ do { strncpy(_dst,_src,_n); \ #define FLUID_LIKELY G_LIKELY #define FLUID_UNLIKELY G_UNLIKELY -char *fluid_error(void); +/* Misc */ +#if defined(__INTEL_COMPILER) +#define FLUID_RESTRICT restrict +#elif defined(__clang__) || defined(__GNUC__) || defined(__GNUG__) +#define FLUID_RESTRICT __restrict__ +#elif defined(_MSC_VER) && _MSC_VER >= 1400 +#define FLUID_RESTRICT __restrict +#else +#warning "Dont know how this compiler handles restrict pointers, refuse to use them." +#define FLUID_RESTRICT +#endif + +#define FLUID_N_ELEMENTS(struct) (sizeof (struct) / sizeof (struct[0])) +#define FLUID_MEMBER_SIZE(struct, member) ( sizeof (((struct *)0)->member) ) + + +#define fluid_return_if_fail(cond) \ +if(cond) \ + ; \ +else \ + return + +#define fluid_return_val_if_fail(cond, val) \ + fluid_return_if_fail(cond) (val) + #endif /* _FLUIDSYNTH_PRIV_H */ diff --git a/tools/fluid-patches/ardour_fluidsynth.diff b/tools/fluid-patches/ardour_fluidsynth.diff index a397680563..9ed5f38733 100644 --- a/tools/fluid-patches/ardour_fluidsynth.diff +++ b/tools/fluid-patches/ardour_fluidsynth.diff @@ -58,7 +58,7 @@ index 60f441c49..e6455186e 100644 fluid_real_t fluid_ct2hz_real(fluid_real_t cents); fluid_real_t fluid_ct2hz(fluid_real_t cents); diff --git b/libs/fluidsynth/src/fluid_hash.c a/libs/fluidsynth/src/fluid_hash.c -index 37b0a06a4..b6586895b 100644 +index 946a873bb..79f83a458 100644 --- b/libs/fluidsynth/src/fluid_hash.c +++ a/libs/fluidsynth/src/fluid_hash.c @@ -991,6 +991,7 @@ fluid_hashtable_remove_all(fluid_hashtable_t *hashtable) @@ -78,10 +78,10 @@ index 37b0a06a4..b6586895b 100644 /* * fluid_hashtable_foreach_remove_or_steal: diff --git b/libs/fluidsynth/src/fluid_midi.c a/libs/fluidsynth/src/fluid_midi.c -index 1a394f811..8deb0b0d1 100644 +index 38c2bf6ef..73551a6d8 100644 --- b/libs/fluidsynth/src/fluid_midi.c +++ a/libs/fluidsynth/src/fluid_midi.c -@@ -76,7 +76,7 @@ static int fluid_midi_file_read_tracklen(fluid_midi_file *mf); +@@ -77,7 +77,7 @@ static int fluid_midi_file_read_tracklen(fluid_midi_file *mf); static int fluid_midi_file_eot(fluid_midi_file *mf); static int fluid_midi_file_get_division(fluid_midi_file *midifile); @@ -90,7 +90,7 @@ index 1a394f811..8deb0b0d1 100644 /*************************************************************** * * MIDIFILE -@@ -1047,6 +1047,7 @@ fluid_midi_file_get_division(fluid_midi_file *midifile) +@@ -1054,6 +1054,7 @@ fluid_midi_file_get_division(fluid_midi_file *midifile) { return midifile->division; } @@ -98,7 +98,7 @@ index 1a394f811..8deb0b0d1 100644 /****************************************************** * -@@ -1413,7 +1414,7 @@ static void fluid_midi_event_get_sysex_LOCAL(fluid_midi_event_t *evt, void **dat +@@ -1420,7 +1421,7 @@ static void fluid_midi_event_get_sysex_LOCAL(fluid_midi_event_t *evt, void **dat * * fluid_track_t */ @@ -107,7 +107,7 @@ index 1a394f811..8deb0b0d1 100644 /* * new_fluid_track */ -@@ -2517,3 +2518,4 @@ fluid_midi_event_length(unsigned char event) +@@ -2524,3 +2525,4 @@ fluid_midi_event_length(unsigned char event) return 1; } @@ -139,13 +139,13 @@ index 3e7661741..ec8e967a3 100644 #ifdef DEBUG void fluid_dump_modulator(fluid_mod_t *mod); diff --git b/libs/fluidsynth/src/fluid_rvoice_mixer.c a/libs/fluidsynth/src/fluid_rvoice_mixer.c -index af0ef75d1..9acc5f830 100644 +index 85c3fb914..5ea08ff6f 100644 --- b/libs/fluidsynth/src/fluid_rvoice_mixer.c +++ a/libs/fluidsynth/src/fluid_rvoice_mixer.c -@@ -24,7 +24,6 @@ +@@ -23,7 +23,6 @@ + #include "fluid_sys.h" #include "fluid_rev.h" #include "fluid_chorus.h" - #include "fluidsynth_priv.h" -#include "fluid_ladspa.h" #include "fluid_synth.h" @@ -163,7 +163,7 @@ index 4ee072e4b..1b3fceb34 100644 typedef struct _fluid_rvoice_mixer_t fluid_rvoice_mixer_t; diff --git b/libs/fluidsynth/src/fluid_settings.c a/libs/fluidsynth/src/fluid_settings.c -index 02be9a033..9207ab063 100644 +index 5b2b08748..181116984 100644 --- b/libs/fluidsynth/src/fluid_settings.c +++ a/libs/fluidsynth/src/fluid_settings.c @@ -21,9 +21,6 @@ @@ -191,7 +191,7 @@ index 02be9a033..9207ab063 100644 static int diff --git b/libs/fluidsynth/src/fluid_synth.c a/libs/fluidsynth/src/fluid_synth.c -index 07bfc0427..b4524a2ac 100644 +index 1c7a1f272..e26772073 100644 --- b/libs/fluidsynth/src/fluid_synth.c +++ a/libs/fluidsynth/src/fluid_synth.c @@ -267,7 +267,7 @@ void fluid_version(int *major, int *minor, int *micro) @@ -203,7 +203,7 @@ index 07bfc0427..b4524a2ac 100644 fluid_version_str(void) { return FLUIDSYNTH_VERSION; -@@ -6442,6 +6442,7 @@ int fluid_synth_set_channel_type(fluid_synth_t *synth, int chan, int type) +@@ -6411,6 +6411,7 @@ int fluid_synth_set_channel_type(fluid_synth_t *synth, int chan, int type) FLUID_API_RETURN(FLUID_OK); } @@ -211,7 +211,7 @@ index 07bfc0427..b4524a2ac 100644 /** * Return the LADSPA effects instance used by FluidSynth * -@@ -6454,6 +6455,7 @@ fluid_ladspa_fx_t *fluid_synth_get_ladspa_fx(fluid_synth_t *synth) +@@ -6423,6 +6424,7 @@ fluid_ladspa_fx_t *fluid_synth_get_ladspa_fx(fluid_synth_t *synth) return synth->ladspa_fx; } @@ -220,7 +220,7 @@ index 07bfc0427..b4524a2ac 100644 /** * Configure a general-purpose IIR biquad filter. diff --git b/libs/fluidsynth/src/fluid_synth.h a/libs/fluidsynth/src/fluid_synth.h -index 156424af1..58869730c 100644 +index 46c92ccf6..9615cb1b5 100644 --- b/libs/fluidsynth/src/fluid_synth.h +++ a/libs/fluidsynth/src/fluid_synth.h @@ -33,8 +33,6 @@ @@ -243,10 +243,10 @@ index 156424af1..58869730c 100644 enum fluid_iir_filter_flags custom_filter_flags; /**< filter type of the user-defined filter currently used for all voices */ }; diff --git b/libs/fluidsynth/src/fluid_sys.c a/libs/fluidsynth/src/fluid_sys.c -index d686737f6..28911ee7f 100644 +index b85fa3fbf..bcb86bac2 100644 --- b/libs/fluidsynth/src/fluid_sys.c +++ a/libs/fluidsynth/src/fluid_sys.c -@@ -202,9 +202,10 @@ fluid_log(int level, const char *fmt, ...) +@@ -205,9 +205,10 @@ fluid_log(int level, const char *fmt, ...) * @param delim String of delimiter chars. * @return Pointer to the next token or NULL if no more tokens. */ @@ -260,34 +260,10 @@ index d686737f6..28911ee7f 100644 if(str == NULL || delim == NULL || !*delim) diff --git b/libs/fluidsynth/src/fluid_sys.h a/libs/fluidsynth/src/fluid_sys.h -index 72b323029..122938655 100644 +index 9f2d6f6c7..e3a696741 100644 --- b/libs/fluidsynth/src/fluid_sys.h +++ a/libs/fluidsynth/src/fluid_sys.h -@@ -99,7 +99,7 @@ else \ - /* - * Utility functions - */ --char *fluid_strtok(char **str, char *delim); -+char *fluid_strtok(char **str, const char *delim); - - - #if defined(__OS2__) -diff --git b/libs/fluidsynth/src/fluidsynth_priv.h a/libs/fluidsynth/src/fluidsynth_priv.h -index 4df590e21..384785fcc 100644 ---- b/libs/fluidsynth/src/fluidsynth_priv.h -+++ a/libs/fluidsynth/src/fluidsynth_priv.h -@@ -26,10 +26,6 @@ - - #include "config.h" - --#if defined(__POWERPC__) && !(defined(__APPLE__) && defined(__MACH__)) --#include "config_maxmsp43.h" --#endif -- - #if HAVE_STRING_H - #include - #endif -@@ -133,8 +129,9 @@ typedef guint64 uint64_t; +@@ -128,8 +128,9 @@ typedef guint64 uint64_t; #endif #if defined(WIN32) && HAVE_WINDOWS_H @@ -299,3 +275,12 @@ index 4df590e21..384785fcc 100644 /* WIN32 special defines */ #define STDIN_FILENO 0 +@@ -187,7 +188,7 @@ typedef guint64 uint64_t; + /* + * Utility functions + */ +-char *fluid_strtok(char **str, char *delim); ++char *fluid_strtok(char **str, const char *delim); + + + #if defined(__OS2__) -- cgit v1.2.3