Как заставить сайт зачитывать новости голосом

Не думал, что придется когда-нибудь с JavaScript ковыряться. Но захотелось прикрутить кнопку голосового чтения текста статьи через HTML5 Speech Synthesis API.

Вместо голосовых движков от Microsoft внутри OS Windows 10 лучше использовать движок от Chrome. Качество заметно лучше как для русского, так и для английского языков.

Но при использовании гугловского движка возникают две проблемы, с которыми уже столкнулись многие. Во-первых, иногда при попытке прочитать большой текст можно услышать лишь вечную тишину. Воспроизведение даже не начинается. А во-вторых, воспроизведение может останавливаться где-то на 250-м символе (то ли по истечении определенного времени - я не разбирался).

Для решения первой проблемы я применил свою же библиотеку “нарезки” HTML-контента на чистые предложения (TXT). Вместо здоровенного текста я делаю итерацию по предложениям, и проблемы больше не наблюдается.

А со вторым моментом все намного сложнее. Некоторые пишут сложные функции разбивания текста на чанки по 200 символов. Не очень красивые решения, честно говоря. Но вот есть одно гениальное, которое, как оказалось, четко справляется с задачей. Достаточно каждые ~ 14 секунд “подталкивать” (resume) говорилку, чтобы она не останавливалась. И все!

...
synth.speak(u);
var r = setInterval(function () {
                // console.log(synth.speaking);
                if (!synth.speaking) clearInterval(r);
                else synth.resume();
            }, 14000);

Пусть это пока хоть и корявенький робот, но с таким функционалом сайты все равно выглядят как-то веселее. Ну а технологии синтеза голоса сейчас продолжают активно улучшаться. Ждем. :)