diff options
author | Solomon Peachy <pizza@shaftnet.org> | 2020-07-10 19:13:51 -0400 |
---|---|---|
committer | Solomon Peachy <pizza@shaftnet.org> | 2020-07-10 23:28:25 +0000 |
commit | 711bff47b74641c888de59c269ed76e99f16a239 (patch) | |
tree | b886669275302b8b662ad5ad48256e99eff47a1c | |
parent | c914b148e5137c60561028e09859e2747ff6f3ad (diff) | |
download | rockbox-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-x | tools/voice.pl | 31 |
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 | ||
94 | my %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 |
96 | sub init_tts { | 110 | sub 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"); |