我正在使用webkitSpeechRecognition实例访问Chrome中的本机语音识别.问题是Web Speech API规范没有涵盖亵渎性过滤的主题,但默认情况下,Google的Speech API启用了亵渎性过滤器.这不是一个主要问题 - 幸运的是,Web Speech API的默认过滤器显示第一个字母,并将其余部分隐藏在星号下.然而,有些情况下,以某个字母开头且具有一定长度的单词来自不同的cuss单词并猜测该人所说的内容可能无法给出准确的结果.
这里的问题是:如何控制Chrome中Web Speech API的亵渎过滤级别?JavaScript实例不会公开任何其他(特定于平台的)变量.实际的Speech API具有pfilter可以设置为0(无过滤)的URL参数,1(使用####过滤和替换单词)或2(使用星号过滤和替换除第一个字母以外的所有字符).此参数也为Chrome Extension开发人员公开,它位于SpeechInputStartOptions(但它是一个布尔变量).
PS SpeechInputStartOptions文档介绍了默认的Chrome过滤设置.我无法找到此设置或有关它所在位置的任何信息.即使理想情况下,解决方案也不应该让用户不得不做某事,找到适合它的Chrome浏览器设置仍然是一个突破.
以前的问题已经提出了相同或类似的询问
但似乎没有使用创建的变通方法window.speechSynthesis().虽然有一些解决方法使用epeak,meSpeak 如何在Chrome浏览器中创建文本或将文本转换为音频?或向外部服务器发出请求.
如何捕捉和记录的音频输出window.speechSynthesis.speak()调用和返回结果为Blob,ArrayBuffer,AudioBuffer或其他对象类型?
我想看看网络语音 API 支持哪些语言,并尝试贡献和添加其他语言。
我正在使用网络语音API但是一旦经过一段时间(一分钟或两分钟)而没有任何声音输入,它就会完全停止听.我知道这是因为我把它的解析后的文本记录到控制台,然而,当我不说话一两分钟时它会停止这样做.
有没有什么办法解决这一问题?
我在我的扩展程序中使用Chrome的tts服务.根据chrome.tts文档:
文本的最大长度为32,768个字符.
但是,当我传递超过250个字符的字符串时,引擎将无法读取所有话语(它将停止在单词的中间读取它).我现在想知道这是一个错误还是这个设计.Web语音API具有类似于规范中描述的字符限制,并且其行为方式相同.
我想知道我做错了什么,或者它只取决于浏览器中的TTS引擎而我无法用它做任何事情?
google-chrome text-to-speech google-chrome-extension webspeech-api
呼叫会SpeechRecognition.start自动请求麦克风权限,但是有什么方法可以开始SpeechRecognition自定义MediaStream(例如从getDisplayMedia)?
javascript frontend speech-recognition webspeech-api mediastream
尝试使用Web Speech API时有点痒痒.我完全从文章中复制了代码,我在你说话的时候遇到了问题,但是直到你再说一遍才会发生任何事情.
[小提琴:http://jsfiddle.net/w75v2tm5/ ]
JS:
if (!('webkitSpeechRecognition' in window)) {
//handle error stuff here...
} else {
var recognition = new webkitSpeechRecognition();
recognition.continuous = true;
recognition.interimResults = false;
recognition.start();
var final_transcript = '';
recognition.onresult = function (event) {
var interim_transcript = '';
if (typeof (event.results) == 'undefined') {
recognition.onend = null;
recognition.stop();
upgrade();
return;
}
for (var i = event.resultIndex; i < event.results.length; ++i) {
if (event.results[i].isFinal) {
final_transcript += event.results[i][0].transcript;
} else { …Run Code Online (Sandbox Code Playgroud) 我有一个简单的应用程序,应该读出以所选语言输入到输入字段中的文本:https://speech-synthesis-demo.glitch.me/
这似乎在多个浏览器的桌面上运行良好。但是,当我尝试在 Android 版 Chrome 中运行它时,更改语言似乎没有任何效果,并且仅使用默认语言(在我的例子中为英语)。
出于测试目的,我想做的是测试不同语言的计数。例如,如果您在任何桌面浏览器上的应用程序中输入“一”一词,您将听到以所选语言说出的第一名。然而,在我的 Android 设备上的 Chrome 上,无论从下拉列表中选择哪种语言,我都只能听到“一个”用英语说话。
该代码与MDN上的speechSynthesis示例完全相同: https: //developer.mozilla.org/en-US/docs/Web/API/Window/speechSynthesis
let synth = window.speechSynthesis;
const inputForm = document.querySelector('form');
const inputTxt = document.querySelector('input');
const voiceSelect = document.querySelector('select');
let voices;
function populateVoiceList(){
voices = synth.getVoices();
for(var i=0; i< voices.length; i++){
let option = document.createElement('option');
option.textContent = voices[i].name + ' (' + voices[i].lang + ')';
option.setAttribute('data-lang', voices[i].lang);
option.setAttribute('data-name', voices[i].name);
voiceSelect.appendChild(option);
}
}
populateVoiceList();
if (speechSynthesis.onvoiceschanged !== undefined) {
speechSynthesis.onvoiceschanged = populateVoiceList;
}
inputForm.onsubmit = function(event){
event.preventDefault();
let utterThis …Run Code Online (Sandbox Code Playgroud) 这个问题在某种程度上是为了理解原型get-set。
我有一个场景,需要将SpeechSynthesis支持的语音映射到Google Translation API支持的语言代码。例如,
现在,我可以通过获取语音运行时或存储语音并在 javascript 中的某种方法中对映射进行硬编码来执行相同的操作。如果我采用运行时方法,我需要调用getVoice()并speechSynthesis.onvoiceschanged = () => {}映射号码,这些号码在每个语音更改事件中都会被调用。所以,我想要进行硬编码。
现在,当我将映射数组存储在变量中并通过索引调用它时,我得到了 SpeechSynthesisVoice 对象,就像我们在getVoices()[index].
此外,如果我将此对象值设置为speechSynthesis.voice,则会收到错误:
Uncaught TypeError: Failed to set the 'voice' property on 'SpeechSynthesisUtterance': The provided value is not of type 'SpeechSynthesisVoice'.
Run Code Online (Sandbox Code Playgroud)
这是由于手动存储的对象值的原型不匹配造成的。
例如,
1.SpeechSynthesisVoice对象:
2. 手动存储SpeechSynthesisVoice对象的值:
为了解决这个问题,我使用 获取了 SpeechSynthesisVoice 对象的原型getVoice(),然后将其设置为一个变量,并进一步将此变量设置为我的手动映射对象。喜欢,
得到:
voicePrototype = getVoices()[9].__proto__;
Run Code Online (Sandbox Code Playgroud)
放:
voices[index].SpeechSynthesisVoice.__proto__ = voicePrototype;
Run Code Online (Sandbox Code Playgroud)
并且,它已设置,如下面的屏幕截图所示:
我也尝试过Object.setPrototypeOf()并得到了相同的结果。
现在,当我再次想要将此对象设置为 时speechSynthesis.voice,尽管我的原型匹配,但我仍然遇到相同的错误。
任何人都可以请建议,是否可以同样设置对象原型并使用它?提前致谢。
我正在尝试使用 Web Speech API 来读取网页上的文本。但我发现我的Windows 10中安装的一些SAPI5语音不会显示在输出中speechSynthesis.getVoices(),包括Microsoft Eva MobileWindows 10上通过导入注册表文件“解锁”的语音。这些声音可以在本地 TTS 程序中正常工作Balabolka,但它们只是不会在浏览器中显示。浏览器是否有特定的规则来选择是否列出语音?
webspeech-api ×10
javascript ×7
android ×1
api ×1
audio ×1
frontend ×1
html ×1
html5 ×1
mediastream ×1
speech ×1
webkit ×1