以下Google的示例有效,但它使用了pipe
。对于我的情况,我正在收听一个websocket
,它以20ms的增量发送数据包,并且从我能够发现的数据中无法将pipe
数据转换为函数。
初始化时必须传递的第一个参数是config
对象。之后,只接受数据。所以我将函数设置为变量,然后传递配置。但我无法弄清楚如何在之后将数据流传递给它。如何在不使用recognizeStream
的情况下将数据传递到pipe
?或者有pipe
与websocket
我可以通过以一定的时间间隔从临时文件读取和写入来保证此设置的工作,但这有明显的缺点:1)所有这些开销和2)最重要的是,不是实时流。
我认为有两种解决方案可行但无法实现:
pipe
设置websocket
(这是理想的)createReadStream
从文件中使用fs
的某些实现将其读回(这似乎是一个问题的雷区) tl; dr我需要在数据进入时将websocket
的数据流发送到分配给const
的函数中。
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
}
})
})
答案 0 :(得分:0)
你应该能够做到:
recognizeStream.write(message.binaryData)