2017-04-08 3 views
2

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?

Antwort

3

Amazon Polly gibt eine .mp3 Datei zurück. Es ist nicht verantwortlich für Wiedergabe der Audiodatei.

Alle Probleme, die beim Abspielen/Stoppen des Audiomaterials auftreten, sind auf den Code zurückzuführen, den Sie zum Abspielen einer MP3-Audiodatei verwenden. Es hat nichts mit dem Amazon Polly Service selbst zu tun.

0

Vielen Dank!
Ich habe das eigentliche Problem gefunden: Als ich den Ton gestoppt habe, habe ich den Rest der Nachrichten nicht gedruckt. Ich füge den Anruf der Funktion hinzu, die Nachrichten im Chat druckt. Zum Stoppen der Stimme habe ich den Befehl audio.src = "";