javascript - Web Audio Api 与 Web Speech Api 集成 - 将扬声器/声卡输出流式传输到语音识别 api
问题描述
问题:
理想情况下,我会从声卡获取流输出(由正在播放的 mp4 文件生成)并将其发送到麦克风和扬声器。我知道我可以使用“getUserMedia”和“createChannelSplitter”(在 Web Audio Api 中)来获取和拆分(基于 Audacity 分析,原始信号是立体声)用户媒体为 2 个输出,这给我留下了 2 个问题。
getUserMedia
只能从麦克风而不是声卡获取流输入(根据我的阅读)- 流输出只能记录/发送到缓冲区,不能直接发送到麦克风(根据我的阅读)
这个对吗?
可能的解决方法 - 停滞:
用户很可能会打开耳机麦克风,但我想到的一种解决方法是切换到设备上的内置麦克风并捕捉扬声器发出的声音,然后切换回耳机以供用户输入。但是,我还没有找到一种无需每次都询问用户即可在内置麦克风和耳机麦克风之间切换的方法。
有没有办法做到这一点,我还没有找到?
您还建议什么其他解决方案?
项目说明:
html
我正在创建一个用&编写的西班牙语练习程序/网站javascript
。mp4 将播放,语音识别 api 将在屏幕上显示它所说的内容(就像西班牙语所说的那样),它会被翻译成英文,以便用户听到、看到和理解说话人所说的内容mp4。然后用户将使用耳机麦克风接听 mp4 人(通常内置麦克风不能提供足够好的语音识别质量 - 取决于设备 - 因此使用耳机)。
我使用内置麦克风的解决方法流程图
mp4->soundcard-> Web Audio Api -> channel 1 -> user's ears
channel 2 -> microphone input-> Web Speech Api-> html->text onscreen
理想情况下跳过麦克风输入流程图
mp4->soundcard-> Web Audio Api -> channel 1 -> user's ears
channel 2-> Web Speech Api-> html->text onscreen -> user's eyes
另一个潜在的解决方法:
我想避免必须手动从每个 mp4 中删除一个 mp3,然后必须尝试同步它们,以便语音识别在 mp4 人说话时发生。我读过我可以通过语音识别 api 运行 mp3。
解决方案
简短的回答是,目前(12/19)没有一种方法可以使用我拥有的工具和预算在这个平台上完成此任务。我选择了一种费力的方法来做到这一点,即设置带有文本块的单个 div,以便在该人在计时器上讲话时显示出来。我仍将使用语音 api 来捕捉用户所说的内容,以便程序可以运行正确的视频作为响应。
推荐阅读
- javascript - 当源是远程时更改 HTML 音频中的 currentTime?
- javascript - 引用的 JS 文件不会让 HTML 页面获得比第一个常量更多的信息
- c# - 关闭拥有的表单时启用/禁用所有者表单上的按钮
- node.js - 建立从 apache angular app 到 rest api node js 的连接
- function - 本地声明的 lua 函数是否在每次传递时都会被解析?
- flutter - 有多个英雄在子树中共享相同的标签而不使用 FAB
- laravel - Laravel-auth-timeout - 事件和监听器
- rust - Rust:为什么第一个借用后来用在这里?
- beagleboneblack - 关于 Beaglebone Black CAN 协议设置
- awk - 使用 grep/awk 从文件中提取信息