WebSocketを使用してIBM Watson Speech-to-Textのtutorialをリアルタイムで処理しています。私はAngularを使用しています。IBM Watsonスピーチからテキスト送信マイク・データ接続を閉じる
コードの最初の25行はAPI referenceからコピーされます。このコードは正常に接続し、認識要求を開始します。ワトソンは私にメッセージ{ "state": "listening" }
を送ります。
接続が終了したときにログに記録するfunction onClose()
を書きました。
私はハンドラ$scope.startSpeechRecognition
を実行するボタンを作った。これはgetUserMedia()
を使用してマイクからのオーディオをストリーミングし、websocket.send()
を使用してデータをワトソンにストリーミングします。これは動作していません。このボタンをクリックすると接続が終了します。私は間違ったタイプのデータを送信していると推定し、Watsonは接続を終了していますか?
websocket.send(blob);
をonOpen
からマイハンドラ$scope.startSpeechRecognition
に移動しました。私はwebsocket.send(blob);
をwebsocket.send(mediaStream);
に変更しました。私はこれが間違っているかもしれません:'content-type': 'audio/l16;rate=22050'
。どのビットレートがマイクロフォンから来るのかをどのように知るのですか?
JavaScriptのチュートリアルはありますか?私がGoogleのトップにある「IBM Watson Speech-to-Text JavaScriptチュートリアル」は8000-line SDKです。 SDKが必要ですか?また、サービスの仕組みを理解するための簡単なプログラムを作成できますか?ここ
'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?
};
}]);
そして、私のテンプレートです:
は、ここに私のコントローラの
<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、あなたの人生を楽にするJavaScriptのSDKがあります:https://github.com/watson-developer-cloud/speech-javascript-sdkそこのサンプルを見てください。 –