我想看看是否可以使用getUserMedia
最新浏览器直接访问 Opus 或类似的东西。
我一直在研究它,但没有很好的结果。
我知道webkitSpeechRecognition
API 中实际使用了 Opus 或 Speex。我想做语音识别,但使用我自己的服务器而不是谷歌的。
我想看看是否可以使用getUserMedia
最新浏览器直接访问 Opus 或类似的东西。
我一直在研究它,但没有很好的结果。
我知道webkitSpeechRecognition
API 中实际使用了 Opus 或 Speex。我想做语音识别,但使用我自己的服务器而不是谷歌的。
所以有很多关于 Emscripten 的建议,但没有人这样做,所以我使用 Emscripten 将编码器opus-tools移植到 JavaScript。取决于一个人的想法,现在有以下机会:
getUserMedia
从流中编码为 Ogg-Opus 和 WAVMediaRecorder
,它还允许在支持的平台上将任意声音文件转换为 Opus 格式AudioContext.decodeAudioData()
我们使用 emscripten 使用带有 getUserMedia 的 gsm610 进行编码和解码,它运行得非常好,即使在移动设备上也是如此。如今,javascript 几乎提供了原生性能,因此 emscripten 可用于编译编解码器。唯一的问题是可能非常大的 .js 文件,因此您只想编译正在使用的部分。
不幸的是,目前无法直接从 JavaScript 访问浏览器编解码器进行编码。唯一的方法是利用 WebRTC 并在服务器上设置记录。我已经尝试过使用 Chromium 中的其他代码编译 libjingle 以使其在 Node.js 服务器上运行……这几乎是不可能的。
您目前唯一能做的就是将原始 PCM 数据发送到您的服务器。这会占用相当多的带宽,但您可以通过将 float32 样本转换为 16 位(如果您的语音识别可以处理,则为 8 位)将其最小化。
希望媒体记录器 API 很快就会出现,以便我们可以使用浏览器编解码器。
这不是一个完整的解决方案,@Brad 的答案实际上是此时的正确答案。
一种方法是将Opus 编译为 Emscripten,并希望您的 PC 可以使用 JavaScript 处理编码。另一种选择是使用speex.js。