2016-12-10 1 views
4

Ceci est mon script:Comment lire la réponse AudioStream dans AWS Polly à l'aide de JavaScript SDK?

<script src="https://sdk.amazonaws.com/js/aws-sdk-2.7.13.min.js"></script> 
<script> 
    AWS.config.region = 'eu-west-1'; 
    AWS.config.accessKeyId = 'FOO'; 
    AWS.config.secretAccessKey = 'BAR'; 

    var polly = new AWS.Polly({apiVersion: '2016-06-10'}); 

    var params = { 
     OutputFormat: 'mp3', /* required */ 
     Text: 'Hello world', /* required */ 
     VoiceId: 'Joanna', /* required */ 
     SampleRate: '22050', 
     TextType: 'text' 
    }; 

    polly.synthesizeSpeech(params, function(err, data) { 
     if (err) console.log(err, err.stack); // an error occurred 
     else  console.log(data);   // successful response 
    }); 
</script> 

La demande réussit, et je reçois ce genre de réponse:

enter image description here

Comment puis-je utiliser ce genre de réponse? Je comprends que la réponse est audio désérialisé, mais comment puis-je le jouer, disons, dans un élément audio HTML5?

De plus, cette réponse sur explique alors pourquoi est ce type de réseau approprié pour les données audio: https://stackoverflow.com/a/26320913/1325575

Répondre

14
var uInt8Array = new Uint8Array(audioStream); 
var arrayBuffer = uInt8Array.buffer; 
var blob = new Blob([arrayBuffer]); 
var url = URL.createObjectURL(blob); 

audioElement.src = url; 
audioElement.play(); 

J'ai créé une bibliothèque Javascript appelé ChattyKathy qui va gérer l'ensemble du processus pour vous si vous voulez prendre la sortie facile. Envoyez-lui simplement un objet AWS Credentials, puis dites-lui quoi dire. Elle appelle AWS, transforme la réponse et lit l'audio.

var settings = { 
    awsCredentials: awsCredentials, 
    awsRegion: "us-west-2", 
    pollyVoiceId: "Justin", 
    cacheSpeech: true 
} 

var kathy = ChattyKathy(settings); 

kathy.Speak("Hello world, my name is Kathy!"); 
kathy.Speak("I can be used for an amazing user experience!"); 
+0

Woah, l'homme, wow. –

+0

a eu un problème avec IE. La promesse n'était pas définie dans la fonction say (message). Fonctionne parfaitement dans Chrome .. – user525504

+0

Vous pouvez corriger l'erreur de promesse dans IE avec user525504