Как озвучить текст на сайте?

114
12 марта 2022, 08:00

Не могу найти подходящий вариант. Помогите, если знаете.

Мне нужно озвучивать слова. То есть, когда пользователь нажимает на кнопку, то озвучивается всего одно слово.

Если кто знает как, поделитесь примером, пожалуйста

ПС: озвучка нужна на английском языке.

Answer 1

Пример воспроизведения звука через js:

function speak() { 
    let text = document.getElementById('text').value; 
    speechSynthesis.speak(new SpeechSynthesisUtterance(text)); 
} 
speak();
<meta charset="utf-8"> 
<p>Воспроизвести звуки. 
<input id="text"> 
<button onclick="speak();">Произнести вслух</button>

Answer 2

Решил вернуться к данной задаче и добавить более развёрнутое решение.
Хочу сразу отметить, что инициализация speech с декабря 2018 года теперь производится только по активации пользователя.

    var lang = "ru-RU"; // Задаём стандартный язык произношения 
 
    let main = document.querySelector('.main'); // Получаем главное меню 
    let sel = document.querySelector('#lang'); // Получаем селектор для наполнение 
    let sound = document.querySelector('#text'); // Получаем элемент input 
    let land = window.speechSynthesis.getVoices(); // Тестовый вызов для получения языков(Так как speech с 2018 года работает исключительно по активации. 
    activate.onclick = function() { // При нажатии на кнопку 
        let reactivate = window.speechSynthesis.getVoices(); // Реактивируем получения языков воспроизводимости 
        reactivate.forEach(function (c) { //Для каждого элемента 
            let opt = document.createElement('option'); // Создаём option 
            opt.value = c.lang; // В value помещяем код языка 
            opt.innerText = c.name; // В текст option название языка 
            sel.appendChild(opt); // Добавляем в селект 
        }); 
        document.querySelector('#activate').style.display = 'none'; // Скрываем начальную кнопку 
        main.style.display = 'block'; // Показываем основной блок 
    }; 
 
    sel.onchange = function () { // При выборе селекта 
        lang = this.value; // Меняем язык на выбранный 
    }; 
    function speak(){ // Функция речи 
        var speech = window.speechSynthesis, // Объявляем переменные 
            voice = '', 
            ourvoice = []; // Сюда будем складывать доступные звуки браузера 
        if (0 === ourvoice.length) { // Если равно нулю, то... 
            var voices = speech.getVoices(); // Получаем все языки 
        } 
        for (var i = 0; i < voices.length; i++) { // Находим указанный в списке 
            if (lang == voices[i].lang) { 
                voice = voices[i]; // Ставим язык как параметр 
            } 
        } 
        var readme = new SpeechSynthesisUtterance(sound.value); // вводим текст 
        readme.voice = voice; // Задаём язык произношения 
        speech.speak(readme); // Произносим 
    }
    .main{ 
        display: none; 
    }
<button id="activate">Начать</button> 
<div class="main"> 
    <p>Введите текст 
    <input id="text"> 
    <p>Выберите язык произношения<select id="lang"> 
    </select> 
    <button onclick="speak();">Произнести вслух</button> 
</div>

PS Постарался добавить больше комментариев для понимания работы кода.

Answer 3

Произнести на всех английских:

activate.onclick = function() { // При нажатии на кнопку
  let reactivate = window.speechSynthesis.getVoices(); 
  let text = "What do you want to know?";
  reactivate.forEach(function(v) {
    if (/^en-/.test(v.lang)) {
      let utterance = new SpeechSynthesisUtterance(text);
      utterance.onstart = function(event) { // SpeechSynthesisEvent
        console.dir(event.utterance.voice.name);
      }
      utterance.voice = v;
      window.speechSynthesis.speak(utterance);
    }
  });
};
<button id="activate">Нажать 2 раза</button>

READ ALSO
Как объединить код js в один файл

Как объединить код js в один файл

Я пытаюсь разобраться что натворил разработчик но я не могу понять как это блин работает

185
Скроллинг страницы с lazy load

Скроллинг страницы с lazy load

У меня есть страница с товарами, на неё сразу выводится 12 товаров, а потом когда страница проскроллилась до конца, скрипт обращается к PHP, передает...

105
NodeJS/ExcelJS. Как выгрузить большое кол-во строк в excel?

NodeJS/ExcelJS. Как выгрузить большое кол-во строк в excel?

Есть парсер, который получает 3000 строк в минутуНеобходимо записать все это в excel

140
Игра на javascript. если ли способ вставить переменную в css? чтобы блоки на css и js скользили по линиям

Игра на javascript. если ли способ вставить переменную в css? чтобы блоки на css и js скользили по линиям

Делаю игрушку на js возникла проблемаБлоки на css и они должны чередоваться, вопрос как поставить переменную в стиль чтобы генерировать блоки...

219