Skip to content

Commit

Permalink
Merge branch 'swesterfeld-fluidsynth2', closes #101
Browse files Browse the repository at this point in the history
* swesterfeld-fluidsynth2:
  config-checks.mk: require the latest fluidsynth version, 2.0.4
  BSE: bsesoundfontrepo: remove unneeded using declaration
  TESTS: audio: adapt soundfont test reference file to fluidsynth2
	The voice panning code is slighlty buggy in old fluidsynth versions (for
	instance 1.1.11). New fluidsynth >= 2.0.0 fix the bug, so we need to
	update the reference file.
  BSE: SF2: adapt fluidsynth settings to fluidsynth 2 constraints
  config-checks.mk: require fluidsynth >= 2.0.0
  BSE: SF2: port soundfont support to fluidsynth2 API
  BSE: Makefile.mk: use correct compiler flags for building libbse
	This fixes compilation if libbse dependency library headers are not in system
	dirs.

Signed-off-by: Tim Janik <timj@gnu.org>
  • Loading branch information
tim-janik committed Apr 15, 2019
2 parents c86071a + b847e81 commit 4c65148
Show file tree
Hide file tree
Showing 6 changed files with 22 additions and 17 deletions.
2 changes: 1 addition & 1 deletion bse/Makefile.mk
Expand Up @@ -366,7 +366,7 @@ include bse/icons/Makefile.mk

# == libbse.so rules ==
$(bse/libbse.objects): $(bse/libbse.deps) $(bse/libbse.cc.deps) $(bse/icons/c.csources)
$(bse/libbse.objects): EXTRA_INCLUDES ::= -I$> $(GLIB_CFLAGS)
$(bse/libbse.objects): EXTRA_INCLUDES ::= -I$> $(BSEDEPS_CFLAGS)
$(bse/libbse.objects): EXTRA_DEFS ::= -DBSE_COMPILATION
$(lib/libbse.so).LDFLAGS ::= -Wl,--version-script=bse/ldscript.map
$(call BUILD_SHARED_LIB_XDBG, \
Expand Down
9 changes: 4 additions & 5 deletions bse/bsesoundfont.cc
Expand Up @@ -135,17 +135,16 @@ bse_sound_font_load_blob (BseSoundFont *self,
if (init_presets)
{
fluid_sfont_t *fluid_sfont = fluid_synth_get_sfont_by_id (fluid_synth, sfont_id);
fluid_preset_t fluid_preset;

fluid_sfont->iteration_start (fluid_sfont);
while (fluid_sfont->iteration_next (fluid_sfont, &fluid_preset))
fluid_sfont_iteration_start (fluid_sfont);
while (fluid_preset_t *fluid_preset = fluid_sfont_iteration_next (fluid_sfont))
{
BseSoundFontPreset *sound_font_preset;
sound_font_preset = (BseSoundFontPreset *) bse_object_new (BSE_TYPE_SOUND_FONT_PRESET,
"uname", fluid_preset.get_name (&fluid_preset),
"uname", fluid_preset_get_name (fluid_preset),
NULL);
bse_container_add_item (BSE_CONTAINER (self), BSE_ITEM (sound_font_preset));
bse_sound_font_preset_init_preset (sound_font_preset, &fluid_preset);
bse_sound_font_preset_init_preset (sound_font_preset, fluid_preset);
}
}
sound_font_impl->sfont_id = sfont_id;
Expand Down
4 changes: 2 additions & 2 deletions bse/bsesoundfontpreset.cc
Expand Up @@ -28,8 +28,8 @@ void
bse_sound_font_preset_init_preset (BseSoundFontPreset *self,
fluid_preset_t *fluid_preset)
{
self->bank = fluid_preset->get_banknum (fluid_preset);
self->program = fluid_preset->get_num (fluid_preset);
self->bank = fluid_preset_get_banknum (fluid_preset);
self->program = fluid_preset_get_num (fluid_preset);
}

static void
Expand Down
20 changes: 13 additions & 7 deletions bse/bsesoundfontrepo.cc
Expand Up @@ -124,13 +124,13 @@ bse_sound_font_repo_prepare (BseSource *source)
BseSoundFontRepo *sfrepo = BSE_SOUND_FONT_REPO (source);
Bse::SoundFontRepoImpl *sfrepo_impl = sfrepo->as<Bse::SoundFontRepoImpl *>();

guint channels_required = 0;
uint channels_required = 0;
for (auto& o : sfrepo_impl->oscs)
{
if (o.osc)
o.channel = channels_required++;
}
guint mix_freq = bse_engine_sample_freq();
uint mix_freq = bse_engine_sample_freq();
if (sfrepo_impl->n_fluid_channels != channels_required || sfrepo_impl->fluid_mix_freq != mix_freq)
{
sfrepo_impl->channel_state.resize (channels_required);
Expand All @@ -145,14 +145,20 @@ bse_sound_font_repo_prepare (BseSource *source)
sfrepo_impl->n_fluid_channels = channels_required;
sfrepo_impl->fluid_mix_freq = mix_freq;

/* midi channels required must be: at least 16, a multiple of 16 */
const int midi_channels_required = (channels_required / 16 + 1) * 16;

/* audio channels required must not be zero */
const int audio_channels_required = std::max<int> (1, channels_required);

fluid_settings_setnum (sfrepo_impl->fluid_settings, "synth.sample-rate", mix_freq);
/* soundfont instruments should be as loud as beast synthesis network instruments */
fluid_settings_setnum (sfrepo_impl->fluid_settings, "synth.gain", 1.0);
fluid_settings_setint (sfrepo_impl->fluid_settings, "synth.midi-channels", channels_required);
fluid_settings_setint (sfrepo_impl->fluid_settings, "synth.audio-channels", channels_required);
fluid_settings_setint (sfrepo_impl->fluid_settings, "synth.audio-groups", channels_required);
fluid_settings_setstr (sfrepo_impl->fluid_settings, "synth.reverb.active", "no");
fluid_settings_setstr (sfrepo_impl->fluid_settings, "synth.chorus.active", "no");
fluid_settings_setint (sfrepo_impl->fluid_settings, "synth.midi-channels", midi_channels_required);
fluid_settings_setint (sfrepo_impl->fluid_settings, "synth.audio-channels", audio_channels_required);
fluid_settings_setint (sfrepo_impl->fluid_settings, "synth.audio-groups", audio_channels_required);
fluid_settings_setint (sfrepo_impl->fluid_settings, "synth.reverb.active", 0);
fluid_settings_setint (sfrepo_impl->fluid_settings, "synth.chorus.active", 0);

bse_sound_font_repo_forall_items (BSE_CONTAINER (sfrepo), unload_sound_font, sfrepo);
if (sfrepo_impl->fluid_synth)
Expand Down
2 changes: 1 addition & 1 deletion config-checks.mk
Expand Up @@ -74,7 +74,7 @@ conftest_require_lib = { $(call conftest_lib,$1,$2,$3) && $$CONFTEST \
config-checks.require.pkgconfig ::= $(strip \
alsa >= 1.0.5 \
flac >= 1.2.1 \
fluidsynth >= 1.1.7 \
fluidsynth >= 2.0.4 \
ogg >= 1.2.2 \
vorbis >= 1.3.2 \
vorbisenc >= 1.3.2 \
Expand Down
2 changes: 1 addition & 1 deletion tests/audio/soundfont-test.ref
Expand Up @@ -289,4 +289,4 @@ spectrum[135,15] = {
# --avg-spectrum: average frequency spectrum
avg_spectrum[15] = { 0.000132433535 6.03937981e-05 0.00191489231 0.00777208979 0.0103827856 0.0113183539 0.0223034671 0.0195583776 0.0173148494 0.0161384003 0.0107489125 0.00516871485 0.00130238263 0.000666166756 1.15291478e-05 };
# --avg-energy: average signal energy in dB
avg_energy = -20.6994744;
avg_energy = -20.7391706;

0 comments on commit 4c65148

Please sign in to comment.