如何将数据流传输到分配给常量的函数中?

时间:2017-03-29 21:50:48

标签: javascript node.js google-speech-api

以下Google的示例有效,但它使用了pipe。对于我的情况,我正在收听一个websocket,它以20ms的增量发送数据包,并且从我能够发现的数据中无法将pipe数据转换为函数。

初始化时必须传递的第一个参数是config对象。之后,只接受数据。所以我将函数设置为变量,然后传递配置。但我无法弄清楚如何在之后将数据流传递给它。如何在不使用recognizeStream的情况下将数据传递到pipe?或者有pipewebsocket

一起使用的方法

我可以通过以一定的时间间隔从临时文件读取和写入来保证此设置的工作,但这有明显的缺点:1)所有这些开销和2)最重要的是,不是实时流。

我认为有两种解决方案可行但无法实现:

  1. 有一些方法可以从pipe设置websocket(这是理想的)
  2. 同时将数据写入文件,同时使用createReadStream从文件中使用fs的某些实现将其读回(这似乎是一个问题的雷区)
  3. tl; dr我需要在数据进入时将websocket的数据流发送到分配给const的函数中。

    来自Google Docs

    的示例设置
    const Speech = require('@google-cloud/speech');
    
    // Instantiates a client
    const speech = Speech();
    
    // The encoding of the audio file, e.g. 'LINEAR16'
    const encoding = 'LINEAR16';
    
    // The sample rate of the audio file, e.g. 16000
    const sampleRate = 16000;
    
    const request = {
      config: {
        encoding: encoding,
        sampleRate: sampleRate
      }
    };
    
    const recognizeStream = speech.createRecognizeStream(request)
      .on('error', console.error)
      .on('data', (data) => process.stdout.write(data.results));
    
    // Start recording and send the microphone input to the Speech API
    record.start({
      sampleRate: sampleRate,
      threshold: 0
    }).pipe(recognizeStream);
    

    Websocket设置

    const WebSocketServer = require('websocket').server
    wsServer.on('connect', (connection) => {
    
      connection.on('message', (message) => {
    
        if (message.type === 'utf8') {
    
          console.log(message.utf8Data)
    
        } else if (message.type === 'binary') {
    
           // send message.binaryData to recognizeStream
    
        }
      })
    })
    

1 个答案:

答案 0 :(得分:0)

你应该能够做到:

recognizeStream.write(message.binaryData)