fuse fluid_gen_set_default_values() and fluid_gen_init()

avoids iterating over generators twice
This commit is contained in:
derselbst 2018-10-10 18:49:43 +02:00
parent f8a55cd10d
commit 45e0f94b29
4 changed files with 12 additions and 37 deletions

View file

@ -1099,7 +1099,7 @@ new_fluid_preset_zone(char *name)
/* Flag all generators as unused (default, they will be set when they are found /* Flag all generators as unused (default, they will be set when they are found
* in the sound font). * in the sound font).
* This also sets the generator values to default, but that is of no concern here.*/ * 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 */ zone->mod = NULL; /* list of modulators */
return zone; return zone;
} }
@ -1650,7 +1650,7 @@ new_fluid_inst_zone(char *name)
zone->range.ignore = FALSE; zone->range.ignore = FALSE;
/* Flag the generators as unused. /* Flag the generators as unused.
* This also sets the generator values to default, but they will be overwritten anyway, if used.*/ * 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 */ zone->mod = NULL; /* list of modulators */
return zone; return zone;
} }

View file

@ -92,14 +92,12 @@ static const fluid_gen_info_t fluid_gen_info[] =
{ GEN_CUSTOM_FILTERQ, 1, 1, 0.0f, 960.0f, 0.0f } { GEN_CUSTOM_FILTERQ, 1, 1, 0.0f, 960.0f, 0.0f }
}; };
/* fluid_gen_init
/** *
* Set an array of generators to their default values. * Set an array of generators to their initial value
* @param gen Array of generators (should be #GEN_LAST in size).
* @return Always returns #FLUID_OK
*/ */
int void
fluid_gen_set_default_values(fluid_gen_t *gen) fluid_gen_init(fluid_gen_t *gen, fluid_channel_t *channel)
{ {
int i; int i;
@ -107,39 +105,17 @@ fluid_gen_set_default_values(fluid_gen_t *gen)
{ {
gen[i].flags = GEN_UNUSED; gen[i].flags = GEN_UNUSED;
gen[i].mod = 0.0; gen[i].mod = 0.0;
gen[i].nrpn = 0.0; gen[i].nrpn = (channel == NULL) ? 0.0 : fluid_channel_get_gen(channel, i);
gen[i].val = fluid_gen_info[i].def; gen[i].val = fluid_gen_info[i].def;
}
return FLUID_OK;
}
/* fluid_gen_init
*
* Set an array of generators to their initial value
*/
int
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 /* This is an extension to the SoundFont standard. More
* documentation is available at the fluid_synth_set_gen2() * documentation is available at the fluid_synth_set_gen2()
* function. */ * function. */
if(fluid_channel_get_gen_abs(channel, i)) if(channel != NULL && fluid_channel_get_gen_abs(channel, i))
{ {
gen[i].flags = GEN_ABS_NRPN; gen[i].flags = GEN_ABS_NRPN;
} }
} }
return FLUID_OK;
} }
fluid_real_t fluid_gen_scale(int gen, float value) fluid_real_t fluid_gen_scale(int gen, float value)

View file

@ -31,7 +31,7 @@ typedef struct _fluid_gen_info_t
char nrpn_scale; /* The scale to convert from NRPN (cfr. fluid_gen_map_nrpn()) */ char nrpn_scale; /* The scale to convert from NRPN (cfr. fluid_gen_map_nrpn()) */
float min; /* The minimum value */ float min; /* The minimum value */
float max; /* The maximum 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; } fluid_gen_info_t;
/* /*
@ -60,8 +60,7 @@ enum fluid_gen_flags
fluid_real_t fluid_gen_scale(int gen, float value); fluid_real_t fluid_gen_scale(int gen, float value);
fluid_real_t fluid_gen_scale_nrpn(int gen, int nrpn); fluid_real_t fluid_gen_scale_nrpn(int gen, int nrpn);
int fluid_gen_init(fluid_gen_t *gen, fluid_channel_t *channel); void fluid_gen_init(fluid_gen_t *gen, fluid_channel_t *channel);
int fluid_gen_set_default_values(fluid_gen_t *gen);
#endif /* _FLUID_GEN_H */ #endif /* _FLUID_GEN_H */

View file

@ -606,7 +606,7 @@ fluid_voice_calculate_runtime_synthesis_parameters(fluid_voice_t *voice)
* - Add the output value to the modulation value of the generator. * - Add the output value to the modulation value of the generator.
* *
* Note: The generators have been initialized with * Note: The generators have been initialized with
* fluid_gen_set_default_values. * fluid_gen_init().
*/ */
for(i = 0; i < voice->mod_count; i++) for(i = 0; i < voice->mod_count; i++)