#!/usr/bin/perl

package SpeechRecognition;
use JSON::Parse 'parse_json';
require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(interpret_from_mic interpret_from_file);

our $VERSION = 0.1;



# Define constants
my $API_ADDRESS = "http://www.google.com/speech-api/v1/recognize?lang=en";
my $RECORD_COMMAND = "arecord -q -f cd -t wav -d 3 -r 16000 | flac - -f -s --best --sample-rate 16000 -o /dev/shm/rectmp.flac";
  
my $SEARCH_FOR_ARRAY_KEY = "hypotheses";
my $SEARCH_FOR_HASH_KEY = "utterance";
my $FILE_REMOVE_COMMAND = "rm /dev/shm/rectmp.flac";


sub interpret_from_mic {
    if ($_[0] != 0) {$RECORD_COMMAND =  "arecord -q -f cd -t wav -d $_[0] -r 16000 | flac - -f -s --best --sample-rate 16000 -o /dev/shm/rectmp.flac";}
    my $QUERY_COMMAND = "wget -O - -o /dev/null --post-file /dev/shm/rectmp.flac --header=\"Content-Type: audio/x-flac; rate=16000\" $API_ADDRESS";
    qx($RECORD_COMMAND);
    my $jsonReceived = qx($QUERY_COMMAND);
    #  print("$jsonReceived\n");
    my $parsedJSON = parse_json ($jsonReceived);
    my $arrayRef = $parsedJSON->{$SEARCH_FOR_ARRAY_KEY};
    my $hashRef = $ { $arrayRef }[0];
    my $spokenText = $ { $hashRef } { $SEARCH_FOR_HASH_KEY };
    system("$FILE_REMOVE_COMMAND");
    $spokenText;
}

sub interpret_from_file {
    my $QUERY_COMMAND = "wget -O - -o /dev/null --post-file $_[0] --header=\"Content-Type: audio/x-flac; rate=16000\" $API_ADDRESS";
    
    my $jsonReceived = qx($QUERY_COMMAND);
    #  print("$jsonReceived\n");
    my $parsedJSON = parse_json ($jsonReceived);
    my $arrayRef = $parsedJSON->{$SEARCH_FOR_ARRAY_KEY};
    my $hashRef = $ { $arrayRef }[0];
    my $spokenText = $ { $hashRef } { $SEARCH_FOR_HASH_KEY };
    $spokenText;
}

