Je travaille sur le tutorial pour IBM Watson Speech-to-Text, en utilisant WebSocket pour la transcription en temps réel. J'utilise Angular.Les données du microphone d'envoi de texte de synthèse d'IBM Watson se terminent
Les 25 premières lignes de code sont copiées à partir du API reference. Ce code se connecte avec succès et lance une demande de reconnaissance. Watson m'envoie un message { "state": "listening" }
. J'ai écrit function onClose()
qui se connecte lorsque la connexion se ferme.
J'ai fait un bouton qui exécute le gestionnaire $scope.startSpeechRecognition
. Cela utilise getUserMedia()
pour diffuser l'audio à partir du microphone et websocket.send()
pour diffuser les données à Watson. Cela ne fonctionne pas. Cliquer sur ce bouton ferme la connexion. Je suppose que j'envoie le mauvais type de données et Watson ferme la connexion? J'ai déplacé websocket.send(blob);
de onOpen
à mon gestionnaire $scope.startSpeechRecognition
. J'ai changé websocket.send(blob);
en websocket.send(mediaStream);
. Je peux avoir tort: 'content-type': 'audio/l16;rate=22050'
. Comment savoir quel débit provient du microphone?
Existe-t-il un tutoriel pour JavaScript? Lorsque je google "didacticiel JavaScript IBM Watson discours-texte" en haut est un 8000-line SDK. Le SDK est-il nécessaire ou puis-je écrire un programme simple pour apprendre comment fonctionne le service?
Voici mon contrôleur:
'use strict';
app.controller('WatsonController', ['$scope', 'watsonToken', function($scope, watsonToken) {
console.log("Watson controller.");
var token = watsonToken;
var wsURI = "wss://stream.watsonplatform.net/speech-to-text/api/v1/recognize"
+ "?watson-token=" + token + '&model=en-US_BroadbandModel';
var websocket = new WebSocket(wsURI); // opens connection to Watson
websocket.onopen = function(evt) { onOpen(evt) }; // executes when a connection opens
websocket.onclose = function(evt) { onClose(evt) }; // executes when a connection closes
websocket.onmessage = function(evt) { onMessage(evt) }; // logs messages from Watson to the console
websocket.onerror = function(evt) { onError(evt) }; // logs errors to the console
function onOpen(evt) {
var message = {
action: 'start',
'content-type': 'audio/flac',
'interim_results': true,
'max-alternatives': 3,
keywords: ['colorado', 'tornado', 'tornadoes'],
'keywords_threshold': 0.5
};
websocket.send(JSON.stringify(message));
// Prepare and send the audio file.
// websocket.send(blob);
// websocket.send(JSON.stringify({action: 'stop'}));
}
function onClose() {
console.log("Connection closed.");
};
function onMessage(evt) {
console.log(evt.data); // log the message to the console
}
$scope.startSpeechRecognition =() => {
console.log("Starting speech recognition.");
var constraints = { audio: true, video: false };
navigator.mediaDevices.getUserMedia(constraints)
.then(function(mediaStream) {
console.log("Streaming audio.");
websocket.send(mediaStream);
})
.catch(function(err) { console.log(err.name + ": " + err.message); }); // log errors
};
$scope.stopSpeechRecognition =() => { // handler for button
console.log("Stopping speech recognition.");
websocket.send(JSON.stringify({action: 'stop'}));
};
$scope.closeWatsonSpeechToText =() => { // handler for button
console.log("Closing connection to Watson.");
websocket.close(); // closes connection to Watson?
};
}]);
Et voici mon modèle:
<div class="row">
<div class="col-sm-2 col-md-2 col-lg-2">
<p>Watson test.</p>
</div>
</div>
<div class="row">
<div class="col-sm-2 col-md-2 col-lg-2">
<button type="button" class="btn btn-primary" ng-click="startSpeechRecognition()">Start</button>
</div>
<div class="col-sm-2 col-md-2 col-lg-2">
<button type="button" class="btn btn-warning" ng-click="stopSpeechRecognition()">Stop</button>
</div>
<div class="col-sm-2 col-md-2 col-lg-2">
<button type="button" class="btn btn-danger" ng-click="closeWatsonSpeechToText()">Close</button>
</div>
</div>
Thomas, il y a un javascript sdk qui va vous faciliter la vie: https://github.com/watson-developer-cloud/speech-javascript-sdk Regardez les exemples ici. –