Javascript SpeechSynthesis如何返回选定的语言列表?
各位早上好, 我还在写一份针对文盲的调查问卷。为此,我使用了一个文本到语音的应用程序(感谢@JO3-W3B-D3V) 问题在于调查问卷将以多种语言开发,这意味着文本到语音应用程序也必须支持多种语言Javascript SpeechSynthesis如何返回选定的语言列表?,javascript,speech-to-text,speech-synthesis,Javascript,Speech To Text,Speech Synthesis,各位早上好, 我还在写一份针对文盲的调查问卷。为此,我使用了一个文本到语音的应用程序(感谢@JO3-W3B-D3V) 问题在于调查问卷将以多种语言开发,这意味着文本到语音应用程序也必须支持多种语言 SpeechSynthesis.getVoices() 如果我理解正确,上述函数将返回表示当前设备上所有可用语音的所有对象的列表。现在回答我的问题: 有没有办法返回这些语言的选择?例如,列表不应返回设备上可用的所有15种语言,而应仅返回所选的4种语言 有没有办法向设备添加更多语言?我用的是铬。如果我
SpeechSynthesis.getVoices()
如果我理解正确,上述函数将返回表示当前设备上所有可用语音的所有对象的列表。现在回答我的问题:
演讲合成的方式编写了这个片段
假设
正如代码注释中所述,我编写此代码段的方式确保没有重复的条目,即在下面的代码段中,您将得到一个列表,其中只包含一个支持英语的实体。换句话说,你不会同时拥有en GB
、en US
,当然你可以改变这一点,我只是假设你想要这种类型的功能,当然这完全取决于你&你的需求
//为了生活而生活。
(功能(){
“严格使用”;
//这是您希望支持的语言的简单列表。
var-supportedLanguages=['en','de','es','fr'];
var语言=[];
//这本质上类似于jQuery的$.ready。
var ready=函数(回调){
var d=文件,
s=d.readyState;
//已加载的DOMContentLoaded被激发
如果(s==“完成”| | s==“加载”| | s==“交互”){
回调();
}否则{
如果(d.addEventListener){
d、 addEventListener(“DOMContentLoaded”,回调,false);
}否则{
d、 attachEvent(“onDOMContentLoaded”,回调);
}
}
};
//这只是一个简单的函数,用于处理您是否愿意
//是否将语音推送到阵列上。
var shouldush=函数(数组、对象){
var language=object.lang | |“”;
var snipped=language.substring(0,2);
//生成所有已知语言的列表。
var languageList=array.map(函数(对象){
返回object.lang;
});
//创建一个简短语言名称列表。
var snippedList=languageList.map(函数(语言){
返回语言。子字符串(0,2);
});
//我个人认为,除了一个臃肿的if语句之外
//更具可读性。
//
//仅推送相关实体,保存任何重复实体,即。
//这将不允许en US和en GB都在列表中,
//这是可以改变的,这仅仅是基于你
//不希望同时使用en US和en GB等。
var isToPush=!snippedList.includes(已剪切)&&
!languageList.includes(语言)&&
支持的语言。包括(剪切);
//如果为true,则推送到数组。
如果(isToPush){
array.push(对象);
}
//然后当然返回数组对象。
返回数组;
};
//这基本上是您选择支持的声音列表。
var getSelectedLanguages=function(){
languages=speechSynthesis.getVoices().reduce(shouldush,[]);
};
//此代码段的起点。
var start=function(){
speechSynthesis.onvoiceschanged=函数(){
getSelectedLanguages();
console.log(语言);
};
};
//准备好后运行代码。
准备好(开始);
})();代码>首先谢谢你。你证实了我的想法,即我的第二个问题缺乏信息。关于代码我仍在挣扎。我是否需要在您在我的第一个问题中提供的基础上额外使用它?我也尝试过合并这两个代码,但我又一次缺乏帮助的技能。@InPanic你能告诉我你做了什么或你想做什么,我就做一个JSFiddle什么的吗?