#!/usr/bin/perl # Based on Code Written by Josh McAllister # http://turnkey-solution.com/asterisk-sphinx.html $PORTTOUSE = 3010; # Use 3000 plus your extension so we are all unique #die ("usage: $0 \n") if not -e $ARGV[0]; #print "Result: " . asr("$ARGV[0]") . "\n"; $WAVFILE = "/home/sve204/sphinx/name-in.wav"; # Monitor put's the -in on the file #OR #$WAVFILE = $ARGV[0]; print asr($WAVFILE) . "\n"; exit; sub asr { use IO::Socket; use FileHandle; use IPC::Open2; my $file = shift or return undef; my $host = 'localhost'; my $port = $PORTTOUSE; my $fh; my $remote = IO::Socket::INET->new( Proto => "tcp", PeerAddr => "$host", PeerPort => "$port", ) or return "No Server Running"; open (FH, $file) || return undef; $fh = *FH; $file =~ /(gsm|wav)$/; my $type = $1; if ($type !~ /gsm|wav/) { warn "Unknown file type ($file)"; return undef; } #print "FTYPE: $type\n"; #$pid = open2(*SOXIN, *SOXOUT, "sox -t $type - -s -r 16000 -w -t wav - 2>/dev/null") || warn ("Could not open2.\n"); binmode $fh; #binmode SOXIN; #binmode SOXOUT; binmode $remote; #while (defined(my $b = read $fh, my($buf), 4096)) #{ # last if $b == 0; # $count += $b; # print SOXOUT $buf; #} #close SOXOUT; #$count = 0; #my $sox = undef; #while (defined(my $b = read SOXIN, my($buf), 4096)) { # last if $b == 0; # $count += $b; # $sox .= $buf; #} #print $remote length($sox) . "\n"; #print $remote "$sox"; #close SOXIN; #print "DEBUG: Waiting for result.\n"; binmode $sendbuf; while (defined(my $b = read $fh, my($buf), 4096)) { last if $b == 0; $count += $b; $sendbuf .= $buf; } print $remote length($sendbuf) . "\n"; print $remote "$sendbuf"; $count=0; while (defined(my $b = read $remote, my($buf), 4096)) { last if $b == 0; $count += $b; $result .= $buf; } close $fh; close $remote; return "$result"; }