2017-03-09 14 views
5

私はWebSocket接続のオーディオストリームをGoogle Speech APIに送信しようとしています。 websocketはバイナリメッセージを20ms刻みで送信します。これを増分で送信すると、Googleとの接続が途絶えることを避けるため、データを一時的にローカルファイルに読み書きする必要があると私は信じています。しかし、これは理想的ではありません。websocketバイナリメッセージをストリームとしてGoogle Speech APIに送信するにはどうすればよいですか?

websocketストリームを直接recognizeStreamにパイプする方法はありますか。

ドキュメントからGoogleのstreamingRecognize例:

const request = { 
    config: { 
     encoding: encoding, 
     sampleRate: sampleRate 
    } 
}; 

const recognizeStream = speech.createRecognizeStream(request) 
    .on('error', console.error) 
    .on('data', (data) => process.stdout.write(data.results)); 

record.start({ 
    sampleRate: sampleRate, 
    threshold: 0 
}).pipe(recognizeStream); 

のWebSocket接続:

var HttpDispatcher = require('httpdispatcher'); 
var dispatcher  = new HttpDispatcher(); 
var WebSocketServer = require('websocket').server; 


var server = http.createServer(handleRequest); 

var wsServer = new WebSocketServer({ 
    httpServer: server, 
    autoAcceptConnections: true, 

}); 

function handleRequest(request, response){ 
    try { 
     //log the request on console 
     console.log(request.url); 
     //Dispatch 
     dispatcher.dispatch(request, response); 
    } catch(err) { 
     console.log(err); 
    } 
} 


wsServer.on('connect', function(connection) { 
    console.log((new Date()) + ' Connection accepted' + ' - Protocol Version ' + connection.webSocketVersion); 
    connection.on('message', function(message) { 
     if (message.type === 'utf8') { 
      console.log(message.utf8Data); 
     } 

     else if (message.type === 'binary') { 

      //Send to Google Speech API by passing into recognizeStream 

     } 
    }); 

    connection.on('close', function(reasonCode, description) { 
     console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.'); 
    }); 


}); 

答えて

0

これは実際には非常に簡単です。私はそれを見ていないために少しsheepish感じるように簡単です。このコードがOPでどのように書かれたかに応じて、これは完全に機能します:

else if (message.type === 'binary') { 

    //Send to Google Speech API by passing into recognizeStream 
    recognizeStream.write(message.binaryData) 

} 
0

最善の解決策ではなく、それを自分で行うよりも、特殊なストリーミングソリューションを使用することです、このすべてのバッファを処理し、Google Speech APIに適した安定したストリームを提供します。

01などを使用してください

https://www.npmjs.com/package/websocket-stream

関連する問題