Your message dated Sun, 05 Mar 2017 22:46:40 +0000
with message-id <[email protected]>
and subject line unblock speech-dispatcher
has caused the Debian Bug report #856900,
regarding unblock: speech-dispatcher/0.8.6-4
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 [email protected]
immediately.)
--
856900: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=856900
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
User: [email protected]
Usertags: unblock
Hello,
A user reported on #856895 that the speech-dispatcher-flite module
systematically strips the end of speech syntheses, while other modules
do work fine. That makes the flite module barely usable since some
important information may then be missing, which is more than important
when used by a screen reader for a blind user.
Digging a bit, I found that the flite module intentionally strips part
of the synthesis, to drop the silence at beginning and end of the
synthesis (which is indeed not neglectable). This is done with an ad-hoc
cryptic sloppy formula. In the patch I have uploaded, I replaced it with
a mere loop that simply looks for heading and trailing silence (detected
as being less than 0.1% volume). The result is as snappy as user expect,
and way more robust.
Samuel
unblock speech-dispatcher/0.8.6-4
-- System Information:
Debian Release: 9.0
APT prefers testing
APT policy: (990, 'testing'), (500, 'unstable-debug'), (500,
'testing-debug'), (500, 'buildd-unstable'), (500, 'unstable'), (500, 'stable'),
(500, 'oldstable'), (1, 'experimental-debug'), (1, 'buildd-experimental'), (1,
'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386
Kernel: Linux 4.10.0 (SMP w/4 CPU cores)
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
--
Samuel
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and
the Ugly)."
(By Matt Welsh)
diff -Nru speech-dispatcher-0.8.6/debian/changelog
speech-dispatcher-0.8.6/debian/changelog
--- speech-dispatcher-0.8.6/debian/changelog 2017-02-04 10:59:22.000000000
+0100
+++ speech-dispatcher-0.8.6/debian/changelog 2017-03-05 23:13:08.000000000
+0100
@@ -1,3 +1,9 @@
+speech-dispatcher (0.8.6-4) unstable; urgency=medium
+
+ * Fix stripped audio output of flite module (Closes: #856895).
+
+ -- Samuel Thibault <[email protected]> Sun, 05 Mar 2017 23:13:08 +0100
+
speech-dispatcher (0.8.6-3) unstable; urgency=medium
[ Samuel Thibault ]
diff -Nru speech-dispatcher-0.8.6/debian/patches/flite-strip-silence
speech-dispatcher-0.8.6/debian/patches/flite-strip-silence
--- speech-dispatcher-0.8.6/debian/patches/flite-strip-silence 1970-01-01
01:00:00.000000000 +0100
+++ speech-dispatcher-0.8.6/debian/patches/flite-strip-silence 2017-03-05
23:12:16.000000000 +0100
@@ -0,0 +1,45 @@
+--- a/src/modules/flite.c
++++ b/src/modules/flite.c
+@@ -238,21 +238,29 @@ int module_close(void)
+
+ void flite_strip_silence(AudioTrack * track)
+ {
+- int playlen, skip;
++ assert(track->bits == 16);
++ unsigned i;
++ float silence_limit = 0.001;
+
+- float stretch =
+- get_param_float(flite_voice->features, "duration_stretch", 1.);
+- int speed = (int)(1000. / stretch);
+- skip = (187 * track->sample_rate) / speed;
+- playlen = track->num_samples - skip * 2;
+- if (playlen > 0 && playlen < 500)
+- playlen += (skip * 2) / 3;
+- if (playlen < 0)
+- playlen = 0;
++ while (track->num_samples >= track->num_channels) {
++ for (i = 0; i < track->num_channels; i++)
++ if (abs(track->samples[i])
++ >= silence_limit * (1L<<(track->bits-1)))
++ goto stripped_head;
++ track->samples += track->num_channels;
++ track->num_samples -= track->num_channels;
++ }
++stripped_head:
+
+- track->num_samples = playlen;
+- assert(track->bits == 16);
+- track->samples += skip * track->num_channels;
++ while (track->num_samples >= track->num_channels) {
++ for (i = 0; i < track->num_channels; i++)
++ if (abs(track->samples[track->num_samples - i - 1])
++ >= silence_limit * (1L<<(track->bits-1)))
++ goto stripped_tail;
++ track->num_samples -= track->num_channels;
++ }
++stripped_tail:
++ ;
+ }
+
+ void *_flite_speak(void *nothing)
diff -Nru speech-dispatcher-0.8.6/debian/patches/series
speech-dispatcher-0.8.6/debian/patches/series
--- speech-dispatcher-0.8.6/debian/patches/series 2017-02-04
08:13:39.000000000 +0100
+++ speech-dispatcher-0.8.6/debian/patches/series 2017-03-05
22:50:12.000000000 +0100
@@ -1,3 +1,4 @@
pulse-default-latency.patch
doc-figures
change-default-module.patch
+flite-strip-silence
--- End Message ---
--- Begin Message ---
Unblocked speech-dispatcher.
--- End Message ---