The procedures tts_allcaps_beep, tts_split_caps, and tts_capitalize had brackets in expressions, but parentheses were needed. TCL tries to do command substitution when these procedures are invoked with an argument of 0. You can see what I mean by using the TCL interpreter: tcl ./servers/espeak % tts_capitalize 0 # Produces an error when TCL tries to do command substitution. % tts_split_caps 0 # same % tts_allcaps_beep 0 # same This is fixed by my diff. Users probably want to disable dtk-split-caps when using ESpeak. When dtk-split-caps is enabled, ESpeak renders camel-cased identifiers thusly. camelCasedName produces the speech "camel capital cased capital name". That is a feature. However, if you disable dtk-split-caps, ESpeak renders camelCasedName as "camel cased name". It may indicate capitals with pitch or beeps, depending on the settings of dtk-capitalize and dtk-allcaps-beep. Regardless, ESpeak always converts camelCasedName into three distinct tokens. I changed the two procedures that set speech rate. tts_speech_rate and r now use the setRate procedure, which was already defined in linux-espeak/tclespeak.cpp. This change means that the TTS server no longer needs to send <prosody rate=...> SSML tags to control ESpeak's speaking rate. Regards, -- Chris
Index: servers/espeak
===================================================================
--- servers/espeak (revision 5920)
+++ servers/espeak (working copy)
@@ -213,19 +213,12 @@
return ""
}
-proc convert_speech_rate {rate} {
- global tts
-
- set value [ expr ( int (0.0606 * $rate))/10.0 ]
- return $value
-}
-
proc tts_set_speech_rate {rate} {
global tts
set factor $tts(char_factor)
set tts(speech_rate) $rate
- say "<prosody rate=\"[convert_speech_rate $rate]\">"
+ setRate 0 $rate
service
return ""
}
@@ -246,10 +239,9 @@
global langsynth
service
- set r $tts(speech_rate)
set la $langcode(current)
- set prefix "<voice xml:lang=\"$la\" gender=\"male\" variant=\"1\"><prosody rate=\"[convert_speech_rate $r]\">"
+ set prefix "<voice xml:lang=\"$la\" gender=\"male\" variant=\"1\">"
regsub -all {\[\*\]} $text { } text
synth " $prefix $text"
service
@@ -261,10 +253,8 @@
global langcode
global langsynth
- set r $tts(speech_rate)
set la $langcode(current)
- set r2 [ convert_speech_rate $r ]
- set prefix "<voice xml:lang=\"$la\" gender=\"male\" variant=\"1\"><prosody rate=\"$r2\">"
+ set prefix "<voice xml:lang=\"$la\" gender=\"male\" variant=\"1\">"
if {[regexp {[A-Z]} $text]} {
# pitch instead of 80%, high which could be 75%.
set prefix "$prefix <prosody pitch=\"high\">"
@@ -341,7 +331,7 @@
set tts(capitalize) 0
caps "spelling"
} else {
- if { [ $tts(capitalize) == 0 ] && [ $tts(allcaps_beep) == 0 ] } {
+ if { ( $tts(capitalize) == 0 ) && ( $tts(allcaps_beep) == 0 ) } {
caps "none"
}
}
@@ -359,7 +349,7 @@
set tts(allcaps_beep) 0
caps "pitch"
} else {
- if { [ $tts(split_caps) == 0 ] && [ $tts(allcaps_beep) == 0 ] } {
+ if { ( $tts(split_caps) == 0 ) && ( $tts(allcaps_beep) == 0 ) } {
caps "none"
}
}
@@ -378,7 +368,7 @@
set tts(capitalize) 0
caps "tone"
} else {
- if { [ $tts(split_caps) == 0 ] && [ $tts(capitalize) == 0 ] } {
+ if { ( $tts(split_caps) == 0 ) && ( $tts(capitalize) == 0 ) } {
caps "none"
}
}
@@ -397,7 +387,7 @@
proc r {rate} {
global queue tts
- set queue($tts(q_tail)) [list s "<prosody rate=\"[convert_speech_rate $rate]\">"]
+ set queue($tts(q_tail)) [list r $rate]
incr tts(q_tail)
return ""
}
@@ -442,11 +432,10 @@
set tts(talking?) 1
set tts(not_stopped) 1
- set r $tts(speech_rate)
set length [queue_length]
set la $langcode(current)
- set prefix "<voice xml:lang=\"$la\" gender=\"male\" variant=\"1\"><prosody rate=\"[convert_speech_rate $r]\">"
+ set prefix "<voice xml:lang=\"$la\" gender=\"male\" variant=\"1\">"
loop index 0 $length {
set event [queue_remove]
@@ -470,6 +459,11 @@
eval beep $event
}
}
+ r {
+
+# The first argument to setRate is ignored.
+ setRate 0 [lindex $event 1]
+ }
}
if {$tts(talking?) == 0} {break;}
}
If you have questions about this archive or had problems using it, please send mail to:
priestdo@xxxxxxxxxxx No Soliciting!Emacspeak List Archive | 2007 | 2006 | 2005 | 2004 | 2003 | 2002 | 2001 | 2000 | 1999 | 1998 | Pre 1998