有没有办法在音频文件中使用 Javascript SpeechRecognition API?
Is there a way to use the Javascript SpeechRecognition API with an audio file?
我想将 SpeechRecognition api 与音频文件(mp3、wave 等)一起使用
这可能吗?
是的,可以使用 webkitSpeechRecognition
获取音频文件播放的文本记录。文字记录的质量取决于音频播放的质量。
const recognition = new webkitSpeechRecognition();
const audio = new Audio();
recognition.continuous = true;
recognition.interimResults = true;
recognition.onresult = function(event) {
if (event.results[0].isFinal) {
// do stuff with `event.results[0][0].transcript`
console.log(event.results[0][0].transcript);
recognition.stop();
}
}
recognition.onaudiostart = e => {
console.log("audio capture started");
}
recognition.onaudioend = e => {
console.log("audio capture ended");
}
audio.oncanplay = () => {
recognition.start();
audio.play();
}
audio.src = "/path/to/audio";
简短的回答是否。
Web Speech Api Specification 不禁止这样做(浏览器可以允许最终用户选择一个文件作为输入),但音频输入流永远不会提供给调用 javascript代码(在当前草案版本中),因此您无法读取或更改输入到语音识别服务的音频。
此规范旨在让 javascript 代码只能访问来自语音识别服务的结果文本。
基本上你只能将它与 OS 级别上选择的 default
音频输入设备一起使用...
因此您只需将文件播放到 default
音频输入
2 个可能的选项:
1
- 安装https://www.vb-audio.com/Cable/
- 更新系统设置以将 VCable 设备用作
default
音频输出和音频输入
- 使用您拥有的任何音频播放器播放您的文件
- 识别它...例如甚至使用标准演示 UI https://www.google.com/intl/fr/chrome/demos/speech.html
今天测试了一下,效果很好:-)
2
这不是我测试的,所以我无法确认它是否有效,但您可以使用 Selenium 将音频文件输入 chrome... 就像
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
ChromeOptions options = new ChromeOptions();
options.addArguments("--allow-file-access-from-files",
"--use-fake-ui-for-media-stream",
"--allow-file-access",
"--use-file-for-fake-audio-capture=D:\PATH\TO\WAV\xxx.wav",
"--use-fake-device-for-media-stream");
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
ChromeDriver driver = new ChromeDriver(capabilities);
但我不确定这个流是否会取代 default
audioinput
Andri 删除了这个 post 但我会重新post 它因为我认为它是最准确的答案,除了上面的 hackish 答案:
根据 MDN 你不能那样做。您不能将任何流输入识别服务
这是个大问题...您甚至不能 select SpeechRecognition
使用的麦克风
这是有目的的,Google 想卖掉他们的 CLOUD SPEECH API
您需要使用CLOUD SPEECH API
等服务
您可能只使用麦克风启动 SpeechRecognition 引擎并通过扬声器播放音频文件以将反馈反馈到麦克风。当我测试它时它对我有用。
我想将 SpeechRecognition api 与音频文件(mp3、wave 等)一起使用 这可能吗?
是的,可以使用 webkitSpeechRecognition
获取音频文件播放的文本记录。文字记录的质量取决于音频播放的质量。
const recognition = new webkitSpeechRecognition();
const audio = new Audio();
recognition.continuous = true;
recognition.interimResults = true;
recognition.onresult = function(event) {
if (event.results[0].isFinal) {
// do stuff with `event.results[0][0].transcript`
console.log(event.results[0][0].transcript);
recognition.stop();
}
}
recognition.onaudiostart = e => {
console.log("audio capture started");
}
recognition.onaudioend = e => {
console.log("audio capture ended");
}
audio.oncanplay = () => {
recognition.start();
audio.play();
}
audio.src = "/path/to/audio";
简短的回答是否。
Web Speech Api Specification 不禁止这样做(浏览器可以允许最终用户选择一个文件作为输入),但音频输入流永远不会提供给调用 javascript代码(在当前草案版本中),因此您无法读取或更改输入到语音识别服务的音频。
此规范旨在让 javascript 代码只能访问来自语音识别服务的结果文本。
基本上你只能将它与 OS 级别上选择的 default
音频输入设备一起使用...
因此您只需将文件播放到 default
音频输入
2 个可能的选项:
1
- 安装https://www.vb-audio.com/Cable/
- 更新系统设置以将 VCable 设备用作
default
音频输出和音频输入 - 使用您拥有的任何音频播放器播放您的文件
- 识别它...例如甚至使用标准演示 UI https://www.google.com/intl/fr/chrome/demos/speech.html
今天测试了一下,效果很好:-)
2
这不是我测试的,所以我无法确认它是否有效,但您可以使用 Selenium 将音频文件输入 chrome... 就像
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
ChromeOptions options = new ChromeOptions();
options.addArguments("--allow-file-access-from-files",
"--use-fake-ui-for-media-stream",
"--allow-file-access",
"--use-file-for-fake-audio-capture=D:\PATH\TO\WAV\xxx.wav",
"--use-fake-device-for-media-stream");
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
ChromeDriver driver = new ChromeDriver(capabilities);
但我不确定这个流是否会取代 default
audioinput
Andri 删除了这个 post 但我会重新post 它因为我认为它是最准确的答案,除了上面的 hackish 答案:
根据 MDN 你不能那样做。您不能将任何流输入识别服务
这是个大问题...您甚至不能 select SpeechRecognition
使用的麦克风这是有目的的,Google 想卖掉他们的 CLOUD SPEECH API
您需要使用CLOUD SPEECH API
等服务您可能只使用麦克风启动 SpeechRecognition 引擎并通过扬声器播放音频文件以将反馈反馈到麦克风。当我测试它时它对我有用。