From 503a1b76cf7ffaf6a96b7a21b74bb882465153cd Mon Sep 17 00:00:00 2001 From: Stefan Westerfeld Date: Tue, 9 Apr 2019 11:11:45 +0200 Subject: [PATCH 1/7] 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: Stefan Westerfeld --- bse/Makefile.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bse/Makefile.mk b/bse/Makefile.mk index 722d07bbb..1ca6ca6eb 100644 --- a/bse/Makefile.mk +++ b/bse/Makefile.mk @@ -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, \ From 5b32beb7d48eedf49042a016bdf6387bcd7363b0 Mon Sep 17 00:00:00 2001 From: Stefan Westerfeld Date: Tue, 9 Apr 2019 11:15:10 +0200 Subject: [PATCH 2/7] BSE: SF2: port soundfont support to fluidsynth2 API Signed-off-by: Stefan Westerfeld --- bse/bsesoundfont.cc | 9 ++++----- bse/bsesoundfontpreset.cc | 4 ++-- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/bse/bsesoundfont.cc b/bse/bsesoundfont.cc index 755b72940..451736bfa 100644 --- a/bse/bsesoundfont.cc +++ b/bse/bsesoundfont.cc @@ -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; diff --git a/bse/bsesoundfontpreset.cc b/bse/bsesoundfontpreset.cc index 78aa44385..79c28066e 100644 --- a/bse/bsesoundfontpreset.cc +++ b/bse/bsesoundfontpreset.cc @@ -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 From 1a48d1d0a9b76585d416b7c11d33269d02ca7175 Mon Sep 17 00:00:00 2001 From: Stefan Westerfeld Date: Tue, 9 Apr 2019 11:16:24 +0200 Subject: [PATCH 3/7] config-checks.mk: require fluidsynth >= 2.0.0 Signed-off-by: Stefan Westerfeld --- config-checks.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config-checks.mk b/config-checks.mk index ad3416295..83dad3a95 100644 --- a/config-checks.mk +++ b/config-checks.mk @@ -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.0 \ ogg >= 1.2.2 \ vorbis >= 1.3.2 \ vorbisenc >= 1.3.2 \ From f42b8415dd23aa8a75f417835dc16224f2aae0fd Mon Sep 17 00:00:00 2001 From: Stefan Westerfeld Date: Tue, 9 Apr 2019 13:16:06 +0200 Subject: [PATCH 4/7] BSE: SF2: adapt fluidsynth settings to fluidsynth 2 constraints Signed-off-by: Stefan Westerfeld --- bse/bsesoundfontrepo.cc | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/bse/bsesoundfontrepo.cc b/bse/bsesoundfontrepo.cc index 2745a1341..8436a6a37 100644 --- a/bse/bsesoundfontrepo.cc +++ b/bse/bsesoundfontrepo.cc @@ -6,6 +6,8 @@ #include "bseblockutils.hh" #include "bse/internal.hh" +using std::max; + /* --- parameters --- */ enum { @@ -124,13 +126,13 @@ bse_sound_font_repo_prepare (BseSource *source) BseSoundFontRepo *sfrepo = BSE_SOUND_FONT_REPO (source); Bse::SoundFontRepoImpl *sfrepo_impl = sfrepo->as(); - 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); @@ -145,14 +147,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 = max (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) From 0497cfbadb06c85d40bd7744bca8dfe6fcc4c47d Mon Sep 17 00:00:00 2001 From: Stefan Westerfeld Date: Fri, 12 Apr 2019 17:47:32 +0200 Subject: [PATCH 5/7] 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. Signed-off-by: Stefan Westerfeld --- tests/audio/soundfont-test.ref | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/audio/soundfont-test.ref b/tests/audio/soundfont-test.ref index 690815dca..d1a5da6c8 100644 --- a/tests/audio/soundfont-test.ref +++ b/tests/audio/soundfont-test.ref @@ -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; From 84aca539ece9694c9c6c2c8bf9053d4c1a99b260 Mon Sep 17 00:00:00 2001 From: Tim Janik Date: Mon, 15 Apr 2019 13:20:08 +0200 Subject: [PATCH 6/7] BSE: bsesoundfontrepo: remove unneeded using declaration Signed-off-by: Tim Janik --- bse/bsesoundfontrepo.cc | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/bse/bsesoundfontrepo.cc b/bse/bsesoundfontrepo.cc index 8436a6a37..379a99bae 100644 --- a/bse/bsesoundfontrepo.cc +++ b/bse/bsesoundfontrepo.cc @@ -6,8 +6,6 @@ #include "bseblockutils.hh" #include "bse/internal.hh" -using std::max; - /* --- parameters --- */ enum { @@ -151,7 +149,7 @@ bse_sound_font_repo_prepare (BseSource *source) const int midi_channels_required = (channels_required / 16 + 1) * 16; /* audio channels required must not be zero */ - const int audio_channels_required = max (1, channels_required); + const int audio_channels_required = std::max (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 */ From b847e81c4adcd12f820d945b131d78ad76ce67a9 Mon Sep 17 00:00:00 2001 From: Tim Janik Date: Mon, 15 Apr 2019 13:20:37 +0200 Subject: [PATCH 7/7] config-checks.mk: require the latest fluidsynth version, 2.0.4 Signed-off-by: Tim Janik --- config-checks.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config-checks.mk b/config-checks.mk index 83dad3a95..d6cfa13bd 100644 --- a/config-checks.mk +++ b/config-checks.mk @@ -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 >= 2.0.0 \ + fluidsynth >= 2.0.4 \ ogg >= 1.2.2 \ vorbis >= 1.3.2 \ vorbisenc >= 1.3.2 \