forked from len0rd/rockbox
Initial attempt at talkclip generation in voice.pl. Add some quoting to a few functions to avoid problems.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15645 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
56822cacdf
commit
4295149483
1 changed files with 54 additions and 6 deletions
|
|
@ -24,6 +24,7 @@ use vars qw($V $C $t $l $e $E $s $S $i $v);
|
||||||
use IPC::Open2;
|
use IPC::Open2;
|
||||||
use IPC::Open3;
|
use IPC::Open3;
|
||||||
use Digest::MD5 qw(md5_hex);
|
use Digest::MD5 qw(md5_hex);
|
||||||
|
use DirHandle;
|
||||||
|
|
||||||
sub printusage {
|
sub printusage {
|
||||||
print <<USAGE
|
print <<USAGE
|
||||||
|
|
@ -234,7 +235,7 @@ sub voicestring {
|
||||||
print({$$tts_object{"stdin"}} "SPEAK\t$output\t$string\r\n");
|
print({$$tts_object{"stdin"}} "SPEAK\t$output\t$string\r\n");
|
||||||
}
|
}
|
||||||
case "swift" {
|
case "swift" {
|
||||||
$cmd = "swift $tts_engine_opts -o $output \"$string\"";
|
$cmd = "swift $tts_engine_opts -o \"$output\" \"$string\"";
|
||||||
print("> $cmd\n") if $verbose;
|
print("> $cmd\n") if $verbose;
|
||||||
system($cmd);
|
system($cmd);
|
||||||
}
|
}
|
||||||
|
|
@ -251,7 +252,7 @@ sub wavtrim {
|
||||||
print({$$tts_object{"stdin"}} "EXEC\t$cmd\r\n");
|
print({$$tts_object{"stdin"}} "EXEC\t$cmd\r\n");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
my $cmd = dirname($0) . "/wavtrim $file $threshold";
|
my $cmd = dirname($0) . "/wavtrim \"$file\" $threshold";
|
||||||
print("> $cmd\n") if $verbose;
|
print("> $cmd\n") if $verbose;
|
||||||
`$cmd`;
|
`$cmd`;
|
||||||
}
|
}
|
||||||
|
|
@ -402,6 +403,49 @@ sub panic_cleanup {
|
||||||
die "moo";
|
die "moo";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Generate .talk clips
|
||||||
|
sub gentalkclips {
|
||||||
|
our $verbose;
|
||||||
|
my ($dir, $tts_object, $encoder, $encoder_opts, $tts_engine_opts, $i) = @_;
|
||||||
|
my $d = new DirHandle $dir;
|
||||||
|
while (my $file = $d->read) {
|
||||||
|
my ($voice, $wav, $mp3);
|
||||||
|
$voice = $file;
|
||||||
|
$wav = sprintf("%s.talk.wav", $path);
|
||||||
|
|
||||||
|
# Print some progress information
|
||||||
|
if (++$i % 10 == 0 and !$verbose) {
|
||||||
|
print(".");
|
||||||
|
}
|
||||||
|
|
||||||
|
# Convert to a complete path
|
||||||
|
my $path = sprintf("%s/%s", $dir, $file);
|
||||||
|
# Ignore dot-dirs and talk files
|
||||||
|
if ($file eq '.' || $file eq '..' || $file =~ /\.talk$/) {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
# Element is a dir
|
||||||
|
if ( -d $path) {
|
||||||
|
gentalkclips($path, $tts_object, $encoder, $encoder_opts, $i);
|
||||||
|
$mp3 = sprintf("%s/_dirname.talk", $path);
|
||||||
|
}
|
||||||
|
# Element is a file
|
||||||
|
else {
|
||||||
|
$mp3 = sprintf("%s.talk", $path);
|
||||||
|
$voice =~ s/\.[^\.]*$//; # Trim extension
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("Talkclip %s: %s", $mp3, $voice) if $verbose;
|
||||||
|
|
||||||
|
voicestring($voice, $wav, $tts_engine_opts, $tts_object);
|
||||||
|
wavtrim($wav, 500, $tts_object);
|
||||||
|
# 500 seems to be a reasonable default for now
|
||||||
|
encodewav($wav, $mp3, $encoder, $encoder_opts, $tts_object);
|
||||||
|
unlink($wav);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# Check parameters
|
# Check parameters
|
||||||
my $printusage = 0;
|
my $printusage = 0;
|
||||||
unless (defined($V) or defined($C)) { print("Missing either -V or -C\n"); $printusage = 1; }
|
unless (defined($V) or defined($C)) { print("Missing either -V or -C\n"); $printusage = 1; }
|
||||||
|
|
@ -419,9 +463,6 @@ unless (defined($s)) { print("Missing -s argument\n"); $printusage = 1; }
|
||||||
unless (defined($S)) { print("Missing -S argument\n"); $printusage = 1; }
|
unless (defined($S)) { print("Missing -S argument\n"); $printusage = 1; }
|
||||||
if ($printusage == 1) { printusage(); exit 1; }
|
if ($printusage == 1) { printusage(); exit 1; }
|
||||||
|
|
||||||
$SIG{INT} = \&panic_cleanup;
|
|
||||||
$SIG{KILL} = \&panic_cleanup;
|
|
||||||
|
|
||||||
if (defined($v) or defined($ENV{'V'})) {
|
if (defined($v) or defined($ENV{'V'})) {
|
||||||
our $verbose = 1;
|
our $verbose = 1;
|
||||||
}
|
}
|
||||||
|
|
@ -429,6 +470,10 @@ if (defined($v) or defined($ENV{'V'})) {
|
||||||
|
|
||||||
# Do what we're told
|
# Do what we're told
|
||||||
if ($V == 1) {
|
if ($V == 1) {
|
||||||
|
# Only do the panic cleanup for voicefiles
|
||||||
|
$SIG{INT} = \&panic_cleanup;
|
||||||
|
$SIG{KILL} = \&panic_cleanup;
|
||||||
|
|
||||||
printf("Generating voice\n Target: %s\n Language: %s\n Encoder (options): %s (%s)\n TTS Engine (options): %s (%s)\n",
|
printf("Generating voice\n Target: %s\n Language: %s\n Encoder (options): %s (%s)\n TTS Engine (options): %s (%s)\n",
|
||||||
$t, $l, $e, $E, $s, $S);
|
$t, $l, $e, $E, $s, $S);
|
||||||
generateclips($l, $t, $e, $E, $s, $S);
|
generateclips($l, $t, $e, $E, $s, $S);
|
||||||
|
|
@ -436,7 +481,10 @@ if ($V == 1) {
|
||||||
deletemp3s();
|
deletemp3s();
|
||||||
}
|
}
|
||||||
elsif ($C) {
|
elsif ($C) {
|
||||||
# xxx: Implement .talk clip generation
|
printf("Generating .talk clips\n Path: %s\n Language: %s\n Encoder (options): %s (%s)\n TTS Engine (options): %s (%s)\n", $ARGV[0], $l, $e, $E, $s, $S);
|
||||||
|
my $tts_object = init_tts($s, $S, $l);
|
||||||
|
gentalkclips($ARGV[0], $tts_object, $e, $E, 0);
|
||||||
|
shutdown_tts($tts_object);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
printusage();
|
printusage();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue