Я использую IBM Watson TTS для функциональности Text-to-Speech. Я могу получить аудиофайл с помощью функции Postman's Send and Download. Но, как я должен это делать в Perl. Я совершенно не знаком с Perl. Причина, по которой я использую Perl для этого, заключается в том, что мне нужно реализовать TTS в Asterisk AGI.Как получить аудиофайл WAV с использованием HTTP POST в Perl и воспроизвести его в Asterisk AGI
Редактировать: Я могу сохранить файл. Но играть в Asterisk не удалось.
Я использую следующий фрагмент кода для запроса POST и воспроизведения аудио:
....
my $uaresponse = $ua->post(
"$url",
Content_Type => "application/json",
Accept => "audio/wav",
Authorization => "Basic OWFmMjhhYmItMWFmMi00ZjU0LWE1YTAtNTJhNGUxNjRjNGQ1OnlkYWgwN3BRdEJMVA==",
Content => $json_text,
);
if(!$uaresponse->is_success){
print "Failed request to IBM \n";
} else{
print "Successful with IBM \n";
($fh, $tmpname) = tempfile("ggl_XXXXXXXX", DIR => $tmpdir, UNLINK => 1);
$tmpname = $uaresponse->content;
# my approach is wrong somewhere here...??
#print "$tmpname\n";
# open(my $out, '>:wav', "$tmpname.wav") or die "unable to open $!";
# print $out pack('a*', $ua_response2->content);
# Playback and save file in cache #
$res = playback($tmpname, $intkey);
die if ($res < 0);
last if ($res > 0);
}
sub checkresponse {
my $input = <STDIN>;
my @values;
chomp $input;
if ($input =~ /^200 result=(-?\d+)\s?(.*)$/) {
@values = ("$1", "$2");
} else {
$input .= <STDIN> if ($input =~ /^520-Invalid/);
warn "$name Unexpected result: $input\n";
@values = (-1, -1);
}
return @values;
}
sub playback {
my ($file, $keys) = @_;
my @response;
print "STREAM FILE $file \"$keys\"\n";
@response = checkresponse();
if ($response[0] >= 32 && chr($response[0]) =~ /[\w*#]/) {
console_log("Got digit chr($response[0])") if ($debug);
print "SET EXTENSION ", chr($response[0]), "\n";
checkresponse();
print "SET PRIORITY 1\n";
checkresponse();
} elsif ($response[0] == -1) {
console_log("Failed to play $file.");
}
return $response[0];
}
Рассматривали вы используете EAGI потоковое аудио непосредственно из сценария? https://wiki.asterisk.org/wiki/display/AST/Application_EAGI – QuickDanger