使用websocket流式传输音频,并获取使用Google语音API获得的音频转录

使用websocket流式传输音频,并获取使用Google语音API获得的音频转录,websocket,stream,speech-to-text,google-cloud-speech,Websocket,Stream,Speech To Text,Google Cloud Speech,我有一个客户端,它从麦克风获取音频,然后通过websocket流将其发送到远程服务器 服务器端我从websocket获取音频流 const WebSocket = require('websocket-stream'); const wss = WebSocket.createServer({host: '192.168.254.161', port: 8090},handle); function handle(stream) { stream.pipe(recognizeStream

我有一个客户端,它从麦克风获取音频,然后通过websocket流将其发送到远程服务器

服务器端我从websocket获取音频流

const WebSocket = require('websocket-stream');
const wss = WebSocket.createServer({host: '192.168.254.161', port: 8090},handle);

function handle(stream)  {
  stream.pipe(recognizeStream); 
  stream.on('close', function (){
    console.log("stream closed")
  }).on('error', function() {
    console.log("stream error")
  })
}

wss.on('connection', function connection(ws) {
  ws.on('message', function incoming(message) {
        console.log('%s bytes received', message.length);
        ws.send("some mesage")
  }).on('close', function () {
       ws.send("End of audio data")
  }).on('error',function (err) {
      console.log("error:",err)
  });
});
并使用SpeechClient和StreamingRecognite将其发送到Google语音API

const recognizeStream = client
  .streamingRecognize(request)
  .on('error', console.error)
  .on('data', (data) => {
    process.stdout.write(
      data.results[0] && data.results[0].alternatives[0]
        ? `Transcription: ${data.results[0].alternatives[0].transcript}\n`
        : `\n\nReached transcription time limit, press Ctrl+C\n`
    );
  });
一切正常,我把成绩单写进了che服务器控制台


现在我需要通过websocket把成绩单寄回去,但我找不到怎么做。我唯一可以发回内容的地方是ws-event处理程序,但在这里我无权访问转录本数据

当连接可用时,您可以创建流,并使用连接变量发回数据:

wss.on('connection', function connection(ws) {

  ws.on('message', function incoming(message) {
        console.log('%s bytes received', message.length);
        ws.send("some mesage")
  }).on('close', function () {
       ws.send("End of audio data")
  }).on('error',function (err) {
      console.log("error:",err)
  });


  const recognizeStream = client
        .streamingRecognize(request)
        .on('error', console.error)
        .on('data', (data) => {

          // We send it back here, ws is still accessible

          ws.send(
                data.results[0] && data.results[0].alternatives[0]
              ? `Transcription: ${data.results[0].alternatives[0].transcript}\n`
              : `\n\nReached transcription time limit, press Ctrl+C\n`
          );
        });

});
也有不同的方法-您可以使用全局变量传递连接或将其包装到某个原型中。

可能重复的