我想用Web Speech API大声说出一系列单词.
这些词是一,二,三,四,五.
在Chrome上说出单词时,下面的脚本会显示第一个单词,然后重复最后一个单词,直到迭代完成,语音输出为:
一,五,五,五,五.
在Firefox上,脚本说第一个单词然后停止,语音输出是:
一个.
我已经把东西记录到控制台,试图弄清楚发生了什么,这是两个浏览器的结果.
word: one
message: one
word: two
message: two
word: three
message: three
word: four
message: four
word: five
message: five
Run Code Online (Sandbox Code Playgroud)
控制台的输出是所需的语音输出,所以我不确定到底发生了什么.
var msg = new SpeechSynthesisUtterance();
var words = ['one', 'two', 'three', 'four', 'five'];
for (var i = 0; i < words.length; i++) {
msg.text = words[i];
console.log('word: ' + words[i]);
console.log('message: ' + msg.text);
window.speechSynthesis.speak(msg);
}
Run Code Online (Sandbox Code Playgroud)
可能导致这种情况的原因是什么?我该怎么做才能纠正它?
speechSynthesis.getVoices()
在Chrome中运行时,我会列出可能的声音。列表会根据计算机和Chrome版本的不同而变化。
有什么办法可以扩展支持并增加声音?
我觉得这可以通过要求用户下载他们选择的语言的语音文件来完成。是否存在这样的文件?
编辑:
这需要同时适用于Windows和Mac计算机。
它也必须很简单,因此不需要脚本或任何需要大量技术知识的东西。我希望有一种“下载并安装”类型的东西
javascript voice text-to-speech speech-synthesis webspeech-api
有人能告诉我这是什么吗
const grammar = '#JSGF V1.0; grammar colors; public <color> = aqua | azure | beige | bisque | black | blue | brown | chocolate | coral | crimson | cyan | fuchsia | ghost | white | gold | goldenrod | gray | green | indigo | ivory | khaki | lavender | lime | linen | magenta | maroon | moccasin | navy | olive | orange | orchid | peru | pink | plum | purple …
Run Code Online (Sandbox Code Playgroud) 您好,
我目前正在尝试在我的应用程序上实现语音识别功能。根据此处的JS 文档,自 Safari 14.1 起支持语音转文本。另外,我正在使用以下配置:
const { webkitSpeechRecognition } = (window as any)
const recognition = new webkitSpeechRecognition();
recognition.lang = 'pt-BR';
recognition.continuous = true;
recognition.interimResults = false;
recognition.maxAlternatives = 1;
// Avoid garbage collection bugs
this.garbage.push(recognition);
recognition.start();
Run Code Online (Sandbox Code Playgroud)
在 Chrome 上它工作得很好,但在 Safari 上识别结果非常糟糕。它有时能理解我的意思,但常常会误解我的话,给我错误的结果。例如,如果我说:“你好助手,更改对比度”,结果可能类似于:“你好助手充电合同你好助手充电”之类的。
这个问题的一个特点是 safari 上的语音识别接口触发的事件只是start
和audiostart
。
有没有人面临类似的问题或找到了解决这个问题的方法?我还接受在我的应用程序上实现语音识别的替代方案。
提前致谢!
就我而言,您可以通过访问任何依赖 Web Speech API 的网站来看到此问题。您可以检查一些示例:
据我所知,在Mac或iOS中,在Safari中均不会触发voiceschanged事件。同样奇怪的是,它似乎也没有在iOS上的Chrome中启动,但是我假设iOS上的Chrome使用与Safari相同的JavaScript引擎。
这是我用来验证的一个演示:http : //jsbin.com/gosaqihi/9/edit?js,控制台(摘自“ 获取语音中的语音列表”,Chrome合成(Web Speech API))
我也尝试过使用addEventListener:
speechSynthesis.addEventListener("voiceschanged", function () {
var voices = speechSynthesis.getVoices(),
keys = Object.keys(voices[0]),
i, j;
document.write("<table border=1><tr>");
for ( i = 0; i < keys.length; i++ ) {
document.write("<td>" + keys[i] + "</td>");
}
document.write("</tr>");
for ( i = 0; i < voices.length; i++ ) {
document.write("</tr>");
for ( j = 0; j < keys.length; j++ ) {
document.write("<td>" + voices[i][keys[j]] + "</td>");
}
document.write("</tr>");
}
document.write("<table>");
}, false);
Run Code Online (Sandbox Code Playgroud)
两种方法(onvoiceschanged,addEventListener)在Windows,Android和Mac的Chrome浏览器中都可以正常运行,但在iOS的Chrome和Mac和iOS的Safari浏览器中无法运行。据我所知,Safari根本不会触发变声事件。
复杂的事情,我实际上没有任何苹果设备,因此我不得不通过让朋友尝试一下来弄清楚。 …
我正在编写一个 React 应用程序,并使用Web Speech API进行语音和语音识别。我编写了一些适用于桌面 Chrome 的代码。我向用户请求许可的方式如下:
navigator.mediaDevices
.getUserMedia({ audio: true })
.then(function (stream) {
console.log('Succeeded');
/*Handle success*/
})
.catch(function (err) {
console.log('Failed: ', err)
/*Handle failure*/
});
Run Code Online (Sandbox Code Playgroud)
但是,当从我的 Android 手机使用时,相同的代码始终会转到 catch 回调,并将以下内容写入控制台:
Failed: DOMException: Could not start audio source
Run Code Online (Sandbox Code Playgroud)
该网站询问我是否允许使用麦克风,当我进入网站设置时,它说允许使用麦克风和声音,这让我相信我已经很好地完成了用户交互部分。该网站通过 HTTPS 提供服务(已经解决了该问题),因此我相信这也不是问题。
本次测试中我使用的是小米 9 和 Chrome Chrome 86.0.4240.185。
我的第一直觉是我在这里做错了什么?如果是这样的话,怎么办?否则,我可以做什么来解决这个问题?
我正在使用angular-webspeech-directive
这是HTML代码:
<!DOCTYPE html>
<html ng-app="plunker">
<head>
<meta charset="utf-8" />
<title>TestBed</title>
<link data-require="bootstrap-css@3.0.0" data-semver="3.0.0" rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" />
<link data-require="font-awesome@4.3.0" data-semver="4.3.0" rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" />
<link href="//netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome.css" rel="stylesheet" />
<link rel="stylesheet" href="css/style.css" />
</head>
<body ng-controller="MainCtrl" ng-cloak="">
<div class="container">
<div class="row">
<div class="col-md-12">
asdfasdf
<js-speech ng-model="speech"></js-speech>
<!--
<pre>js-speech ng-model="speech"</pre>
<br />-->
<strong>Debugger</strong>
<pre>$scope.speech:{{speech|json}}</pre>
</div>
</div>
</div>
<!-- Application Scripts -->
<script data-require="jquery@2.0.3" data-semver="2.0.3" src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
<script data-require="angular.js@1.0.x" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js" data-semver="1.0.8"></script>
<script data-require="modernizr@2.6.2" data-semver="2.6.2" src="//cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.js"></script>
<script src="js/Speech.js"></script>
<script src="js/speechapp.js"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这是角度speechapp.js
(function() { …
Run Code Online (Sandbox Code Playgroud)