我嘗試使用ws包通過websocket使用基本的語音到文本服務。但是,在成功打開連接併發送初始消息後,我永遠不會獲得listening
狀態。 我也嘗試發送音頻和空的二進制文件(表示上傳過程已完成),但服務器始終返回close
,代碼爲1000
。IBM Watson語音到文本Websocket結束(帶代碼1000)沒有結果
以下是我的代碼
'use strict';
var fs = require('fs');
var request = require('request');
var WS = require('ws');
var wsURI = 'wss://stream.watsonplatform.net/speech-to-text/api/v1/recognize?watson-token=[TOKEN]&model=en-UK_NarrowbandModell&x-watson-learning-opt-out=1';
var getTokenForm = {
method: 'GET',
uri: 'https://[USER_ID]:[PASSWORD]@stream.watsonplatform.net/authorization/api/v1/token?url=https://stream.watsonplatform.net/speech-to-text/api',
};
var filepath = 'C:/Temp/test1.wav';
request(getTokenForm, function(error, response, body) {
wsURI = wsURI.replace('[TOKEN]', body);
var message = {
'action': 'start',
'content-type': 'audio/wav',
'continuous': true,
'inactivity_timeout': -1
};
var ws = new WS(wsURI);
['message', 'error', 'close', 'open', 'connection'].forEach(function(eventName) {
ws.on(eventName, console.log.bind(console, eventName + ' event: '));
});
ws.on('open', function(evt) {
ws.send(JSON.stringify(message));
setTimeout(function timeout() {
var readStream = fs.createReadStream(filepath);
readStream.on('data', function(data) {
ws.send(data, {
binary: true,
mask: false,
});
});
readStream.on('end', function() {
ws.send(new Buffer(0), {
binary: true,
mask: false,
});
});
}, 1000);
});
ws.on('close', function(data) {
console.log(data)
});
});
還嘗試將文件直接發送(不流)。
var sound = fs.readFileSync(filepath);
ws.send(sound, { binary: true, mask: false});
,並嘗試添加自定義標題Authorization
var authorization = 'Basic ' + new Buffer('USER_ID:PASSWORD').toString('base64');
var ws = new WS(wsURI, {
headers: {
'Authorization': authorization,
}
});
但到目前爲止沒有運氣。
我可以用[代碼示例節點sdk](https://github.com/watson-developer-cloud/node-sdk/blob/dev/examples/speech_to_text.v1.js),但我希望看到它的工作沒有官方的SDK。 – ucin
畢竟有SDK的原因 –
如果你想在瀏覽器中使用語音到文本,還有另一個SDK。 https://github.com/watson-developer-cloud/speech-javascript-sdk –