【发布时间】:2018-04-13 22:58:30
【问题描述】:
我想要实现的是与 Web Speech API 相同的实时转录过程,但使用的是 Google Cloud Speech API。
主要目标是使用 gRPC 协议通过带有 Speech API 的 Electron 应用转录现场录音。
这是我实现的简化版本:
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 的错误响应是音频流太慢,我们没有实时发送。
感觉是因为我传递的流没有任何格式化或对象初始化,所以无法进行流识别。
【问题讨论】:
-
你有没有设法用电子来解决这个问题?我有同样的任务。
-
我也在寻找 Electron 中的实时转录。我没有回答您如何在 Electron 中使用 Google Cloud Speech 的具体问题,但我想我会提到一个替代方案:为“otter.ai”创建一个 iframe(每月免费 600 分钟的转录服务) ,让用户登录(使用 open-auth 登录,因此速度非常快),然后将自定义代码插入 iframe(webview 预加载),让您在需要时启动转录并检索其中转录的文本。不寻常的方法,但 Otter 的转录非常好,每个用户每月 600 分钟的免费时间也不错。
标签: javascript google-cloud-platform electron