SpeechSynthesis
Baseline Широко доступно *
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с сентября 2018 года.
* Некоторые части этой функции могут иметь различный уровень поддержки.
Интерфейс SpeechSynthesis API речи веб-страниц — это интерфейс-контроллер для службы речи; он может использоваться для получения информации о доступных на устройстве голосах синтеза, запуска и приостановки речи и других команд.
Свойства экземпляра
SpeechSynthesis также наследует свойства от своего родительского интерфейса, EventTarget.
-
SpeechSynthesis.pausedТолько для чтения -
Булево значение, которое возвращает
true, если объектSpeechSynthesisнаходится в приостановленном состоянии. -
SpeechSynthesis.pendingТолько для чтения -
Булево значение, которое возвращает
true, если очередь произнесений содержит ещё не произнесённые произнесения. -
SpeechSynthesis.speakingТолько для чтения -
Булево значение, которое возвращает
true, если произнесение в настоящее время находится в процессе произнесения — даже еслиSpeechSynthesisнаходится в приостановленном состоянии.
Методы экземпляра
SpeechSynthesis также наследует методы от своего родительского интерфейса, EventTarget.
SpeechSynthesis.cancel()-
Удаляет все произнесения из очереди произнесений.
SpeechSynthesis.getVoices()-
Возвращает список объектов
SpeechSynthesisVoice, представляющих все доступные голоса на текущем устройстве. SpeechSynthesis.pause()-
Переводит объект
SpeechSynthesisв состояние паузы. SpeechSynthesis.resume()-
Переводит объект
SpeechSynthesisв состояние без паузы: возобновляет его, если он уже был приостановлен. SpeechSynthesis.speak()-
Добавляет
utteranceв очередь произнесений; он будет произнесён, когда все другие произнесения, стоящие в очереди перед ним, будут произнесены.
События
Прослушивайте это событие, используя addEventListener() или назначив обработчик событий свойству oneventname этого интерфейса.
voiceschanged-
Вызывается, когда изменился список объектов
SpeechSynthesisVoice, которые будут возвращены методомSpeechSynthesis.getVoices(). Также доступно через свойствоonvoiceschanged.
Примеры
Сначала пример:
let utterance = new SpeechSynthesisUtterance("Hello world!");
speechSynthesis.speak(utterance);
Теперь рассмотрим более полный пример. В нашей демо-версии синтезатора речи мы сначала получаем ссылку на контроллер SpeechSynthesis с помощью window.speechSynthesis. После определения необходимых переменных мы получаем список доступных голосов с помощью SpeechSynthesis.getVoices() и заполняем им выпадающий список, чтобы пользователь мог выбрать нужный голос.
Внутри обработчика inputForm.onsubmit мы останавливаем отправку формы с помощью preventDefault(), создаём новый экземпляр SpeechSynthesisUtterance, содержащий текст из текстового <input>, устанавливаем голос произнесения на голос, выбранный в элементе <select>, и запускаем произнесение с помощью метода SpeechSynthesis.speak().
const synth = window.speechSynthesis;
const inputForm = document.querySelector("form");
const inputTxt = document.querySelector(".txt");
const voiceSelect = document.querySelector("select");
const pitch = document.querySelector("#pitch");
const pitchValue = document.querySelector(".pitch-value");
const rate = document.querySelector("#rate");
const rateValue = document.querySelector(".rate-value");
let voices = [];
function populateVoiceList() {
voices = synth.getVoices();
for (let i = 0; i < voices.length; i++) {
const option = document.createElement("option");
option.textContent = `${voices[i].name} (${voices[i].lang})`;
if (voices[i].default) {
option.textContent += " — DEFAULT";
}
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 = (event) => {
event.preventDefault();
const utterThis = new SpeechSynthesisUtterance(inputTxt.value);
const selectedOption =
voiceSelect.selectedOptions[0].getAttribute("data-name");
for (let i = 0; i < voices.length; i++) {
if (voices[i].name === selectedOption) {
utterThis.voice = voices[i];
}
}
utterThis.pitch = pitch.value;
utterThis.rate = rate.value;
synth.speak(utterThis);
inputTxt.blur();
};
Спецификации
| Спецификация |
|---|
| Web Speech API # tts-section |
Совместимость с браузерами
| Рабочий стол | Мобильное устройство | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
SpeechSynthesis |
33 | 14 | 49 | 21 | 7 | 33 | 62 | Нет | 7 | 3.0 | Нет |
cancel |
33 | 14 | 49 | 21 | 7 | 33 | 62 | Нет | 7 | 3.0 | Нет |
getVoices |
33 | 14 | 49 | 21 | 7 | 33 | 62 | Нет | 7 | 3.0 | Нет |
pause |
33 | 14 | 49 | 21 | 7 | 33В Android,pause() завершает текущее произнесение. pause() ведёт себя так же, как cancel(). |
62В Android,pause() завершает текущее произнесение. pause() ведёт себя так же, как cancel(). |
Нет | 7 | 3.0В Android,pause() завершает текущее произнесение. pause() ведёт себя так же, как cancel(). |
Нет |
paused |
33 | 14 | 49 | 21 | 7 | 33 | 62 | Нет | 7 | 3.0 | Нет |
pending |
33 | 14 | 49 | 21 | 7 | 33 | 62 | Нет | 7 | 3.0 | Нет |
resume |
33 | 14 | 49 | 21 | 7 | 33 | 62 | Нет | 7 | 3.0 | Нет |
speak |
33 | 14 | 49 | 21 | 7 | 33 | 62 | Нет | 7 | 3.0 | Нет |
speaking |
33 | 14 | 49 | 21 | 7 | 33 | 62 | Нет | 7 | 3.0 | Нет |
voiceschanged_event |
33 | 14 | 49 | 21 | 16 | 33 | 62 | Нет | 16 | 3.0 | Нет |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesis