espeakup: Voice change after Ctrl+F7 => Crtl+F2 if it is not a language
Didier Spaier
didier at slint.fr
Sun Mar 10 08:27:17 EDT 2019
On 10/03/2019 12:10, Samuel Thibault wrote:
> I guess you meant -V, not -v ?
Yes
> I am actually surprised that it's that way, what I see would be the
> converse: reinitialize_espeak() uses espeak_SetVoiceByName (i.e. fr-fr
> only would work).
However it behaves like I wrote
>> I have seen this commit:
>> https://github.com/williamh/espeakup/commit/ee099174d849e32bf7b555e458963d27f84c64b2
>> "Allow a voice to be selected by language name"
>> but do not know if/why this could be related to that.
>
> Because it brings two ways of setting the voice: either by language or
> by name.
>
> I'd say synth_t's char *voice field should be replaced by a espeak_VOICE
> voice_select field, and make set_voice fill it before just always
> calling espeak_SetVoiceByProperties(), trying to use the "name" member
> before trying to use the "language" member. reinitialize_espeak()
> then just has to call espeak_SetVoiceByProperties on it instead of
> espeak_SetVoiceByName.
>
> Could you have a look at doing that?
Only after the release of Slint64-14.2.1.2.
Meanwhile, I will inform users and tell them to either
run "service restart espeakup" when they are back to the tty
or set voice=<some language name> in /etc/espeakup.conf
This is still an inconvenience.
FYI I attach the script that runs at startup if executable
and /etc/espeakup.conf. You will see that I have borrowed some
code snippets to a Debian installer ;)
-------------- next part --------------
#!/bin/sh
if grep -q speakup /proc/cmdline; then
exit
fi
# Create '/dev/(soft)synth' if not present
(cd /dev
if [ ! -c /dev/softsynth ]; then
mknod softsynth c 10 26
fi
if [ ! -c /dev/synth ]; then
mknod synth c 10 25
fi
)
# Load the software synthesizer
echo "soft" > /sys/accessibility/speakup/synth
sleep 1
# Permissions
chmod 666 /sys/accessibility/speakup/soft/*
echo 1 > /sys/accessibility/speakup/soft/direct
if [ "$LANG" = "" ]; then
. /etc/profile.d/lang.sh
fi
# Starts/stops/restart espeakup
set_voice () {
lang=`echo $LANG | sed 's/_.*//'`
country=`echo $LANG | sed 's/.*_//;s/\..*//;s/@.*//' | tr A-Z a-z`
if [ "$lang" = gl ]; then
# Not supported by espeak yet, but pt should be fine enough, better
# than English anyway
# Comment above from Debian. We don't propose gv in Slint yet, but
# maybe later ?
lang=pt
fi
if grep -qr "^language $lang-$country$" /usr/share/espeak-ng-data/lang; then
VOICE="$lang-$country"
elif grep -qr "^language $lang$" /usr/share/espeak-ng-data/lang; then
VOICE="$lang"
else
VOICE=en
fi
echo $VOICE > /tmp/espeakup_default_voice
}
set_voice
DEFAULTVOICE=$(cat /tmp/espeakup_default_voice)
rm /tmp/espeakup_default_voice
espeakup_start() {
[ "$LANG" = "" ] && . /etc/profile.d/lang.sh
if [ -f /etc/espeakup.conf ]; then
. /etc/espeakup.conf
if [ ! "$rate" = "" ]; then
echo $rate > /sys/accessibility/speakup/soft/rate
else
echo 2 > /sys/accessibility/speakup/soft/rate
fi
if [ ! "$vol" = "" ]; then
echo $vol > /sys/accessibility/speakup/soft/vol
else
echo 4 > /sys/accessibility/speakup/soft/vol
fi
if [ ! "$pitch" = "" ]; then
echo $pitch > /sys/accessibility/speakup/soft/pitch
else
echo 4 > /sys/accessibility/speakup/soft/pitch
fi
if [ "$voice" = "" ]; then
voice=$DEFAULTVOICE
fi
if [ "$ALSA_CARD" = "" ]; then
ALSA_CARD=0
fi
else
voice=$DEFAULTVOICE
echo 2 > /sys/accessibility/speakup/soft/rate
echo 4 > /sys/accessibility/speakup/soft/vol
echo 3 > /sys/accessibility/speakup/soft/pitch
ALSA_CARD=0
fi
if [ ! "`ps -C espeakup --noheaders|wc -l`" = "0" ]; then
echo "espeakup is already started."
espeakup_status
exit
fi
if [ -x /usr/bin/espeakup ]; then
echo "Starting espeakup"
ALSA_CARD=$ALSA_CARD /usr/bin/espeakup -V $voice
else
echo "/usr/bin/espeakup not found or non executable"
fi
}
espeakup_stop() {
NBPROC="`ps -C espeakup --noheaders|wc -l`"
if [ ! "$NBPROC" = "0" ]; then
sleep 1
PID="`ps -C espeakup --noheaders -o pid`"
kill -s 9 $PID
# Restore the defaults
echo 2 > /sys/accessibility/speakup/soft/rate
echo 5 > /sys/accessibility/speakup/soft/vol
echo 3 > /sys/accessibility/speakup/soft/pitch
fi
}
espeakup_restart() {
espeakup_stop
sleep 2
espeakup_start
}
espeakup_status() {
NBPROC="`ps -C espeakup --noheaders|wc -l`"
if [ "$NBPROC" = "0" ]; then
echo "espeakup is not started"
elif [ "$NBPROC" = "1" ]; then
echo "An espeakup daemon is running, PID: `ps -C espeakup --no-headers -o pid`"
else
ps -C espeakup -o pid,args
fi
}
case "$1" in
start)
espeakup_start;;
stop)
espeakup_stop;;
restart)
espeakup_restart;;
status)
espeakup_status;;
*)
echo "Usage: $0 {start|stop|restart|status}";;
esac
-------------- next part --------------
# Configuration file for espeakup
# To provide a value that differs from the default one, remove the first
# character '#' from the line and modify the value.
# Values outside the authorized range are silently ignored.
# Your modifications will be applied when espeakup will be restarted
# For that, save the modified file then either reboot or type as root:
# /etc/rc.d/rc.espeakup restart
# ***Voice
# The voice used should match the language in use. If a voice is set
# below, it will be used, else it will be chosen to match the value of
# the $LANG environment variable.
# To know available values type this command:
# spd-list -ls espeak-ng
# You may prefer to use one of the mbrola voices, that sound more
# natural. To list the installed ones type:
# spd-say -o espeak-ng-mbrola-generic -L
# The voice name is in the first column and preceded by 'mb-'
# For instance to use a French female voice you would write:
# voice=mb-fr2
#
voice=fr-fr
# ***Rate or speech speed
# minimum:0 maximum:9
#rate=2
# ***Sound volume
#minimum:0 maximum:9
# If you set it to 0 you won't hear anything...
#vol=4
# ***Pitch adjustment: a bigger value gives a more acute sound
#
#minimum:0 maximum:9
#pitch=3
# You only need to set the value of ALSA_CARD if you have several sound
# cards and want to specify which one espeakup should send the speech
# to, otherwise the default sound card will be used. The value should be
# a number in a range beginning with 0, like for instance ALSA_CARD=1 or
# the corresponding id, preferable as the sounds cards number can
# change, like ALSA_CARD=PCH. To know the number and id of your cards,#
# type: list-cards. To know more about your sound cards, type: aplay -l
# or aplay -L
# By default ALSA_CARD=0 (the first sound card), but if you used
# espeakup during installation, ALSA_CARD will be initially set to the
# id of the card you selected at the beginning of Slint installation
#
ALSA_CARD=PCH
More information about the Speakup
mailing list