2017-03-29 8 views
0

Googleの下記の例は、pipeを使用しています。私の状況では、私はwebsocketを聞いています。パケットを20ms刻みで送り、そこから見つけることができたのは、そのデータを関数に変換する方法がありません。pipe定数に割り当てられた関数にデータストリームをパイプする方法はありますか?

初期化時に渡す必要がある最初の引数はconfigオブジェクトです。その後、データのみが受け入れられます。だから私は変数として関数を設定し、次に設定を渡します。しかし、後でデータストリームをどのように渡すかを理解できません。 pipeを使用せずにrecognizeStreamにデータを渡すにはどうすればよいですか?またはwebsocket

pipeを使用する方法は、最も重要なの)そのオーバーヘッドの全ておよび2)私は一定の間隔で一時ファイルからの読み込みと書き込みで働いて、この設定を保証することができますが、これは1の明らかな欠点がありますされますリアルタイムではありません。

私は仕事だと思うが、実装することができていない2つのソリューションがあります。

  1. セットアップにはいくつかの方法がありますwebsocketからpipe(これは理想的である)
  2. 同時にデータを書き込みます同時にfsのいくつかの実装を使用してファイルからcreateReadStreamを使用して、それをバック読みながらファイル(これは問題の地雷原のように思える)

TL; DR私は、データが入るよう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); 

からの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

あなたは 'recognStream.write(message.binaryData)'を行うことができます。 – idbehold

+0

うわー、私は恍惚と愚かの両方がそれが働いたと感じる。それは完璧に働いた。ありがとうございました!私はそれを受け入れることができるように答えてください。 –

答えて

0

あなたは次のことを行うことができます:

recognizeStream.write(message.binaryData) 
関連する問題