Rockbox open source high quality audio player as a Music Player Daemon
mpris rockbox mpd libadwaita audio rust zig deno
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

voice: Fix the 'gtts' voice generation backend.

* Language and dialect need to be specified separately
* Convert the mp3 files generated by gtts into wav into rbspeex
(Uses ffmpeg currently)

Change-Id: I6d7b9494e70a61537519221522202ea28469cc70

+33 -26
+2 -2
tools/builds.pm
··· 536 536 'engines' => { 537 537 'festival' => '--language english', 538 538 'espeak' => '-ven-gb -k 5', 539 - 'gtts' => '-l en-gb', 539 + 'gtts' => '-l en -t co.uk', 540 540 }, 541 541 'enabled' => 1, 542 542 }, ··· 571 571 'engines' => { 572 572 'festival' => '--language english', 573 573 'espeak' => '-ven-us -k 5', 574 - 'gtts' => '-l en-us', 574 + 'gtts' => '-l en -t us', 575 575 }, 576 576 'enabled' => 1, 577 577 },
+31 -24
tools/voice.pl
··· 81 81 ); 82 82 83 83 my %gtts_lang_map = ( 84 - 'english' => 'en-gb', # Always first, it's the golden master 85 - 'czech' => 'cs', # not supported 86 - 'dansk' => 'da', 87 - 'deutsch' => 'de', 88 - 'english-us' => 'en-us', 89 - 'espanol' => 'es-es', 90 - 'francais' => 'fr-fr', 91 - 'greek' => 'el', 92 - 'magyar' => 'hu', 93 - 'italiano' => 'it', 94 - 'nederlands' => 'nl', 95 - 'norsk' => 'no', 96 - 'polski' => 'pl', 97 - 'russian' => 'ru', 98 - 'slovak' => 'sk', 99 - 'srpski' => 'sr', 100 - 'svenska' => 'sv', 101 - 'turkce' => 'tr', 84 + 'english' => '-l en -t co.uk', # Always first, it's the golden master 85 + 'czech' => '-l cs', # not supported 86 + 'dansk' => '-l da', 87 + 'deutsch' => '-l de', 88 + 'english-us' => '-l en -t us', 89 + 'espanol' => '-l es', 90 + 'francais' => '-l fr', 91 + 'greek' => '-l el', 92 + 'magyar' => '-l hu', 93 + 'italiano' => '-l it', 94 + 'nederlands' => '-l nl', 95 + 'norsk' => '-l no', 96 + 'polski' => '-l pl', 97 + 'russian' => '-l ru', 98 + 'slovak' => '-l sk', 99 + 'srpski' => '-l sr', 100 + 'svenska' => '-l sv', 101 + 'turkce' => '-l tr', 102 102 ); 103 103 104 104 my %espeak_lang_map = ( ··· 167 167 } elsif ($tts_engine eq 'gtts') { 168 168 $ret{"format"} = 'mp3'; 169 169 if (defined($gtts_lang_map{$language}) && $tts_engine_opts !~ /-l/) { 170 - $ret{"ttsoptions"} = "-l $gtts_lang_map{$language} "; 170 + $ret{"ttsoptions"} = " $gtts_lang_map{$language} "; 171 171 } 172 172 } elsif ($tts_engine eq 'espeak' || $tts_engine eq 'espeak-ng') { 173 173 if (defined($espeak_lang_map{$language}) && $tts_engine_opts !~ /-v/) { ··· 403 403 $voice = $1; 404 404 if ($id !~ /^NOT_USED_.*$/ && $voice ne "") { 405 405 my $wav = $id . '.wav'; 406 - my $enc = $id . '.mp3'; 406 + my $enc = $id . '.enc'; 407 + my $format = $tts_object->{'format'}; 407 408 408 409 # Print some progress information 409 410 if (++$i % 10 == 0 and !$verbose) { ··· 415 416 416 417 # If we have a pool of snippets, see if the string exists there first 417 418 if (defined($ENV{'POOL'})) { 418 - $pool_file = sprintf("%s/%s-%s.mp3", $ENV{'POOL'}, 419 + $pool_file = sprintf("%s/%s-%s.enc", $ENV{'POOL'}, 419 420 md5_hex(Encode::encode_utf8("$voice $tts_engine $tts_engine_opts $encoder_opts")), 420 421 $language); 421 422 if (-f $pool_file) { ··· 431 432 copy(dirname($0)."/VOICE_PAUSE.wav", $wav); 432 433 } else { 433 434 voicestring($voice, $wav, $tts_engine_opts, $tts_object); 434 - if ($tts_object->{'format'} eq "wav") { 435 + if ($format eq "wav") { 435 436 wavtrim($wav, 500, $tts_object); 436 437 # 500 seems to be a reasonable default for now 437 438 } 438 439 } 439 - if ($tts_object->{'format'} eq "wav" || $id eq "VOICE_PAUSE") { 440 + # Convert from mp3 to wav so we can use rbspeex 441 + if ($format eq "mp3") { 442 + system("ffmpeg -loglevel 0 -i $wav $id$wav"); 443 + rename("$id$wav","$wav"); 444 + $format = "wav"; 445 + } 446 + if ($format eq "wav" || $id eq "VOICE_PAUSE") { 440 447 encodewav($wav, $enc, $encoder, $encoder_opts, $tts_object); 441 448 } else { 442 449 copy($wav, $enc); ··· 483 490 } 484 491 485 492 sub deleteencs() { 486 - for (glob('*.mp3')) { 493 + for (glob('*.enc')) { 487 494 unlink($_); 488 495 } 489 496 for (glob('*.wav')) {