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
* 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;
}
@ -1650,7 +1650,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;
}

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 }
};
/**
* 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
/* fluid_gen_init
*
* Set an array of generators to their initial value
*/
int
fluid_gen_set_default_values(fluid_gen_t *gen)
void
fluid_gen_init(fluid_gen_t *gen, fluid_channel_t *channel)
{
int i;
@ -107,39 +105,17 @@ fluid_gen_set_default_values(fluid_gen_t *gen)
{
gen[i].flags = GEN_UNUSED;
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;
}
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
* documentation is available at the fluid_synth_set_gen2()
* 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;
}
}
return FLUID_OK;
}
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()) */
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;
/*
@ -60,8 +60,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 */

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.
*
* Note: The generators have been initialized with
* fluid_gen_set_default_values.
* fluid_gen_init().
*/
for(i = 0; i < voice->mod_count; i++)