Your message dated Tue, 18 Apr 2023 19:23:42 +0000
with message-id <e1poqvw-004trf...@respighi.debian.org>
and subject line unblock fluidsynth
has caused the Debian Bug report #1034555,
regarding unblock: fluidsynth/2.3.1-2
to be marked as done.
This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.
(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact ow...@bugs.debian.org
immediately.)
--
1034555: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1034555
Debian Bug Tracking System
Contact ow...@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
User: release.debian....@packages.debian.org
Usertags: unblock
X-Debbugs-Cc: fluidsy...@packages.debian.org, fluidsy...@packages.debian.org
Control: affects -1 + src:fluidsynth
Please unblock package fluidsynth
[ Reason ]
This revision fixes a regression that was introduced upstream between
the 2.3.0 and 2.3.1 releases and has been fixed in the 2.3.2 release.
[ Impact ]
The regression introduced a multi-second gap between looping MIDI
tracks. Since fluidsynth is the default renderer for MIDI music in
SDL2, this will affect *a lot* of games in Debian.
[ Tests ]
n/a
[ Risks ]
None, I'd say. The fix has been backported from the upstream GIT
repository and is in the 2.3.2 version, which has already been
released. The output of `git show -w c0e2ef` on the commit in question
has three lines of code changes, the rest is indentation:
--- a/src/midi/fluid_midi.c
+++ b/src/midi/fluid_midi.c
@@ -2179,6 +2179,8 @@ fluid_player_callback(void *data, unsigned int msec)
fluid_atomic_int_set(&player->seek_ticks, -1); /* clear seek_ticks
*/
}
+ if(fluid_list_next(player->currentfile) == NULL && player->loop == 0)
+ {
/* Once we've run out of MIDI events, keep playing until no voices
are active */
if(status == FLUID_PLAYER_DONE &&
fluid_synth_get_active_voice_count(player->synth) > 0)
{
@@ -2207,6 +2209,7 @@ fluid_player_callback(void *data, unsigned int msec)
{
status = FLUID_PLAYER_PLAYING;
}
+ }
/* Once there's no reason to keep playing, we're actually done */
if(status == FLUID_PLAYER_DONE)
[ Checklist ]
[X] all changes are documented in the d/changelog
[X] I reviewed all changes and I approve them
[X] attach debdiff against the package in testing
[ Other info ]
n/a
unblock fluidsynth/2.3.1-2
diff -Nru fluidsynth-2.3.1/debian/changelog fluidsynth-2.3.1/debian/changelog
--- fluidsynth-2.3.1/debian/changelog 2022-12-30 16:10:11.000000000 +0100
+++ fluidsynth-2.3.1/debian/changelog 2023-04-18 07:48:30.000000000 +0200
@@ -1,3 +1,11 @@
+fluidsynth (2.3.1-2) unstable; urgency=medium
+
+ * Team upload.
+ * Apply patch from upstream to fix seamless looping between MIDI
+ files.
+
+ -- Fabian Greffrath <fab...@debian.org> Tue, 18 Apr 2023 07:48:30 +0200
+
fluidsynth (2.3.1-1) unstable; urgency=medium
* New upstream version 2.3.1
diff -Nru
fluidsynth-2.3.1/debian/patches/0046-Fix-seamless-looping-between-MIDI-files.patch
fluidsynth-2.3.1/debian/patches/0046-Fix-seamless-looping-between-MIDI-files.patch
---
fluidsynth-2.3.1/debian/patches/0046-Fix-seamless-looping-between-MIDI-files.patch
1970-01-01 01:00:00.000000000 +0100
+++
fluidsynth-2.3.1/debian/patches/0046-Fix-seamless-looping-between-MIDI-files.patch
2023-04-18 07:47:25.000000000 +0200
@@ -0,0 +1,76 @@
+From c0e2ef4243b83f29620b2078fc0f1198bafd7d90 Mon Sep 17 00:00:00 2001
+From: derselbst <tom.m...@googlemail.com>
+Date: Sun, 2 Apr 2023 17:31:24 +0200
+Subject: [PATCH 46/49] Fix seamless looping between MIDI files
+
+Fixes #1227
+---
+ src/midi/fluid_midi.c | 45 +++++++++++++++++++++++--------------------
+ 1 file changed, 24 insertions(+), 21 deletions(-)
+
+diff --git a/src/midi/fluid_midi.c b/src/midi/fluid_midi.c
+index 0676c452..b72c3914 100644
+--- a/src/midi/fluid_midi.c
++++ b/src/midi/fluid_midi.c
+@@ -2178,34 +2178,37 @@ fluid_player_callback(void *data, unsigned int msec)
+ player->start_msec = msec; /* should be the (synth)-time of
the last tempo change */
+ fluid_atomic_int_set(&player->seek_ticks, -1); /* clear
seek_ticks */
+ }
+-
+- /* Once we've run out of MIDI events, keep playing until no voices
are active */
+- if(status == FLUID_PLAYER_DONE &&
fluid_synth_get_active_voice_count(player->synth) > 0)
++
++ if(fluid_list_next(player->currentfile) == NULL && player->loop == 0)
+ {
+- /* The first time we notice we've run out of MIDI events but
there are still active voices, disable all hold pedals */
+- if(!player->end_pedals_disabled)
++ /* Once we've run out of MIDI events, keep playing until no
voices are active */
++ if(status == FLUID_PLAYER_DONE &&
fluid_synth_get_active_voice_count(player->synth) > 0)
+ {
+- for(i = 0; i < synth->midi_channels; i++)
++ /* The first time we notice we've run out of MIDI events but
there are still active voices, disable all hold pedals */
++ if(!player->end_pedals_disabled)
+ {
+- fluid_synth_cc(player->synth, i, SUSTAIN_SWITCH, 0);
+- fluid_synth_cc(player->synth, i, SOSTENUTO_SWITCH, 0);
++ for(i = 0; i < synth->midi_channels; i++)
++ {
++ fluid_synth_cc(player->synth, i, SUSTAIN_SWITCH, 0);
++ fluid_synth_cc(player->synth, i, SOSTENUTO_SWITCH, 0);
++ }
++
++ player->end_pedals_disabled = 1;
+ }
+
+- player->end_pedals_disabled = 1;
++ status = FLUID_PLAYER_PLAYING;
+ }
+
+- status = FLUID_PLAYER_PLAYING;
+- }
+-
+- /* Once no voices are active, if end_msec hasn't been scheduled,
schedule it so we wait for reverb, etc to finish */
+- if(status == FLUID_PLAYER_DONE && player->end_msec < 0)
+- {
+- player->end_msec = msec + FLUID_PLAYER_STOP_GRACE_MS;
+- }
+- /* If end_msec has been scheduled and is in the future, keep playing
*/
+- if (player->end_msec >= 0 && msec < (unsigned int) player->end_msec)
+- {
+- status = FLUID_PLAYER_PLAYING;
++ /* Once no voices are active, if end_msec hasn't been scheduled,
schedule it so we wait for reverb, etc to finish */
++ if(status == FLUID_PLAYER_DONE && player->end_msec < 0)
++ {
++ player->end_msec = msec + FLUID_PLAYER_STOP_GRACE_MS;
++ }
++ /* If end_msec has been scheduled and is in the future, keep
playing */
++ if (player->end_msec >= 0 && msec < (unsigned int)
player->end_msec)
++ {
++ status = FLUID_PLAYER_PLAYING;
++ }
+ }
+
+ /* Once there's no reason to keep playing, we're actually done */
+--
+2.39.2
+
diff -Nru fluidsynth-2.3.1/debian/patches/series
fluidsynth-2.3.1/debian/patches/series
--- fluidsynth-2.3.1/debian/patches/series 1970-01-01 01:00:00.000000000
+0100
+++ fluidsynth-2.3.1/debian/patches/series 2023-04-18 07:47:25.000000000
+0200
@@ -0,0 +1 @@
+0046-Fix-seamless-looping-between-MIDI-files.patch
--- End Message ---
--- Begin Message ---
Unblocked.
--- End Message ---