Googleの下記の例は、pipe
を使用しています。私の状況では、私はwebsocket
を聞いています。パケットを20ms刻みで送り、そこから見つけることができたのは、そのデータを関数に変換する方法がありません。pipe
定数に割り当てられた関数にデータストリームをパイプする方法はありますか?
初期化時に渡す必要がある最初の引数はconfig
オブジェクトです。その後、データのみが受け入れられます。だから私は変数として関数を設定し、次に設定を渡します。しかし、後でデータストリームをどのように渡すかを理解できません。 pipe
を使用せずにrecognizeStream
にデータを渡すにはどうすればよいですか?またはwebsocket
でpipe
を使用する方法は、最も重要なの)そのオーバーヘッドの全ておよび2)私は一定の間隔で一時ファイルからの読み込みと書き込みで働いて、この設定を保証することができますが、これは1の明らかな欠点がありますされますリアルタイムではありません。
私は仕事だと思うが、実装することができていない2つのソリューションがあります。
- セットアップにはいくつかの方法があります
websocket
からpipe
(これは理想的である) - 同時にデータを書き込みます同時に
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
}
})
})
あなたは 'recognStream.write(message.binaryData)'を行うことができます。 – idbehold
うわー、私は恍惚と愚かの両方がそれが働いたと感じる。それは完璧に働いた。ありがとうございました!私はそれを受け入れることができるように答えてください。 –