我想用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)
可能导致这种情况的原因是什么?我该怎么做才能纠正它?
通过创建如下界面,我能够在TypeScript中运行SpeechRecognition,并且工作正常:
namespace CORE{
export interface IWindow extends Window{
webkitSpeechRecognition: any;
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试对SpeechSynthesis使用相同的方式,但是在字段中,以下代码不起作用:
namespace CORE{
export interface IWindow extends Window{
SpeechSynthesisUtterance: any;
speechSynthesis: any;
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
SpeechRecognitionTypeScript的最佳实践,还是有更好的方法。
SpeechSynthesis在TypeScript中使用。供参考,以下是我的工作代码SpeechRecognition:
namespace CORE{
export interface IWindow extends Window{
webkitSpeechRecognition: any;
}
}
namespace CORE{
export class speakRecognation{
// spoken:string;
constructor(input:HTMLInputElement){
var audio = new Audio('/sounds/sound.mp3');
//Voice recognition
const {webkitSpeechRecognition}: IWindow = <IWindow>window;
const recognition = new webkitSpeechRecognition();
recognition.continuous = false;
recognition.interimResults = true;
input.addEventListener("click", function(){ …Run Code Online (Sandbox Code Playgroud) speechSynthesis.getVoices()在Chrome中运行时,我会列出可能的声音。列表会根据计算机和Chrome版本的不同而变化。
有什么办法可以扩展支持并增加声音?
我觉得这可以通过要求用户下载他们选择的语言的语音文件来完成。是否存在这样的文件?
编辑:
这需要同时适用于Windows和Mac计算机。
它也必须很简单,因此不需要脚本或任何需要大量技术知识的东西。我希望有一种“下载并安装”类型的东西
javascript voice text-to-speech speech-synthesis webspeech-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根本不会触发变声事件。
复杂的事情,我实际上没有任何苹果设备,因此我不得不通过让朋友尝试一下来弄清楚。 …
每当我运行此代码时,我都会得到一个女性响应,然后第二次我得到一个男性声音,如果我尝试再次运行它,它将无法响应。
这是代码/
var aiload = document.getElementById('ai').innerHTML
var msg = new SpeechSynthesisUtterance(aiload);
var voices = window.speechSynthesis.getVoices();
voices.forEach(function (voice, i) {
var voiceName = 'Google UK English Female';
var selected = '';
if(voiceName == 'native') {
selected = 'selected';
}
var option = "<option value='" + voiceName + "' " + selected + " >" + voiceName + "</option>";
voiceSelect.append(option);
console.log(voiceName);
});
msg.volume = 1; // 0 to 1
msg.rate = 1; // 0.1 to 10
msg.pitch = 0; //0 to 2 …Run Code Online (Sandbox Code Playgroud) 在网页中,我想要一个女性的声音说出我的文本.我尝试通过以下代码执行此操作.但是现在男声仍在说话.我怎样才能安排女声说话?任何人都可以与我分享一个适用于谷歌浏览器的正确代码.
var voices = speechSynthesis.getVoices();
var msg = new SpeechSynthesisUtterance("Hello World!");
msg.default=false;
msg.localservice=true;
msg.lang = "en-GB";
msg.voice = voices[3].name;
speechSynthesis.speak(msg);
Run Code Online (Sandbox Code Playgroud) 我在 chrome 中使用语音合成的语音到文本服务。直到 2 分钟前,它都像魅力一样工作,一切正常,但没有声音!
这是我的代码:
var msg = new SpeechSynthesisUtterance();
msg.volume = options.volume;
msg.rate = options.rate;
msg.pitch = options.Pitch;
msg.lang = options.lang;
msg.text = options.text;
window.speechSynthesis.speak(msg);
Run Code Online (Sandbox Code Playgroud)
有通话限制之类的吗?
我在这两种情况下都使用了这个确切的代码。
var msg = new SpeechSynthesisUtterance();
var voices = window.speechSynthesis.getVoices();
msg.voice = voices[1];
msg.text = "hello world";
msg.lang = 'en-US';
speechSynthesis.speak(msg);
Run Code Online (Sandbox Code Playgroud)
如果我在 chrome 控制台中运行它,我会听到一个女声。但是如果我将确切的代码放在 index.html 中并运行它,它会播放男性声音。任何人都可以澄清为什么会出现这种差异。提前致谢。
如果我提供一个语音合成器(节日,在这种情况下,但它适用于所有),下面的文字:
"在美国的USPGA锦标赛上,BBC的记者去了MIA".它写着"在美国的uspga锦标赛中,BBC的记者去了mia".
换句话说,我猜这是因为它是一组辅音,它正确地读取"BBC",但却从其他人那里得到"单词".
我想,最简单的方法是通过一个php脚本来运行它,它寻找2个或更多的大写字母,并简单地将这个单词"爆炸"成空格,如USPG A.
我意识到这会导致像"我告诉他不要这样做"这样的事情的奇怪,但在新闻报道中往往会发生更少.
这就是事情; 我可以"爆炸"一个词好吧,问题是,我是那些尽管经过几个月的尝试,却无法理解REGEX某些方面的人之一.在这种情况下,它正在寻找:在大写字母中彼此相邻的两个或多个字母.
我之前给出所有前导码的原因是万一有更好的方法可以做到这一点我没有找到或通过 - 或许是一个词汇或其他东西的缩写词.
是否可以安装和配置一些男性声音android.speech.tts.Voice?我读过一些消息,说Android最近已经提供了一些消息,但是我找不到或配置任何消息。我尝试使用命令的tts.setLanguage(Locale.ITALY);都是女性。
speech-synthesis ×10
javascript ×5
android ×1
festival ×1
google-voice ×1
html5 ×1
node.js ×1
php ×1
regex ×1
safari ×1
typescript ×1
voice ×1
web ×1