语音合成API音量,速率和音高不起作用

时间:2014-08-09 22:09:54

标签: speech-synthesis webspeech-api

长话短说,语音合成音量,速率和音调都不起作用。有没有其他人有这个问题,知道如何解决它,或者我一个人?

长篇故事:

对我来说,语音合成的音量,速率和音调都不起作用。这是我的演讲功能:

function speak(message, voice, callback, volume, rate, pitch, start, lang) {
    if (speech) {
        window.speechSynthesis.onvoiceschanged = function() {
            voices = window.speechSynthesis.getVoices();
            var msg = new SpeechSynthesisUtterance();
            msg.voice = (typeof voice != "undefined" && voice != 0) ? voices[voice] : voices[0]; // Note: some voices don't support altering params
            msg.volume = (typeof volume != "undefined" && volume != 0) ? volume : 1; // 0 to 1
            msg.rate = (typeof rate != "undefined" && rate != 0) ? rate : 1; // 0.1 to 10
            msg.pitch = (typeof pitch != "undefined" && pitch != 0) ? pitch : 2; //0 to 2
            msg.text = message;
            msg.lang = (typeof lang != "undefined" && lang != 0) ? lang : "en-US";

            msg.onstart = function(event) {
                if (typeof start != "undefined" && start != 0) {
                    start(event);
                }
            }

            msg.onend = function(event) {
                console.log(event.elapsedTime);
                if (typeof callback != "undefined" && callback != 0) {
                    callback(event);
                }
            };

            speechSynthesis.speak(msg);
        };
    }
}

然而,当我致电speak("Hello", 0, 0, 0.1)时,它会输出与speak("Hello")完全相同的内容。我想让它输出相同的东西但更柔和。

我目前正在关注http://updates.html5rocks.com/2014/01/Web-apps-that-talk---Introduction-to-the-Speech-Synthesis-API

4 个答案:

答案 0 :(得分:1)

出于某种原因,如果您将语言更改为en-EN,则参数将起作用。

答案 1 :(得分:0)

从我所看到的情况来看,设置这些参数仅在语音来自local service时生效。

正如您所指出的,这可能是并非所有声音都支持设置参数的情况。

答案 2 :(得分:0)

我也想尝试做同样的事情。但我设法通过添加一个我希望它减速的fullstop来使其工作。我知道这不是正确的方法,但它对我有用

var u = new SpeechSynthesisUtterance();
        u.text = 'Welcome to Handy Mandy. Lets Get Started. Say Handy Mandy.';
        //u.lang = 'en-US';
        //u.rate = 10;
        //u.onend = function(event) { alert('Finished in ' + event.elapsedTime + ' seconds.'); }
        speechSynthesis.speak(u);

在此之前

答案 3 :(得分:0)

这更像是一个评论,但它可能是一个错字。

看起来,Speech Synthesis类也有一个rate属性。

务必将其设置在话语而不是语音合成对象上。

不正确:

speechSynthesis.rate = 2;
speechSynthesis.speak(utterance);

正确:

utterance.rate = 2;
speechSynthesis.speak(utterance);