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 ---

Reply via email to