我想要实现的是与Web Speech API相同的实时转录过程,但使用的是Google Cloud Speech API。
主要目标是使用gRPC协议通过带有Speech API的电子应用程序转录现场录音。
这是我实现的一个简化版本:
const { desktopCapturer } = window.require('electron');
const speech = require('@google-cloud/speech');
const client = speech.v1({
projectId: 'my_project_id',
credentials: {
client_email: 'my_client_email',
private_key: 'my_private_key',
},
});
desktopCapturer.getSources({ types: ['window', 'screen'] }, (error, sources) => {
navigator.mediaDevices
.getUserMedia({
audio: true,
})
.then((stream) => {
let fileReader = new FileReader();
let arrayBuffer;
fileReader.onloadend = () => {
arrayBuffer = fileReader.result;
let speechStreaming = client
.streamingRecognize({
config: {
encoding: speech.v1.types.RecognitionConfig.AudioEncoding.LINEAR16,
languageCode: 'en-US',
sampleRateHertz: 44100,
},
singleUtterance: true,
})
.on('data', (response) => response);
speechStreaming.write(arrayBuffer);
};
fileReader.readAsArrayBuffer(stream);
});
});
来自Speech API的错误响应是音频流太慢,我们没有实时发送它。
我觉得原因是我传递的流没有任何格式化或对象初始化,所以无法执行流识别。
2条答案
按热度按时间iqjalb3h1#
Github上的这个官方样例项目似乎符合您的要求:https://github.com/googleapis/nodejs-speech/blob/master/samples/infiniteStreaming.js
此应用程序演示了如何使用streamingRecognize操作和Google Cloud Speech API执行无限流传输。
也可以参考我对Electron中的另一种方法的评论,使用OtterAI的转录服务(这是我很快就要尝试的方法)
zysjyyx42#
您可以使用node-record-lpcm16模块录制音频并直接传输到Google等语音识别系统。
在存储库中,有一个使用wit.ai的example。
对于Google语音识别,您可以使用类似于以下内容的代码: