102 lines
2.1 KiB
Perl
102 lines
2.1 KiB
Perl
|
#! /usr/bin/perl -w
|
||
|
|
||
|
use strict;
|
||
|
use Symbol;
|
||
|
|
||
|
sub usage {
|
||
|
print <<EoF;
|
||
|
|
||
|
EoF
|
||
|
}
|
||
|
|
||
|
my $fgroot = $ENV{'FG_ROOT'} || '.';
|
||
|
|
||
|
my $dir="$fgroot/ATC";
|
||
|
my %start=();
|
||
|
my %len=();
|
||
|
|
||
|
my $str = 'Tucson International airport_information
|
||
|
Ryan automated_weather_observation
|
||
|
zero four one five zulu weather
|
||
|
/ Wind one one zero at one five
|
||
|
/ Visibility one zero
|
||
|
/ sky_condition two thousand four hundred scattered
|
||
|
/ Temperature one zero celsius dewpoint five celsius
|
||
|
/ Altimeter two niner niner two
|
||
|
/ Landing_and_departing_runway one one right
|
||
|
/ on_initial_contact_advise_you_have_information zulu ';
|
||
|
|
||
|
main: {
|
||
|
setup();
|
||
|
unlink 'tmp.raw';
|
||
|
$str =~ s/\n/ /g;
|
||
|
##print "$start{'decimal'} ... $len{'decimal'}\n";
|
||
|
my $didsome = 0;
|
||
|
for my $arg (@ARGV) {
|
||
|
if ($arg ne '-') {
|
||
|
say1($arg);
|
||
|
$didsome++;
|
||
|
} else {
|
||
|
for my $word (split(' ', $str)){
|
||
|
say1($word);
|
||
|
$didsome++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if ($didsome) {
|
||
|
my $cmd = 'sox -q -r 8000 -t raw -e signed-integer -b 16 tmp.raw'
|
||
|
. ' tmp.wav';
|
||
|
# . ' -t alsa';
|
||
|
print "$cmd\n";
|
||
|
system $cmd;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
sub say1{
|
||
|
my ($arg) = @_;
|
||
|
$arg = lc($arg);
|
||
|
if (exists $start{$arg}) {
|
||
|
my $cmd = "sox -q $dir/voice.wav "
|
||
|
. " -t raw -r 8000 -e signed-integer -b 16 - "
|
||
|
. " trim $start{$arg}s $len{$arg}s"
|
||
|
. " >> tmp.raw ";
|
||
|
print "$cmd\n";
|
||
|
system $cmd;
|
||
|
my $end = $start{$arg} + $len{$arg};
|
||
|
print "$start{$arg} + $len{$arg} = $end\n";
|
||
|
} else {
|
||
|
print "Can't find '$arg'\n";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
sub setup{
|
||
|
my $inch = Symbol::gensym();
|
||
|
my $file = "$dir/voice.vce";
|
||
|
open($inch, "<$file") || die "Cannot open input file '$file'\n";
|
||
|
my $header = <$inch>;
|
||
|
chomp $header;
|
||
|
my $ii=1;
|
||
|
liner: while (my $line = <$inch>){
|
||
|
chomp $line;
|
||
|
my @word = split(" ", $line);
|
||
|
my $nn = @word;
|
||
|
if ($nn != 3) {
|
||
|
next liner;
|
||
|
}
|
||
|
my $id = lc($word[0]);
|
||
|
my $st = $word[1];
|
||
|
my $ln = $word[2];
|
||
|
if ($ln =~ s/^x//) {
|
||
|
$ln = $ln - $st;
|
||
|
print "$id $st $ln\n";
|
||
|
}
|
||
|
$start{$id} = $st;
|
||
|
$len{$id} = $ln;
|
||
|
##print "$ii $nn '$line'\n";
|
||
|
$ii++;
|
||
|
}
|
||
|
print "(($header)) --> $ii\n";
|
||
|
}
|