API-интерфейс синтеза речи Chrome не меняет параметры

Я пытаюсь изменить экземпляр параметров API синтеза речи (таких как высота звука, громкость и т. д.), но он не работает. По какой-то причине единственный способ изменить голос с британского мужского на британский женский - это дважды вызвать переменную var voices, но это единственный вариант, который я могу изменить в этом. Вот код:

//After the document loads (using the prototype library)
document.observe("dom:loaded", function() {
    //When the speakMe button is clicked
    $("speakMe").observe('click', function() {
        //Get the entered phrase
        phrase = $('phraseBar').getValue();
        //If the phrase is blank
        if(phrase =="")
        {
            //Warning message
            alert("Please enter a phrase before asking me to speak for you. Thank you!");
        }
        else
        {
            //Declare the speach object & set attributes
            var speech = new SpeechSynthesisUtterance(phrase);
            var voices = speechSynthesis.getVoices();
            var options = new Object();
            speech.default = false;
            speech.localservice = true;
            speech.voice = voices.filter(function(voice) { return voice.name == userVoice; })[0];    
            speech.lang = userLang;
            speech.rate = userRate;
            speech.pitch = 2;
            speech.volume = userVolume;

            //Speak the phrase
            window.speechSynthesis.speak(speech);

        }
    });
    var voices = speechSynthesis.getVoices();
});

Любые идеи?


person Phil Young    schedule 27.04.2014    source источник


Ответы (1)


Существует известная проблема Chrome со скоростью, объемом, или параметры высоты тона, не влияющие на некоторые голоса.

Кроме того, причина, по которой speechSynthesis.getVoices() работает во второй раз, заключается в том, что в Chrome его следует вызывать после события onvoiceschanged (см. этот ответ).

person Sarah Elan    schedule 09.02.2015