Ich habe Zweifel über die "Text-zu-Sprache"Amazon Polly Service.
Ich habe diesen Dienst in meinen Chatbot integriert, um zu beschreiben, was der Bot dem Benutzer im Chat schreibt.
Es funktioniert ziemlich gut, aber ich weiß nicht, ob es möglich ist, die Stimme früh zu stoppen, bevor sie (Ich wählte eine weibliche Stimme) beendet zu sprechen. Manchmal muss ich in der Konversation weiter gehen und ich will nicht bis zum Ende des Satzes hören.AWS - Amazon Polly Text zu Sprache
Dies ist der Code für die Integration verwendet:
//Html side
function textToSpeech(text) {
$.ajax({
type: 'GET',
url: '/Chat/TextToSpeech?text=' + text,
cache: false,
success: function (result) {
var audio = document.getElementById('botvoice');
$("#botvoice").attr("src", "/Audios/" + result);
audio.load();
audio.play();
}
});
}
Reglerseite
public ActionResult TextToSpeech(string text)
{
string filename = "";
try
{
AWSCredentials credentials = new StoredProfileAWSCredentials("my_credential");
AmazonPollyClient client = new AmazonPollyClient(credentials, Amazon.RegionEndpoint.EUWest1);
// Create describe voices request.
DescribeVoicesRequest describeVoicesRequest = new DescribeVoicesRequest();
// Synchronously ask Amazon Polly to describe available TTS voices.
DescribeVoicesResponse describeVoicesResult = client.DescribeVoices(describeVoicesRequest);
List<Voice> voices = describeVoicesResult.Voices;
// Create speech synthesis request.
SynthesizeSpeechRequest synthesizeSpeechPresignRequest = new SynthesizeSpeechRequest();
// Text
synthesizeSpeechPresignRequest.Text = text;
// Select voice for synthesis.
synthesizeSpeechPresignRequest.VoiceId = voices[18].Id;
// Set format to MP3.
synthesizeSpeechPresignRequest.OutputFormat = OutputFormat.Mp3;
// Get the presigned URL for synthesized speech audio stream.
string current_dir = AppDomain.CurrentDomain.BaseDirectory;
filename = CalculateMD5Hash(text) + ".mp3";
var path_audio = current_dir + @"\Audios\" + filename;
var presignedSynthesizeSpeechUrl = client.SynthesizeSpeechAsync(synthesizeSpeechPresignRequest).GetAwaiter().GetResult();
FileStream wFile = new FileStream(path_audio, FileMode.Create);
presignedSynthesizeSpeechUrl.AudioStream.CopyTo(wFile);
wFile.Close();
}
catch (Exception ex)
{
filename = ex.ToString();
}
return Json(filename, JsonRequestBehavior.AllowGet);
}
Ein Eingabetext in meinem Chat vorhanden ist (natürlich) zum Schreiben und senden (durch Drücken von ENTER auf der Tastatur) die Frage an den Bot. Ich habe versucht, den Befehl audio.src=""
in den Handler zu setzen, und sie stoppt, um zu sprechen, aber der Chat bleibt immer noch blockiert ... Es scheint wie es wartet das Ende des Audio-Stream. Ich muss die Seite aktualisieren, um neue Nachrichten und Antworten zu sehen.
Gibt es eine Amazon-Funktion, die ich mit einem bestimmten Parametersatz aufrufen kann, um den Dienst zu benachrichtigen, dass ich den Audio-Stream stoppen und löschen möchte?