214 |
|
|
215 |
my ($g,$f) = ('',''); |
my ($g,$f) = ('',''); |
216 |
|
|
217 |
|
my $last_c = ''; |
218 |
|
|
219 |
foreach my $i ( 0 .. $#chars ) { |
foreach my $i ( 0 .. $#chars ) { |
220 |
my $c = $chars[$i]; |
my $c = $chars[$i]; |
221 |
|
|
268 |
|
|
269 |
} |
} |
270 |
|
|
271 |
|
# same last chars? double duration |
272 |
|
if ($last_c eq $c) { |
273 |
|
$pho[ $#pho ]->{dur}->[0] *= 2; |
274 |
|
next; |
275 |
|
} |
276 |
|
|
277 |
|
# fixup sequences that need special handling |
278 |
|
if (defined($recovery->{ $last_c . $c })) { |
279 |
|
push @pho, { |
280 |
|
char => '_', |
281 |
|
dur => [ $silence->{word} * $speed ], |
282 |
|
}; |
283 |
|
} |
284 |
|
|
285 |
|
$last_c = $c; |
286 |
push @pho, { |
push @pho, { |
287 |
char => $c, |
char => $c, |
288 |
dur => \@dur, |
dur => \@dur, |
297 |
|
|
298 |
my $out; |
my $out; |
299 |
|
|
|
my $last_c = ''; |
|
|
|
|
300 |
foreach my $p (@pho) { |
foreach my $p (@pho) { |
|
if (defined($recovery->{ $last_c . $p->{char} })) { |
|
|
$out .= '_ ' . ( $silence->{word} * $speed ) . "\n"; |
|
|
} |
|
301 |
$out .= $p->{char} . ' ' . join(' ', map { $_ * $speed } @{ $p->{dur} }) . "\n"; |
$out .= $p->{char} . ' ' . join(' ', map { $_ * $speed } @{ $p->{dur} }) . "\n"; |
|
|
|
|
$last_c = $p->{char}; |
|
302 |
} |
} |
303 |
|
|
304 |
return ($out, $g, $f); |
return ($out, $g, $f); |