fluidsynth/test/test_preset_sample_loading.c

96 lines
2.8 KiB
C
Raw Normal View History

#include "test.h"
#include "fluidsynth.h"
#include "sfloader/fluid_sfont.h"
#include "sfloader/fluid_defsfont.h"
#include "utils/fluidsynth_priv.h"
#include "utils/fluid_list.h"
// load our sf2 and sf3 test soundfonts, with and without dynamic sample loading
int main(void)
{
2018-04-25 10:33:47 +00:00
int id[2], sfcount, dyn_sample, i;
/* setup */
fluid_settings_t *settings = new_fluid_settings();
for(dyn_sample = 0; dyn_sample <= 1; dyn_sample++)
{
fluid_synth_t *synth;
fluid_settings_setint(settings, "synth.dynamic-sample-loading", dyn_sample);
synth = new_fluid_synth(settings);
id[0] = fluid_synth_sfload(synth, TEST_SOUNDFONT, 0);
id[1] = fluid_synth_sfload(synth, TEST_SOUNDFONT_SF3, 0);
sfcount = fluid_synth_sfcount(synth);
TEST_ASSERT(id[0] != FLUID_FAILED);
#if LIBSNDFILE_SUPPORT
TEST_ASSERT(id[1] != FLUID_FAILED);
TEST_ASSERT(sfcount == 2);
#else
TEST_ASSERT(id[1] == FLUID_FAILED);
TEST_ASSERT(sfcount == 1);
#endif
for(i = 0; i < sfcount; i++)
{
fluid_preset_t *preset;
fluid_list_t *list;
fluid_preset_t *prev_preset = NULL;
fluid_sample_t *prev_sample = NULL;
int count = 0;
fluid_sfont_t *sfont = fluid_synth_get_sfont_by_id(synth, id[i]);
fluid_defsfont_t *defsfont = fluid_sfont_get_data(sfont);
/* Make sure we have the right number of presets */
fluid_sfont_iteration_start(sfont);
while((preset = fluid_sfont_iteration_next(sfont)) != NULL)
{
count++;
if(preset->notify != NULL)
{
preset->notify(preset, FLUID_PRESET_SELECTED, 0);
}
/* make sure we actually got a different preset */
TEST_ASSERT(preset != prev_preset);
prev_preset = preset;
}
/* VintageDreams has 136 presets */
TEST_ASSERT(count == 136);
/* Make sure we have the right number of samples */
count = 0;
for(list = defsfont->sample; list; list = fluid_list_next(list))
{
fluid_sample_t *sample = fluid_list_get(list);
if(sample->data != NULL)
{
count++;
}
TEST_ASSERT(sample->amplitude_that_reaches_noise_floor_is_valid);
/* Make sure we actually got a different sample */
TEST_ASSERT(sample != prev_sample);
prev_sample = sample;
}
/* VintageDreams has 123 valid samples (one is a ROM sample and ignored) */
TEST_ASSERT(count == 123);
}
/* teardown */
delete_fluid_synth(synth);
}
delete_fluid_settings(settings);
return EXIT_SUCCESS;
}