summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSolomon Peachy <pizza@shaftnet.org>2020-07-10 19:13:51 -0400
committerSolomon Peachy <pizza@shaftnet.org>2020-07-10 23:28:25 +0000
commit711bff47b74641c888de59c269ed76e99f16a239 (patch)
treeb886669275302b8b662ad5ad48256e99eff47a1c
parentc914b148e5137c60561028e09859e2747ff6f3ad (diff)
downloadrockbox-711bff47b74641c888de59c269ed76e99f16a239.tar.gz
rockbox-711bff47b74641c888de59c269ed76e99f16a239.zip
voice: Enhance 'espeak' to automatically pick the language + voice
Most of the 'perfect' or 'good' translations are covered. Also, don't override user-specified voice Change-Id: I837bd67e9df2b8bcc7e020f12a2f411c9175565b
-rwxr-xr-xtools/voice.pl31
1 files changed, 24 insertions, 7 deletions
diff --git a/tools/voice.pl b/tools/voice.pl
index e7e1346886..edb2c9f233 100755
--- a/tools/voice.pl
+++ b/tools/voice.pl
@@ -91,6 +91,20 @@ my %gtts_lang_map = (
91 'srpski' => 'sr', 91 'srpski' => 'sr',
92); 92);
93 93
94my %espeak_lang_map = (
95 'english' => 'en-gb', # Always first, it's the golden master
96 'deutsch' => 'de',
97 'english-us' => 'en-us',
98 'francais' => 'fr-fr',
99# 'greek' => 'gr',
100 'italiano' => 'it',
101 'norsk' => 'no',
102 'polski' => 'pl',
103 'russian' => 'ru',
104 'slovak' => 'sk',
105 'srpski' => 'sr',
106);
107
94# Initialize TTS engine. May return an object or value which will be passed 108# Initialize TTS engine. May return an object or value which will be passed
95# to voicestring and shutdown_tts 109# to voicestring and shutdown_tts
96sub init_tts { 110sub init_tts {
@@ -108,8 +122,8 @@ sub init_tts {
108 $SIG{INT} = sub { kill TERM => $pid; print("foo"); panic_cleanup(); }; 122 $SIG{INT} = sub { kill TERM => $pid; print("foo"); panic_cleanup(); };
109 $SIG{KILL} = sub { kill TERM => $pid; print("boo"); panic_cleanup(); }; 123 $SIG{KILL} = sub { kill TERM => $pid; print("boo"); panic_cleanup(); };
110 $ret{"pid"} = $pid; 124 $ret{"pid"} = $pid;
111 if (defined($festival_lang_map{$language})) { 125 if (defined($festival_lang_map{$language}) && $tts_engine_opts !~ /--language/) {
112 $ret{"ttsoptions"} = "-l $festival_lang_map{$language} "; 126 $ret{"ttsoptions"} = "--language $festival_lang_map{$language} ";
113 } 127 }
114 } elsif ($tts_engine eq 'sapi') { 128 } elsif ($tts_engine eq 'sapi') {
115 my $toolsdir = dirname($0); 129 my $toolsdir = dirname($0);
@@ -133,10 +147,15 @@ sub init_tts {
133 "vendor" => $vendor); 147 "vendor" => $vendor);
134 } elsif ($tts_engine eq 'gtts') { 148 } elsif ($tts_engine eq 'gtts') {
135 $ret{"format"} = 'mp3'; 149 $ret{"format"} = 'mp3';
136 if (defined($gtts_lang_map{$language})) { 150 if (defined($gtts_lang_map{$language}) && $tts_engine_opts !~ /-l/) {
137 $ret{"ttsoptions"} = "-l $gtts_lang_map{$language} "; 151 $ret{"ttsoptions"} = "-l $gtts_lang_map{$language} ";
138 } 152 }
153 } elsif ($tts_engine eq 'espeak') {
154 if (defined($espeak_lang_map{$language}) && $tts_engine_opts !~ /-v/) {
155 $ret{"ttsoptions"} = "-v$gtts_lang_map{$language} ";
156 }
139 } 157 }
158
140 return \%ret; 159 return \%ret;
141} 160}
142 161
@@ -207,11 +226,9 @@ sub voicestring {
207 system($cmd); 226 system($cmd);
208 } 227 }
209 elsif ($name eq 'espeak') { 228 elsif ($name eq 'espeak') {
210 $cmd = "espeak $tts_engine_opts -w \"$output\""; 229 $cmd = "espeak $tts_engine_opts -w \"$output\" \"$string\"";
211 print("> $cmd\n") if $verbose; 230 print("> $cmd\n") if $verbose;
212 open(ESPEAK, "| $cmd"); 231 system($cmd);
213 print ESPEAK $string . "\n";
214 close(ESPEAK);
215 } 232 }
216 elsif ($name eq 'sapi') { 233 elsif ($name eq 'sapi') {
217 print({$$tts_object{"stdin"}} "SPEAK\t$output\t$string\r\n"); 234 print({$$tts_object{"stdin"}} "SPEAK\t$output\t$string\r\n");