2017-03-29 1 views
0

Google의 아래 예는 pipe입니다. 내 상황에 대해 나는 websocket에 20ms 단위로 패킷을 보내고 어떤 방법으로도 찾을 수 있었다는 것을 듣고있다. pipe 그 데이터를 함수에 넣을 수는 없다.데이터 스트림을 상수에 할당 된 함수로 파이프하는 방법은 무엇입니까?

초기화시 전달되어야하는 첫 번째 인수는 config 개체입니다. 그 후에는 데이터 만 허용됩니다. 그래서 함수를 변수로 설정 한 다음 config를 전달합니다. 하지만 나중에 데이터 스트림을 전달하는 방법을 알 수 없습니다. pipe을 사용하지 않고 recognizeStream에 데이터를 전달하려면 어떻게해야합니까? 또는 함께 pipe를 사용하는 방법이있다이다 websocket

내가 읽고 특정 간격으로 임시 파일에서 작성하여 작업이 설정에 대해 보증 할 수 있지만, 이것은 명백한 하나의 단점)이 오버 헤드를 모두 가지고 있으며, 2) 가장 중요한 것은 실시간 스트림이 아닙니다.

나는 일 것이라고 생각하지만 구현할 수 없었던 두 가지 해결책이 있습니다

  1. 설정 몇 가지 방법이 있습니다 websocket에서 pipe (이 이상적입니다)
  2. 동시에 데이터를 기록 파일 fs의 일부 구현 (이 문제의 지뢰밭처럼 보인다)

TL을 사용하여 파일에서 createReadStream을 사용하여 다시 읽는하는 동시에, 박사 나는 데이터의 제공으로 const에 할당 된 기능으로 websocket에서 데이터의 흐름을 보내야합니다.

예 설정을 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); 

웹 소켓 설정

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

'recognStream.write (message.binaryData)'만하면됩니다. – idbehold

+0

와우, 나는 그 일이 황홀하고 바보 같다고 느낀다. 그것은 완벽하게 작동했습니다. 고맙습니다! 내가 그것을 받아 들일 수 있도록 답으로 써라. –

답변

0

할 수 있어야합니다.

recognizeStream.write(message.binaryData) 
관련 문제