espeak uses the multiarch directory for voices.

---
 config/modules/espeak-mbrola-generic.conf       |  233 -------------------
 config/modules/espeak-mbrola-generic.conf.in    |  233 +++++++++++++++++++
 config/modules/espeak-ng-mbrola-generic.conf    |  287 ------------------------
 config/modules/espeak-ng-mbrola-generic.conf.in |  287 ++++++++++++++++++++++++
 doc/speech-dispatcher.texi                      |    4 
 5 files changed, 522 insertions(+), 522 deletions(-)

--- a/config/modules/espeak-ng-mbrola-generic.conf
+++ /dev/null
@@ -1,287 +0,0 @@
-# Espeak mbrola output module is based on the generic plugin for Speech
-# Dispatcher. It means there is no code written explicitly for
-# this plugin, all the specifics are handled in this configuration
-# and we call a simple command line client to perform the actual
-# synthesis. Use this config file with the sd_generic output module.
-
-# Debug turns debugging on or off
-# See speechd.conf for information where debugging information is stored
-Debug 0
-
-# IMPORTANT: The audio output method relies on an audio playback
-# utility (play, aplay, paplay for OSS, ALSA or Pulse)
-# being installed. If this is not the case, consider installing it
-# or replace the $PLAY_COMMAND string in the GenericExecuteString below
-# with play, paplay or similar.
-#
-# GenericExecuteSynth is the shell command that should be
-# executed in order to say some message. This command must
-# stop saying the message on SIGKILL, otherwise it's useless.
-# You can use the variables $LANGUAGE, $VOICE, $PITCH and $RATE
-# which will be substituted for the appropriate value (you
-# can modify this value, see other parameters).
-# The command can be split into more lines, if necessary, using '\'.
-GenericExecuteSynth \
-"printf %s \'$DATA\' | espeak-ng -v mb-$VOICE -s $RATE -p $PITCH $PUNCT -q --stdin --pho | mbrola -v $VOLUME -e /usr/share/mbrola/$VOICE/$VOICE - -.au | $PLAY_COMMAND"
-
-# Alternatively you can shorten the command like below, which makes it
-# work directly with any audio playback utility, but then you won't
-# be able to change the volume from the client application:
-# GenericExecuteSynth \
-# "printf %s \'$DATA\' | espeak-ng -v mb-$VOICE -s $RATE -p $PITCH $PUNCT -stdin"
-
-GenericCmdDependency "espeak-ng"
-GenericCmdDependency "mbrola"
-GenericSoundIconFolder "/usr/share/sounds/sound-icons/"
-
-# The following three items control punctuation levels None, Some, and All.
-# Each of these values will be substituted into the $PUNCT variable depending
-# on the value passed to speech dispatcher from applications.
-# Note that if an empty string is specified, then $PUNCT will be blank 
-# which is a default situation for espeak.
- 
-GenericPunctNone "--punct=\"\""
-GenericPunctSome "--punct=\"()[]{};:\""
-GenericPunctMost "--punct=\"()[]{};:\""
-GenericPunctAll "--punct"
-
-# GenericStripPunctChars is a list (enclosed in doublequotes) of
-# all the characters that should be replaced by whitespaces in
-# order not to be badly handled by the output module or misinterpreted
-# by shell.
-# GenericStripPunctChars  ""
-
-# If the language you need to pass in $LANGUAGE is different
-# from the standard ISO language code, you can specify
-# which string to use instead. If you wish to use
-# other than ISO charset for the specified language,
-# you can add it's name (as accepted by iconv) as a
-# third parameter in doublequotes.
-
-# To be completed
-GenericLanguage		  "af" "af" "utf-8"
-GenericLanguage		  "cs" "cs" "utf-8"
-GenericLanguage		  "de" "de" "utf-8"
-GenericLanguage		  "el" "el" "utf-8"
-GenericLanguage		  "en" "en-us" "utf-8"
-GenericLanguage		  "en-gb" "en-gb" "utf-8"
-GenericLanguage		  "en-us" "en-us" "utf-8"
-GenericLanguage		  "es" "es" "utf-8"
-GenericLanguage		  "es-mx" "es-mx" "utf-8"
-GenericLanguage		  "es-ve" "es-ve" "utf-8"
-GenericLanguage		  "et" "et" "utf-8"
-GenericLanguage		  "fa" "fa" "utf-8"
-GenericLanguage		  "fr" "fr" "utf-8"
-GenericLanguage		  "fr-ca" "fr-ca" "utf-8"
-GenericLanguage		  "fr-be" "fr-be" "utf-8"
-GenericLanguage		  "hu" "hu" "utf-8"
-GenericLanguage		  "hr" "hr" "utf-8"
-GenericLanguage		  "id" "id" "utf-8"
-GenericLanguage		  "is" "is" "utf-8"
-GenericLanguage		  "it" "it" "utf-8"
-GenericLanguage		  "la" "la" "utf-8"
-GenericLanguage		  "lt" "lt" "utf-8"
-GenericLanguage		  "nl" "nl" "utf-8"
-GenericLanguage		  "pl" "pl" "utf-8"
-GenericLanguage		  "pt" "pt" "utf-8"
-GenericLanguage		  "pt-br" "pt-br" "utf-8"
-GenericLanguage		  "ro" "ro" "utf-8"
-GenericLanguage		  "sv" "sv" "utf-8"
-GenericLanguage		  "tr" "tr" "utf-8"
-
-# Each voice is available if and only if the following files exist.
-# These files must be listed *before* the voices.
-
-VoiceFileDependency "/usr/share/mbrola/$VOICE/$VOICE"
-VoiceFileDependency "/usr/share/espeak-ng-data/voices/mb/mb-$VOICE"
-
-# AddVoice specifies which $VOICE string should be assigned to
-# each language and symbolic voice name. All the voices you want
-# to use must be specified here. This list will likely not be
-# up-to-date, please check eSpeak NG documentation and add the voices
-# you want to use.
-# All MBROLA voices for which a phoneme translation from espeak-ng to
-# MBROLA as of 12 October 2018 are listed, some commented with the
-# rationale to not include them by default. You still can ship or use
-# the commented voices if you uncomment the corresponding line.
-  
-# As of Friday 12 October 2018 these mbrola voices aren't yet 
-# supported by espeak-ng's phonemes translation to mbrola in git are:
-# bz1: Breton Female (25.0Mb)    Jean Pierre Messager
-# hb1: Hebrew Male (3.4Mb)    Yoram Meron
-# hb2: Hebrew Female (5.6Mb)    Esther Raizen
-# hn1: Korean Male (9.9Mb)    Kyongsok Gim
-# thus they are not listed below.
-# The language code in this list is the ISO 639-1 code.
-
-AddVoice "af" "MALE1" "af1"
-
-AddVoice "ar" "MALE1" "ar1"
-AddVoice "ar" "MALE2" "ar2"
-
-AddVoice "zh" "FEMALE1" "cn1"
-
-AddVoice "cs" "FEMALE1" "cz1"
-AddVoice "cs" "MALE1" "cz2"
-
-AddVoice "de" "FEMALE1" "de1"
-AddVoice "de" "MALE1" "de2"
-AddVoice "de" "FEMALE2" "de3"
-AddVoice "de" "MALE2" "de4"
-AddVoice "de" "FEMALE3" "de5"
-AddVoice "de" "MALE1" "de6"
-AddVoice "de" "FEMALE3" "de7"
-AddVoice "de" "MALE3" "de8"
-
-AddVoice "el" "MALE1" "gr1"
-AddVoice "el" "MALE2" "gr2"
-
-AddVoice "en" "FEMALE1" "us1"
-AddVoice "en" "MALE1" "en1"
-AddVoice "en" "MALE2" "us2"
-AddVoice "en" "MALE3" "us3"
-AddVoice "en-gb" "MALE1" "en1"
-AddVoice "en-us" "FEMALE1" "us1"
-AddVoice "en-us" "MALE1" "us2"
-AddVoice "en-us" "MALE2" "us3"
-
-AddVoice "es" "MALE1" "es1"
-AddVoice "es" "MALE2" "es2"
-AddVoice "es" "FEMALE1" "es3"
-AddVoice "es" "MALE3" "es4"
-AddVoice "es-mx" "MALE1" "mx1"
-AddVoice "es-mx" "MALE2" "mx2"
-AddVoice "es-ve" "MALE1" "vz1"     
-
-AddVoice "et" "MALE1" "ee1"
-
-AddVoice "fa" "MALE1" "ir1"
-AddVoice "fa" "FEMALE1" "ir2"
-
-AddVoice "fr-ca" "MALE1" "ca1"
-AddVoice "fr-ca" "MALE2" "ca2"
-AddVoice "fr" "MALE1" "fr1"
-AddVoice "fr" "FEMALE1" "fr2"
-AddVoice "fr" "MALE2" "fr3"
-AddVoice "fr" "FEMALE2" "fr4"
-AddVoice "fr-be" "MALE1" "fr5"
-AddVoice "fr" "MALE3" "fr6"
-AddVoice "fr-be" "MALE2" "fr7"
-
-AddVoice "hi" "MALE1" "in1"
-AddVoice "hi" "MALE2" "in2"
-
-AddVoice "hu" "MALE1" "hu1"
-
-AddVoice "hr" "MALE1" "cr1"
-
-AddVoice "id" "MALE1" "id1"
-
-AddVoice "is" "MALE1" "ic1"
-
-AddVoice "it" "MALE1" "it1"
-AddVoice "it" "FEMALE1" "it2"
-AddVoice "it" "MALE2" "it3"
-AddVoice "it" "FEMALE2" "it4"
-
-AddVoice "jp" "MALE1" "jp1"
-AddVoice "jp" "FEMALE1" "jp2"
-AddVoice "jp" "FEMALE2" "jp3"
-
-AddVoice "la" "MALE1" "la1"
-
-AddVoice "lt" "MALE1" "lt1"
-AddVoice "lt" "MALE2" "lt2"
-
-Addvoice "ms" "FEMALE1" "ma1"
-
-# nl1 has a very limited set of diphones and is usable only for reading
-# numbers. Uncomment the next line if you want it.
-# AddVoice "nl" "CHILD-MALE" "nl1"
-AddVoice "nl" "MALE1" "nl2"
-AddVoice "nl" "FEMALE1" "nl3"
-
-AddVoice "mi" "MALE1" "nz1"
-
-AddVoice "pl" "FEMALE1" "pl1"
-
-AddVoice "pt-br" "MALE1" "br1"
-AddVoice "pt-br" "MALE2" "br2"
-AddVoice "pt-br" "MALE3" "br3"
-AddVoice "pt-br" "FEMALE1" "br4"
-AddVoice "pt" "FEMALE1" "pt1"
-
-AddVoice "ro" "MALE1" "ro1"
-
-AddVoice "sv" "MALE1" "sw1"
-AddVoice "sv" "FEMALE1" "sw2"
-
-AddVoice "te" "FEMALE1" "tl1"
-
-AddVoice "tr" "MALE1" "tr1"
-AddVoice "tr" "FEMALE1" "tr2"
-
-# DefaultVoice specifies which $VOICE string should be used if no voice is
-# specified otherwise.
-
-DefaultVoice    "en1"
-
-# These parameters set _rate_, _pitch_, and _volume_ conversion. This is
-# part of the core of the definition of this generic output
-# module for this concrete synthesizer, it's not intended to
-# be modified by common users.
-# The resulting rate (or pitch) has the form:
-#       (speechd_rate * GenericRateMultiply) + GenericRateAdd
-# while speechd_rate is a value between -100 (lowest) and +100 (highest)
-# You have to define some meaningful conversion for each synthesizer
-
-# Here's the mapping from SSIP (Speech Dispatcher) to ESpeak (v1.10):
-#
-#           SSIP Range  SSIP Default    ESpeak/MBROLA Range ESpeak Default
-#           ----------- ------------    ------------         --------------
-# Rate      -100 to 100     0           80 to 320       160
-# Pitch     -100 to 100     0            0 to 99         50
-# Volume    -100 to 100     0            0 to 2          --
-#
-# The SSIP defaults are actually controlled via DefaultRate, DefaultPitch, and
-# DefaultVolume in the speechd.conf file.
-
-GenericRateAdd          160
-GenericPitchAdd         50
-GenericVolumeAdd        1
-
-# (These values are multiplied by 100, because DotConf currently
-# doesn't support floats. So you can write 0.85 as 85 and so on.)
-
-GenericRateMultiply     160
-GenericPitchMultiply    50
-GenericVolumeMultiply   1
-
-# If the client program can't handle floats, you will have to
-# use these two options to force integers as the parameters
-# 1 means force integers, 0 means do nothing (write floats).
-
-GenericRateForceInteger     1
-GenericPitchForceInteger    1
-GenericVolumeForceInteger   0
-
-# Note that SSIP rates < -50 are spoken at -50.
-
-
-# Copyright (C) 2008-2010 Brailcom, o.p.s
-# Copyright (C) 2014 Luke Yelavich <themuso@ubuntu.com>
-# Copyright (C) 2018-2021 Samuel Thibault <samuel.thibault@ens-lyon.org>
-# Copyright (C) 2018 Didier Spaier <didier@slint.fr>
-#
-# This program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free Software
-# Foundation; either version 2 of the License, or (at your option) any later
-# version.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.  See the GNU General Public License for more details (file
-# COPYING in the root directory).
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <https://www.gnu.org/licenses/>.
--- /dev/null
+++ b/config/modules/espeak-ng-mbrola-generic.conf.in
@@ -0,0 +1,287 @@
+# Espeak mbrola output module is based on the generic plugin for Speech
+# Dispatcher. It means there is no code written explicitly for
+# this plugin, all the specifics are handled in this configuration
+# and we call a simple command line client to perform the actual
+# synthesis. Use this config file with the sd_generic output module.
+
+# Debug turns debugging on or off
+# See speechd.conf for information where debugging information is stored
+Debug 0
+
+# IMPORTANT: The audio output method relies on an audio playback
+# utility (play, aplay, paplay for OSS, ALSA or Pulse)
+# being installed. If this is not the case, consider installing it
+# or replace the $PLAY_COMMAND string in the GenericExecuteString below
+# with play, paplay or similar.
+#
+# GenericExecuteSynth is the shell command that should be
+# executed in order to say some message. This command must
+# stop saying the message on SIGKILL, otherwise it's useless.
+# You can use the variables $LANGUAGE, $VOICE, $PITCH and $RATE
+# which will be substituted for the appropriate value (you
+# can modify this value, see other parameters).
+# The command can be split into more lines, if necessary, using '\'.
+GenericExecuteSynth \
+"printf %s \'$DATA\' | espeak-ng -v mb-$VOICE -s $RATE -p $PITCH $PUNCT -q --stdin --pho | mbrola -v $VOLUME -e /usr/share/mbrola/$VOICE/$VOICE - -.au | $PLAY_COMMAND"
+
+# Alternatively you can shorten the command like below, which makes it
+# work directly with any audio playback utility, but then you won't
+# be able to change the volume from the client application:
+# GenericExecuteSynth \
+# "printf %s \'$DATA\' | espeak-ng -v mb-$VOICE -s $RATE -p $PITCH $PUNCT -stdin"
+
+GenericCmdDependency "espeak-ng"
+GenericCmdDependency "mbrola"
+GenericSoundIconFolder "/usr/share/sounds/sound-icons/"
+
+# The following three items control punctuation levels None, Some, and All.
+# Each of these values will be substituted into the $PUNCT variable depending
+# on the value passed to speech dispatcher from applications.
+# Note that if an empty string is specified, then $PUNCT will be blank
+# which is a default situation for espeak.
+
+GenericPunctNone "--punct=\"\""
+GenericPunctSome "--punct=\"()[]{};:\""
+GenericPunctMost "--punct=\"()[]{};:\""
+GenericPunctAll "--punct"
+
+# GenericStripPunctChars is a list (enclosed in doublequotes) of
+# all the characters that should be replaced by whitespaces in
+# order not to be badly handled by the output module or misinterpreted
+# by shell.
+# GenericStripPunctChars  ""
+
+# If the language you need to pass in $LANGUAGE is different
+# from the standard ISO language code, you can specify
+# which string to use instead. If you wish to use
+# other than ISO charset for the specified language,
+# you can add it's name (as accepted by iconv) as a
+# third parameter in doublequotes.
+
+# To be completed
+GenericLanguage		  "af" "af" "utf-8"
+GenericLanguage		  "cs" "cs" "utf-8"
+GenericLanguage		  "de" "de" "utf-8"
+GenericLanguage		  "el" "el" "utf-8"
+GenericLanguage		  "en" "en-us" "utf-8"
+GenericLanguage		  "en-gb" "en-gb" "utf-8"
+GenericLanguage		  "en-us" "en-us" "utf-8"
+GenericLanguage		  "es" "es" "utf-8"
+GenericLanguage		  "es-mx" "es-mx" "utf-8"
+GenericLanguage		  "es-ve" "es-ve" "utf-8"
+GenericLanguage		  "et" "et" "utf-8"
+GenericLanguage		  "fa" "fa" "utf-8"
+GenericLanguage		  "fr" "fr" "utf-8"
+GenericLanguage		  "fr-ca" "fr-ca" "utf-8"
+GenericLanguage		  "fr-be" "fr-be" "utf-8"
+GenericLanguage		  "hu" "hu" "utf-8"
+GenericLanguage		  "hr" "hr" "utf-8"
+GenericLanguage		  "id" "id" "utf-8"
+GenericLanguage		  "is" "is" "utf-8"
+GenericLanguage		  "it" "it" "utf-8"
+GenericLanguage		  "la" "la" "utf-8"
+GenericLanguage		  "lt" "lt" "utf-8"
+GenericLanguage		  "nl" "nl" "utf-8"
+GenericLanguage		  "pl" "pl" "utf-8"
+GenericLanguage		  "pt" "pt" "utf-8"
+GenericLanguage		  "pt-br" "pt-br" "utf-8"
+GenericLanguage		  "ro" "ro" "utf-8"
+GenericLanguage		  "sv" "sv" "utf-8"
+GenericLanguage		  "tr" "tr" "utf-8"
+
+# Each voice is available if and only if the following files exist.
+# These files must be listed *before* the voices.
+
+VoiceFileDependency "/usr/share/mbrola/$VOICE/$VOICE"
+VoiceFileDependency "/usr/lib/$DEB_HOST_MULTIARCH/espeak-ng-data/voices/mb/mb-$VOICE"
+
+# AddVoice specifies which $VOICE string should be assigned to
+# each language and symbolic voice name. All the voices you want
+# to use must be specified here. This list will likely not be
+# up-to-date, please check eSpeak NG documentation and add the voices
+# you want to use.
+# All MBROLA voices for which a phoneme translation from espeak-ng to
+# MBROLA as of 12 October 2018 are listed, some commented with the
+# rationale to not include them by default. You still can ship or use
+# the commented voices if you uncomment the corresponding line.
+
+# As of Friday 12 October 2018 these mbrola voices aren't yet
+# supported by espeak-ng's phonemes translation to mbrola in git are:
+# bz1: Breton Female (25.0Mb)    Jean Pierre Messager
+# hb1: Hebrew Male (3.4Mb)    Yoram Meron
+# hb2: Hebrew Female (5.6Mb)    Esther Raizen
+# hn1: Korean Male (9.9Mb)    Kyongsok Gim
+# thus they are not listed below.
+# The language code in this list is the ISO 639-1 code.
+
+AddVoice "af" "MALE1" "af1"
+
+AddVoice "ar" "MALE1" "ar1"
+AddVoice "ar" "MALE2" "ar2"
+
+AddVoice "zh" "FEMALE1" "cn1"
+
+AddVoice "cs" "FEMALE1" "cz1"
+AddVoice "cs" "MALE1" "cz2"
+
+AddVoice "de" "FEMALE1" "de1"
+AddVoice "de" "MALE1" "de2"
+AddVoice "de" "FEMALE2" "de3"
+AddVoice "de" "MALE2" "de4"
+AddVoice "de" "FEMALE3" "de5"
+AddVoice "de" "MALE1" "de6"
+AddVoice "de" "FEMALE3" "de7"
+AddVoice "de" "MALE3" "de8"
+
+AddVoice "el" "MALE1" "gr1"
+AddVoice "el" "MALE2" "gr2"
+
+AddVoice "en" "FEMALE1" "us1"
+AddVoice "en" "MALE1" "en1"
+AddVoice "en" "MALE2" "us2"
+AddVoice "en" "MALE3" "us3"
+AddVoice "en-gb" "MALE1" "en1"
+AddVoice "en-us" "FEMALE1" "us1"
+AddVoice "en-us" "MALE1" "us2"
+AddVoice "en-us" "MALE2" "us3"
+
+AddVoice "es" "MALE1" "es1"
+AddVoice "es" "MALE2" "es2"
+AddVoice "es" "FEMALE1" "es3"
+AddVoice "es" "MALE3" "es4"
+AddVoice "es-mx" "MALE1" "mx1"
+AddVoice "es-mx" "MALE2" "mx2"
+AddVoice "es-ve" "MALE1" "vz1"
+
+AddVoice "et" "MALE1" "ee1"
+
+AddVoice "fa" "MALE1" "ir1"
+AddVoice "fa" "FEMALE1" "ir2"
+
+AddVoice "fr-ca" "MALE1" "ca1"
+AddVoice "fr-ca" "MALE2" "ca2"
+AddVoice "fr" "MALE1" "fr1"
+AddVoice "fr" "FEMALE1" "fr2"
+AddVoice "fr" "MALE2" "fr3"
+AddVoice "fr" "FEMALE2" "fr4"
+AddVoice "fr-be" "MALE1" "fr5"
+AddVoice "fr" "MALE3" "fr6"
+AddVoice "fr-be" "MALE2" "fr7"
+
+AddVoice "hi" "MALE1" "in1"
+AddVoice "hi" "MALE2" "in2"
+
+AddVoice "hu" "MALE1" "hu1"
+
+AddVoice "hr" "MALE1" "cr1"
+
+AddVoice "id" "MALE1" "id1"
+
+AddVoice "is" "MALE1" "ic1"
+
+AddVoice "it" "MALE1" "it1"
+AddVoice "it" "FEMALE1" "it2"
+AddVoice "it" "MALE2" "it3"
+AddVoice "it" "FEMALE2" "it4"
+
+AddVoice "jp" "MALE1" "jp1"
+AddVoice "jp" "FEMALE1" "jp2"
+AddVoice "jp" "FEMALE2" "jp3"
+
+AddVoice "la" "MALE1" "la1"
+
+AddVoice "lt" "MALE1" "lt1"
+AddVoice "lt" "MALE2" "lt2"
+
+Addvoice "ms" "FEMALE1" "ma1"
+
+# nl1 has a very limited set of diphones and is usable only for reading
+# numbers. Uncomment the next line if you want it.
+# AddVoice "nl" "CHILD-MALE" "nl1"
+AddVoice "nl" "MALE1" "nl2"
+AddVoice "nl" "FEMALE1" "nl3"
+
+AddVoice "mi" "MALE1" "nz1"
+
+AddVoice "pl" "FEMALE1" "pl1"
+
+AddVoice "pt-br" "MALE1" "br1"
+AddVoice "pt-br" "MALE2" "br2"
+AddVoice "pt-br" "MALE3" "br3"
+AddVoice "pt-br" "FEMALE1" "br4"
+AddVoice "pt" "FEMALE1" "pt1"
+
+AddVoice "ro" "MALE1" "ro1"
+
+AddVoice "sv" "MALE1" "sw1"
+AddVoice "sv" "FEMALE1" "sw2"
+
+AddVoice "te" "FEMALE1" "tl1"
+
+AddVoice "tr" "MALE1" "tr1"
+AddVoice "tr" "FEMALE1" "tr2"
+
+# DefaultVoice specifies which $VOICE string should be used if no voice is
+# specified otherwise.
+
+DefaultVoice    "en1"
+
+# These parameters set _rate_, _pitch_, and _volume_ conversion. This is
+# part of the core of the definition of this generic output
+# module for this concrete synthesizer, it's not intended to
+# be modified by common users.
+# The resulting rate (or pitch) has the form:
+#       (speechd_rate * GenericRateMultiply) + GenericRateAdd
+# while speechd_rate is a value between -100 (lowest) and +100 (highest)
+# You have to define some meaningful conversion for each synthesizer
+
+# Here's the mapping from SSIP (Speech Dispatcher) to ESpeak (v1.10):
+#
+#           SSIP Range  SSIP Default    ESpeak/MBROLA Range ESpeak Default
+#           ----------- ------------    ------------         --------------
+# Rate      -100 to 100     0           80 to 320       160
+# Pitch     -100 to 100     0            0 to 99         50
+# Volume    -100 to 100     0            0 to 2          --
+#
+# The SSIP defaults are actually controlled via DefaultRate, DefaultPitch, and
+# DefaultVolume in the speechd.conf file.
+
+GenericRateAdd          160
+GenericPitchAdd         50
+GenericVolumeAdd        1
+
+# (These values are multiplied by 100, because DotConf currently
+# doesn't support floats. So you can write 0.85 as 85 and so on.)
+
+GenericRateMultiply     160
+GenericPitchMultiply    50
+GenericVolumeMultiply   1
+
+# If the client program can't handle floats, you will have to
+# use these two options to force integers as the parameters
+# 1 means force integers, 0 means do nothing (write floats).
+
+GenericRateForceInteger     1
+GenericPitchForceInteger    1
+GenericVolumeForceInteger   0
+
+# Note that SSIP rates < -50 are spoken at -50.
+
+
+# Copyright (C) 2008-2010 Brailcom, o.p.s
+# Copyright (C) 2014 Luke Yelavich <themuso@ubuntu.com>
+# Copyright (C) 2018-2021 Samuel Thibault <samuel.thibault@ens-lyon.org>
+# Copyright (C) 2018 Didier Spaier <didier@slint.fr>
+#
+# This program is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.  See the GNU General Public License for more details (file
+# COPYING in the root directory).
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
--- a/doc/speech-dispatcher.texi
+++ b/doc/speech-dispatcher.texi
@@ -425,8 +425,8 @@ Check the @file{modules/espeak-ng-mbrola
 (resp. @file{modules/espeak-mbrola-generic.conf}) configuration files for the
 @code{AddVoice} lines. If a line for any of the voices you have installed
 (and it is supported by your version of eSpeak NG (resp. eSpeak),
-e.g. @code{ls /usr/share/espeak-ng-data/voices/mb/mb-*}
-(resp. @code{ls /usr/share/espeak-data/voices/mb/mb-*}))
+e.g. @code{ls /usr/lib/*/espeak-ng-data/voices/mb/mb-*}
+(resp. @code{ls /usr/lib/*/espeak-data/voices/mb/mb-*}))
 is not contained here, please add it. Check if @code{GenericExecuteString}
 contains the correct name of your mbrola binary and correct path to its voice
 database.
--- a/config/modules/espeak-mbrola-generic.conf
+++ /dev/null
@@ -1,233 +0,0 @@
-# Espeak mbrola output module is based on the generic plugin for Speech
-# Dispatcher. It means there is no code written explicitly for
-# this plugin, all the specifics are handled in this configuration
-# and we call a simple command line client to perform the actual
-# synthesis. Use this config file with the sd_generic output module.
-
-# Debug turns debugging on or off
-# See speechd.conf for information where debugging information is stored
-Debug 0
-
-# IMPORTANT: The audio output method relies on an audio playback
-# utility (play, aplay, paplay for OSS, ALSA or Pulse)
-# being installed. If this is not the case, consider installing it
-# or replace the $PLAY_COMMAND string in the GenericExecuteString below
-# with play, paplay or similar.
-#
-# GenericExecuteSynth is the shell command that should be
-# executed in order to say some message. This command must
-# stop saying the message on SIGKILL, otherwise it's useless.
-# You can use the variables $LANGUAGE, $VOICE, $PITCH and $RATE
-# which will be substituted for the appropriate value (you
-# can modify this value, see other parameters).
-# The command can be split into more lines, if necessary, using '\'.
-GenericExecuteSynth \
-"printf %s \'$DATA\' | espeak -v mb-$VOICE -s $RATE -p $PITCH $PUNCT -q --stdin --pho | mbrola -v $VOLUME -e /usr/share/mbrola/$VOICE/$VOICE - -.au | $PLAY_COMMAND"
-
-GenericCmdDependency "espeak"
-GenericCmdDependency "mbrola"
-GenericSoundIconFolder "/usr/share/sounds/sound-icons/"
-
-# The following three items control punctuation levels None, Some, and All.
-# Each of these values will be substituted into the $PUNCT variable depending
-# on the value passed to speech dispatcher from applications.
-# Note that if an empty string is specified, then $PUNCT will be blank 
-# which is a default situation for espeak.
- 
-GenericPunctNone ""
-GenericPunctSome "--punct=\"()[]{};:\""
-GenericPunctMost "--punct=\"()[]{};:\""
-GenericPunctAll "--punct"
-
-# GenericStripPunctChars is a list (enclosed in doublequotes) of
-# all the characters that should be replaced by whitespaces in
-# order not to be badly handled by the output module or misinterpreted
-# by shell.
-# GenericStripPunctChars  ""
-
-# If the language you need to pass in $LANGUAGE is different
-# from the standard ISO language code, you can specify
-# which string to use instead. If you wish to use
-# other than ISO charset for the specified language,
-# you can add it's name (as accepted by iconv) as a
-# third parameter in doublequotes.
-
-
-GenericLanguage		  "af" "af" "utf-8"
-GenericLanguage		  "cs" "cs" "utf-8"
-GenericLanguage		  "de" "de" "utf-8"
-GenericLanguage		  "el" "el" "utf-8"
-GenericLanguage		  "en" "en-us" "utf-8"
-GenericLanguage		  "en-gb" "en-gb" "utf-8"
-GenericLanguage		  "en-us" "en-us" "utf-8"
-GenericLanguage		  "es" "es" "utf-8"
-GenericLanguage		  "es-mx" "es-mx" "utf-8"
-GenericLanguage		  "es-ve" "es-ve" "utf-8"
-GenericLanguage		  "et" "et" "utf-8"
-GenericLanguage		  "fa" "fa" "utf-8"
-GenericLanguage		  "fr" "fr" "utf-8"
-GenericLanguage		  "fr-ca" "fr-ca" "utf-8"
-GenericLanguage		  "fr-be" "fr-be" "utf-8"
-GenericLanguage		  "hu" "hu" "utf-8"
-GenericLanguage		  "hr" "hr" "utf-8"
-GenericLanguage		  "id" "id" "utf-8"
-GenericLanguage		  "is" "is" "utf-8"
-GenericLanguage		  "it" "it" "utf-8"
-GenericLanguage		  "la" "la" "utf-8"
-GenericLanguage		  "lt" "lt" "utf-8"
-GenericLanguage		  "nl" "nl" "utf-8"
-GenericLanguage		  "pl" "pl" "utf-8"
-GenericLanguage		  "pt" "pt" "utf-8"
-GenericLanguage		  "pt-br" "pt-br" "utf-8"
-GenericLanguage		  "ro" "ro" "utf-8"
-GenericLanguage		  "sv" "sv" "utf-8"
-GenericLanguage		  "tr" "tr" "utf-8"
-
-# Each voice is available if and only if the following files exist.
-# These files must be listed *before* the voices.
-
-VoiceFileDependency "/usr/share/mbrola/$VOICE/$VOICE"
-VoiceFileDependency "/usr/share/espeak-data/voices/mb/mb-$VOICE"
-
-# AddVoice specifies which $VOICE string should be assigned to
-# each language and symbolic voice name. All the voices you want
-# to use must be specified here. This list will likely not be
-# up-to-date, please check eSpeak documentation and add the voices
-# you want to use.
-
-AddVoice        "af"    "MALE1"       	"af1"
-
-AddVoice        "fr-ca" "MALE1"        "ca1"
-AddVoice        "fr-ca" "MALE2"        "ca2"
-
-AddVoice        "cs"    "MALE1"	      	"cz2"
-
-AddVoice        "de"    "MALE1"         "de4"
-AddVoice        "de"    "MALE2"         "de6"
-AddVoice        "de"    "MALE3"         "de2"
-AddVoice        "de"    "FEMALE1"       "de5"
-AddVoice        "de"    "FEMALE2"       "de7"
-AddVoice        "de"    "FEMALE3"       "de3"
-
-AddVoice        "el"    "MALE1"       	"gr1"
-AddVoice        "el"    "MALE2"       	"gr2"
-
-AddVoice        "en" "MALE1"		"en1"
-AddVoice        "en" "MALE2"		"us2"
-AddVoice        "en" "MALE3"		"us3"
-AddVoice        "en" "FEMALE1"		"us1"
-AddVoice        "en-gb" "MALE1"		"en1"
-AddVoice        "en-us" "MALE1"		"us2"
-AddVoice        "en-us" "MALE2"		"us3"
-AddVoice        "en-us" "FEMALE1"	"us1"
-
-AddVoice        "es"    "MALE1"		"es1"
-AddVoice        "es"    "MALE2"		"es2"
-AddVoice        "es-mx" "MALE1"       	"mx1"
-AddVoice        "es-mx" "MALE2"       	"mx2"
-AddVoice        "es-ve" "MALE1"       	"vz1"
-
-AddVoice        "et"    "MALE1"         "ee1"
-
-AddVoice        "fa"    "MALE1"       	"ir1"
-AddVoice        "fa"    "FEMALE1"       "ir2"
-
-AddVoice        "fr"    "MALE1"         "fr1"
-AddVoice        "fr"    "FEMALE1"       "fr4"
-AddVoice        "fr-be" "MALE1"         "fr5"
-AddVoice        "fr-be" "MALE2"         "fr7"
-
-AddVoice        "hu"    "MALE1"       	"hu1"
-
-AddVoice        "hr"    "MALE1"       	"cr1"
-
-AddVoice        "id"    "MALE1"       	"id1"
-
-AddVoice        "is"    "MALE1"       	"ic1"
-
-AddVoice        "it"    "MALE1"		"it3"
-AddVoice        "it"    "FEMALE1"	"it4"
-
-AddVoice        "la"    "MALE1"       	"la1"
-
-AddVoice        "nl"    "MALE1"       	"nl2"
-
-AddVoice        "pl"    "FEMALE1"       "pl1"
-
-AddVoice        "pt-br" "MALE1"       	"br1"
-AddVoice        "pt-br" "MALE2"       	"br3"
-AddVoice        "pt"    "FEMALE1"       "pt1"
-AddVoice        "pt-br" "FEMALE1"       "br4"
-
-AddVoice        "ro"    "MALE1"	      	"ro1"
-
-AddVoice        "sv"    "MALE1"         "sw1"
-AddVoice        "sv"    "FEMALE1"    	"sw2"
-
-AddVoice        "tr"    "MALE1"         "tr1"
-AddVoice        "tr"    "FEMALE1"       "tr2"
-
-# DefaultVoice specifies which $VOICE string should be used if no voice is
-# specified otherwise.
-
-DefaultVoice    "en1"
-
-# These parameters set _rate_, _pitch_, and _volume_ conversion. This is
-# part of the core of the definition of this generic output
-# module for this concrete synthesizer, it's not intended to
-# be modified by common users.
-# The resulting rate (or pitch) has the form:
-#       (speechd_rate * GenericRateMultiply) + GenericRateAdd
-# while speechd_rate is a value between -100 (lowest) and +100 (highest)
-# You have to define some meaningful conversion for each synthesizer
-
-# Here's the mapping from SSIP (Speech Dispatcher) to ESpeak (v1.10):
-#
-#           SSIP Range  SSIP Default    ESpeak/MBROLA Range ESpeak Default
-#           ----------- ------------    ------------         --------------
-# Rate      -100 to 100     0           80 to 320       160
-# Pitch     -100 to 100     0            0 to 99         50
-# Volume    -100 to 100     0            0 to 2          --
-#
-# The SSIP defaults are actually controlled via DefaultRate, DefaultPitch, and
-# DefaultVolume in the speechd.conf file.
-
-GenericRateAdd          160
-GenericPitchAdd         50
-GenericVolumeAdd        1
-
-# (These values are multiplied by 100, because DotConf currently
-# doesn't support floats. So you can write 0.85 as 85 and so on.)
-
-GenericRateMultiply     160
-GenericPitchMultiply    50
-GenericVolumeMultiply   1
-
-# If the client program can't handle floats, you will have to
-# use these two options to force integers as the parameters
-# 1 means force integers, 0 means do nothing (write floats).
-
-GenericRateForceInteger     1
-GenericPitchForceInteger    1
-GenericVolumeForceInteger   0
-
-# Note that SSIP rates < -50 are spoken at -50.
-
-
-# Copyright (C) 2008-2010 Brailcom, o.p.s
-# Copyright (C) 2014 Luke Yelavich <themuso@ubuntu.com>
-# Copyright (C) 2018-2021 Samuel Thibault <samuel.thibault@ens-lyon.org>
-# Copyright (C) 2018 Didier Spaier <didier@slint.fr>
-#
-# This program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free Software
-# Foundation; either version 2 of the License, or (at your option) any later
-# version.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.  See the GNU General Public License for more details (file
-# COPYING in the root directory).
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <https://www.gnu.org/licenses/>.
--- /dev/null
+++ b/config/modules/espeak-mbrola-generic.conf.in
@@ -0,0 +1,233 @@
+# Espeak mbrola output module is based on the generic plugin for Speech
+# Dispatcher. It means there is no code written explicitly for
+# this plugin, all the specifics are handled in this configuration
+# and we call a simple command line client to perform the actual
+# synthesis. Use this config file with the sd_generic output module.
+
+# Debug turns debugging on or off
+# See speechd.conf for information where debugging information is stored
+Debug 0
+
+# IMPORTANT: The audio output method relies on an audio playback
+# utility (play, aplay, paplay for OSS, ALSA or Pulse)
+# being installed. If this is not the case, consider installing it
+# or replace the $PLAY_COMMAND string in the GenericExecuteString below
+# with play, paplay or similar.
+#
+# GenericExecuteSynth is the shell command that should be
+# executed in order to say some message. This command must
+# stop saying the message on SIGKILL, otherwise it's useless.
+# You can use the variables $LANGUAGE, $VOICE, $PITCH and $RATE
+# which will be substituted for the appropriate value (you
+# can modify this value, see other parameters).
+# The command can be split into more lines, if necessary, using '\'.
+GenericExecuteSynth \
+"printf %s \'$DATA\' | espeak -v mb-$VOICE -s $RATE -p $PITCH $PUNCT -q --stdin --pho | mbrola -v $VOLUME -e /usr/share/mbrola/$VOICE/$VOICE - -.au | $PLAY_COMMAND"
+
+GenericCmdDependency "espeak"
+GenericCmdDependency "mbrola"
+GenericSoundIconFolder "/usr/share/sounds/sound-icons/"
+
+# The following three items control punctuation levels None, Some, and All.
+# Each of these values will be substituted into the $PUNCT variable depending
+# on the value passed to speech dispatcher from applications.
+# Note that if an empty string is specified, then $PUNCT will be blank
+# which is a default situation for espeak.
+
+GenericPunctNone ""
+GenericPunctSome "--punct=\"()[]{};:\""
+GenericPunctMost "--punct=\"()[]{};:\""
+GenericPunctAll "--punct"
+
+# GenericStripPunctChars is a list (enclosed in doublequotes) of
+# all the characters that should be replaced by whitespaces in
+# order not to be badly handled by the output module or misinterpreted
+# by shell.
+# GenericStripPunctChars  ""
+
+# If the language you need to pass in $LANGUAGE is different
+# from the standard ISO language code, you can specify
+# which string to use instead. If you wish to use
+# other than ISO charset for the specified language,
+# you can add it's name (as accepted by iconv) as a
+# third parameter in doublequotes.
+
+
+GenericLanguage		  "af" "af" "utf-8"
+GenericLanguage		  "cs" "cs" "utf-8"
+GenericLanguage		  "de" "de" "utf-8"
+GenericLanguage		  "el" "el" "utf-8"
+GenericLanguage		  "en" "en-us" "utf-8"
+GenericLanguage		  "en-gb" "en-gb" "utf-8"
+GenericLanguage		  "en-us" "en-us" "utf-8"
+GenericLanguage		  "es" "es" "utf-8"
+GenericLanguage		  "es-mx" "es-mx" "utf-8"
+GenericLanguage		  "es-ve" "es-ve" "utf-8"
+GenericLanguage		  "et" "et" "utf-8"
+GenericLanguage		  "fa" "fa" "utf-8"
+GenericLanguage		  "fr" "fr" "utf-8"
+GenericLanguage		  "fr-ca" "fr-ca" "utf-8"
+GenericLanguage		  "fr-be" "fr-be" "utf-8"
+GenericLanguage		  "hu" "hu" "utf-8"
+GenericLanguage		  "hr" "hr" "utf-8"
+GenericLanguage		  "id" "id" "utf-8"
+GenericLanguage		  "is" "is" "utf-8"
+GenericLanguage		  "it" "it" "utf-8"
+GenericLanguage		  "la" "la" "utf-8"
+GenericLanguage		  "lt" "lt" "utf-8"
+GenericLanguage		  "nl" "nl" "utf-8"
+GenericLanguage		  "pl" "pl" "utf-8"
+GenericLanguage		  "pt" "pt" "utf-8"
+GenericLanguage		  "pt-br" "pt-br" "utf-8"
+GenericLanguage		  "ro" "ro" "utf-8"
+GenericLanguage		  "sv" "sv" "utf-8"
+GenericLanguage		  "tr" "tr" "utf-8"
+
+# Each voice is available if and only if the following files exist.
+# These files must be listed *before* the voices.
+
+VoiceFileDependency "/usr/share/mbrola/$VOICE/$VOICE"
+VoiceFileDependency "/usr/lib/$DEB_HOST_MULTIARCH/espeak-data/voices/mb/mb-$VOICE"
+
+# AddVoice specifies which $VOICE string should be assigned to
+# each language and symbolic voice name. All the voices you want
+# to use must be specified here. This list will likely not be
+# up-to-date, please check eSpeak documentation and add the voices
+# you want to use.
+
+AddVoice        "af"    "MALE1"       	"af1"
+
+AddVoice        "fr-ca" "MALE1"        "ca1"
+AddVoice        "fr-ca" "MALE2"        "ca2"
+
+AddVoice        "cs"    "MALE1"	      	"cz2"
+
+AddVoice        "de"    "MALE1"         "de4"
+AddVoice        "de"    "MALE2"         "de6"
+AddVoice        "de"    "MALE3"         "de2"
+AddVoice        "de"    "FEMALE1"       "de5"
+AddVoice        "de"    "FEMALE2"       "de7"
+AddVoice        "de"    "FEMALE3"       "de3"
+
+AddVoice        "el"    "MALE1"       	"gr1"
+AddVoice        "el"    "MALE2"       	"gr2"
+
+AddVoice        "en" "MALE1"		"en1"
+AddVoice        "en" "MALE2"		"us2"
+AddVoice        "en" "MALE3"		"us3"
+AddVoice        "en" "FEMALE1"		"us1"
+AddVoice        "en-gb" "MALE1"		"en1"
+AddVoice        "en-us" "MALE1"		"us2"
+AddVoice        "en-us" "MALE2"		"us3"
+AddVoice        "en-us" "FEMALE1"	"us1"
+
+AddVoice        "es"    "MALE1"		"es1"
+AddVoice        "es"    "MALE2"		"es2"
+AddVoice        "es-mx" "MALE1"       	"mx1"
+AddVoice        "es-mx" "MALE2"       	"mx2"
+AddVoice        "es-ve" "MALE1"       	"vz1"
+
+AddVoice        "et"    "MALE1"         "ee1"
+
+AddVoice        "fa"    "MALE1"       	"ir1"
+AddVoice        "fa"    "FEMALE1"       "ir2"
+
+AddVoice        "fr"    "MALE1"         "fr1"
+AddVoice        "fr"    "FEMALE1"       "fr4"
+AddVoice        "fr-be" "MALE1"         "fr5"
+AddVoice        "fr-be" "MALE2"         "fr7"
+
+AddVoice        "hu"    "MALE1"       	"hu1"
+
+AddVoice        "hr"    "MALE1"       	"cr1"
+
+AddVoice        "id"    "MALE1"       	"id1"
+
+AddVoice        "is"    "MALE1"       	"ic1"
+
+AddVoice        "it"    "MALE1"		"it3"
+AddVoice        "it"    "FEMALE1"	"it4"
+
+AddVoice        "la"    "MALE1"       	"la1"
+
+AddVoice        "nl"    "MALE1"       	"nl2"
+
+AddVoice        "pl"    "FEMALE1"       "pl1"
+
+AddVoice        "pt-br" "MALE1"       	"br1"
+AddVoice        "pt-br" "MALE2"       	"br3"
+AddVoice        "pt"    "FEMALE1"       "pt1"
+AddVoice        "pt-br" "FEMALE1"       "br4"
+
+AddVoice        "ro"    "MALE1"	      	"ro1"
+
+AddVoice        "sv"    "MALE1"         "sw1"
+AddVoice        "sv"    "FEMALE1"    	"sw2"
+
+AddVoice        "tr"    "MALE1"         "tr1"
+AddVoice        "tr"    "FEMALE1"       "tr2"
+
+# DefaultVoice specifies which $VOICE string should be used if no voice is
+# specified otherwise.
+
+DefaultVoice    "en1"
+
+# These parameters set _rate_, _pitch_, and _volume_ conversion. This is
+# part of the core of the definition of this generic output
+# module for this concrete synthesizer, it's not intended to
+# be modified by common users.
+# The resulting rate (or pitch) has the form:
+#       (speechd_rate * GenericRateMultiply) + GenericRateAdd
+# while speechd_rate is a value between -100 (lowest) and +100 (highest)
+# You have to define some meaningful conversion for each synthesizer
+
+# Here's the mapping from SSIP (Speech Dispatcher) to ESpeak (v1.10):
+#
+#           SSIP Range  SSIP Default    ESpeak/MBROLA Range ESpeak Default
+#           ----------- ------------    ------------         --------------
+# Rate      -100 to 100     0           80 to 320       160
+# Pitch     -100 to 100     0            0 to 99         50
+# Volume    -100 to 100     0            0 to 2          --
+#
+# The SSIP defaults are actually controlled via DefaultRate, DefaultPitch, and
+# DefaultVolume in the speechd.conf file.
+
+GenericRateAdd          160
+GenericPitchAdd         50
+GenericVolumeAdd        1
+
+# (These values are multiplied by 100, because DotConf currently
+# doesn't support floats. So you can write 0.85 as 85 and so on.)
+
+GenericRateMultiply     160
+GenericPitchMultiply    50
+GenericVolumeMultiply   1
+
+# If the client program can't handle floats, you will have to
+# use these two options to force integers as the parameters
+# 1 means force integers, 0 means do nothing (write floats).
+
+GenericRateForceInteger     1
+GenericPitchForceInteger    1
+GenericVolumeForceInteger   0
+
+# Note that SSIP rates < -50 are spoken at -50.
+
+
+# Copyright (C) 2008-2010 Brailcom, o.p.s
+# Copyright (C) 2014 Luke Yelavich <themuso@ubuntu.com>
+# Copyright (C) 2018-2021 Samuel Thibault <samuel.thibault@ens-lyon.org>
+# Copyright (C) 2018 Didier Spaier <didier@slint.fr>
+#
+# This program is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.  See the GNU General Public License for more details (file
+# COPYING in the root directory).
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
