Категорически приветствую коллег.
Хочу поделиться опытом использования TTS для  быстрого создания аудиокниг из текстовых форматов.

Постановка задачи

В те давние, давние годы, когда слово "удаленка" было из области  фантастики, а путь на работу и обратно занимал заметную часть жизни, чтение книг было практически единственным способом не свихнуться в пути. Особенно остро вставал вопрос в командировке. Это приводило к тому, что до половины веса багажа составляли бумажные тома. При переезде я отнес три здоровенных рюкзака в ближайшую библиотеку, и это только те книги, перечитывать которые я точно не планировал.

Годы шли и наконец настал день, когда я приобрел Palm IIIc, заменивший стопку книг в багаже. Потом было чтение книг на крохотном экране телефона Samsung M75, затем первый андроид. К сожалению, пока развивалась техника, я не молодел, глаза стали сдавать.

PALM IIIc
PALM IIIc

Чтобы глаза поберечь, появилась идея слушать аудиокниги. Какое же было мое разочарование после нескольких попыток это сделать.

Что же мне не понравилось при озвучке людьми:

  • скорость чтения - я привык к гораздо более быстрой подачи информации.

  • лишняя эмоциональность чтецов, игра голосом когда не надо. Мое воображение и воображение человека, который читает книгу различно, и часто не совпадает.

  • Плавающая громкость чтения, когда чтец играет голосом, особенно заметно в машине или в общественном транспорте.

  • Часто попадаются чтецы, голос которых раздражает, их вообще невозможно слушать. 

  • Далеко не все книги есть в аудио версии.

Поиск решения привел меня к компоненту TTS (Text To Speech). Из доступных приложений я остановился на замечательной OpenSource программе RHVoice Ольги Яковлевой.

Пробовал платные предложения, но сильного повышения качества не обнаружил (по крайней мере на тот момент). Программа требует персональной настройки. Из недостатков, что режут мне слух с установками этой программы по умолчанию, это ударения передОхнул, вместо передохнУл. Поэтому  рекомендую подключать словарь. Периодически встречаются другие косяки озвучки, но я как-то привык и этого уже не замечаю.

Данная программа доступна для Windows, Linux и Android. Доступность для Mac не проверял, бо с ним не работал. Такая доступность очень удобна, так как позволяет использовать одни и те же настройки как на компе с разными ОС, так и на телефоне.

Не торопитесь плеваться с первой попытки прослушать фрагмент текста. Для нормального результата нужно подобрать три параметра:

  • голос

  • скорость

  • тембр

Например, я в последнее время использую следующие установки для русского языка:

  • Голос Anna

  • Скорость 105%

  • Тембр 80%

Получается четкий, разборчивый  мужской голос ????. Скорее всего, ваши установки будут другими, т.к. на вкус и цвет все фломастеры разные.

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

C  чего начать (Windows)?


Для начала устанавливаем SAPI5 поддержку TTS RHVoice. К сожалению, под Windows требуется установка каждого голоса отдельно.

Качаем готовые русские голоса Aleksandr, Aleksandr-HQ, Anna.
Внимание! Выбирайте SAPI5 (не NVDA!),  с github.
Дополнительно, качаем английские голоса Alan, Clb и устанавливаем их. 

Прямые ссылки на голоса приводить не стал, так как они ведут на файлы вида RHVoice-voice-<Language>-<Voice name>-<version>-setup.exe.

После установки, чтобы познакомиться с TTS, начните с программы Balabolka.
В этом случае вы сможете интерактивно поиграться с голосами, скоростью и тембром, чтобы выбрать наилучший результат для Ваших ушей.

Дополнительно, Если планируете в будущем автоматизировать процесс генерации аудиокниг, рекомендую скачать консольное приложение balabolka_console и консольную утилиту для извлечения текста из файлов.

Далее все просто: вставляем текст для проверки и подбираем голос, скорость и тембр.

Экран "Балаболки"
Экран "Балаболки"

К сожалению, под Windows SAPI5 шкалы настройки этих параметров указываются не в %, а в относительной шкалах -10..+10 с 0 в середине, причем шаг шкалы целочисленный. То есть установить скорость +0.5 не получится.

Используя меню "Сервис", можно запустить полуавтоматическое преобразование текстовых книг в аудио файлы.

C  чего начать (Linux)?

Если у Вас в дистрибутиве уже доступен данный TTS, то просто устанавливаете его.
Например для ubuntu 22.04 (все необходимые голоса уже будут установлены):

sudo apt install rhvoice rhvoice-english rhvoice-russian lame xslproc

Если Вам не повезло, и в дистрибутивах RHVoice нет, то можно скомпилировать.

Дополнительно, можно установить словари/препроцессоры от  г-на vantu5z.

Начинаем подбирать параметры под свое ухо, вот пример подбора параметров для моей дражжжжжайшей половинки:

$ fc -l 100 | grep RHVoice-test
346     cat b.test | RHVoice-test -R 360 -p anna -r 105 -t 100 -v 130 -q max -o - | aplay
347     cat b.test | RHVoice-test -R 360 -p anna -r 105 -t 90 -v 130 -q max -o - | aplay
348     cat b.test | RHVoice-test -R 360 -p anna -r 105 -t 80 -v 130 -q max -o - | aplay
349     cat b.test | RHVoice-test -R 360 -p alexander-hq -r 105 -t 80 -v 130 -q max -o - | aplay
351     cat b.test | RHVoice-test -R 360 -p aleksandr-hq -r 105 -t 80 -v 130 -q max -o - | aplay
352     cat b.test | RHVoice-test -R 360 -p aleksandr-hq -r 110 -t 80 -v 130 -q max -o - | aplay
353     cat b.test | RHVoice-test -R 360 -p aleksandr-hq -r 130 -t 80 -v 130 -q max -o - | aplay
354     cat b.test | RHVoice-test -R 360 -p aleksandr-hq -r 130 -t 90 -v 130 -q max -o - | aplay
355     cat b.test | RHVoice-test -R 360 -p aleksandr-hq -r 130 -t 100 -v 130 -q max -o - | aplay
356     cat b.test | RHVoice-test -R 360 -p aleksandr-hq -r 130 -t 80 -v 130 -q max -o - | aplay
357     cat b.test | RHVoice-test -R 360 -p aleksandr-hq -r 130 -t 70 -v 130 -q max -o - | aplay
358     cat b.test | RHVoice-test -R 360 -p aleksandr-hq -r 130 -t 60 -v 130 -q max -o - | aplay
359     cat b.test | RHVoice-test -R 360 -p aleksandr-hq -r 130 -t 70 -v 130 -q max -o - | aplay
360     cat b.test | RHVoice-test -R 360 -p aleksandr-hq -r 130 -t 60 -v 130 -q max -o - | aplay
361     cat b.test | RHVoice-test -R 360 -p aleksandr-hq -r 120 -t 60 -v 130 -q max -o - | aplay
362     cat b.test | RHVoice-test -R 360 -p aleksandr-hq -r 110 -t 60 -v 130 -q max -o - | aplay


Как только параметры подобраны, можно двигаться дальше.

Для автоматического преобразования форматов fb2 или txt, я использую свой скрипт fb2mp3.sh
Для его использования скопируйте его и файлы deutf8.sh, fb2txt.xslt в директорию $HOME/bin.

Что выполняет этот скрипт:

1) Устанавливает переменные окружения:
TEXTSPLIT_SIZE=20000
PARALLEL_COUNT=8
TXT_TO_WAV
WAV_TO_MP3
Если в текущей директории есть имя rena, устанавливает ее настройки, если нет, то мои.

 2) Ищет fb2 или txt файлы начиная с текущей директории.

3) Создает поддиректорию по имени файла (без расширения).

4) режет полученный текст на куски TEXTSPLIT_SIZE. Для установленного по умолчанию размера в 20000 байт, для кодировки UTF-8, время каждого mp3 файла получается около 10 минут. Дополнительно на этом этапе вырезает из текста спецсимволы, url линки заменяет на слово link. Поверьте, слушать невозможно что-то вроде такой абракадабры:
"https://site.domain/a/1wK3oT3chhCKzQEHTDCtGkzpZRX777nbKYwCBdV"

5) В параллельном режиме запускает потоки преобразования полученных txt файлов в mp3

6) создает m3u файл 

7) удаляет техническую директорию txt

8) Ищет следующую книгу

После того, как срипт отработает, остается скопировать полученные файлы на телефон и используя любой проигрыватель mp3/m3u начать прослушивать книгу.

На Android я использую приложение Mort Player Audio books. Хотя это очень старое приложение и уже не поддерживается, оно оказалось очень удобным для этих целей.

Android


Я предпочитаю просто прослушивать подготовленные mp3 файлы, но есть возможность использовать RHVoice напрямую, для этого:

1) устанавливаете приложение RHVoice
2) Заходите в него, и скачиваете нужные голоса для русского языка.
3) Установите флажок "наилучшее качество речи".
4) Можно добавить словарь и прописать его в файле RHVoice.conf
5) заходите в настройки системы, ищите настройку: "озвучивание текста"
6) устанавливаете движок синтеза речи на RVoice
7) Настраиваете нужный голос, скорость, тембр по умолчанию.

В дальнейшем, озвучивание будет доступно например в FB Reader или приложении author.today.

Некоторые полезные ссылки:

  1. Домашняя страница проекта

  2. Дистрибутивы RHVoice для Windows

  3. Программа "Балаболка" для Windows

  4. Хороший справочник по голосам RHVoice

  5. Дополнительные словари и препроцессоры для RHVoice

  6. Мой скрипт fb2mp3.sh https://github.com/whiterat1962/fb2mp3 

Комментарии (28)


  1. MountainGoat
    14.04.2023 15:21

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


    1. grayrat Автор
      14.04.2023 15:21
      +1

      Идея была чтобы глаза совсем не использовать. Я не слепой, просто после 8 часов работы с компом, не хочется нагружать глаза.
      Да и в машине например, удобнее аудиокнига.


  1. lobotomic
    14.04.2023 15:21
    +1

    Похоже, что все ваши претензии к аудиокнигам относятся к временам Palm. Тогда большинство доступных книг было озвучено любителями с действительно плохим качеством. А вы пробовали современные аудиокниги? Кроме того, не знаю как остальные проигрыватели, но Smart Audiobook Player позволяет регулировать скорость воспроизведения и умеет много ещё чего. Остаётся практически только резонное возражение, что не все книги доступны в аудио варианте.


    1. grayrat Автор
      14.04.2023 15:21
      +2

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


      1. gmtd
        14.04.2023 15:21
        +3

        Думаю, вы в сильном меньшинстве. Намного больше раздражает и сбивает роботизированный механический голос, чем легкая эмоциональность человека.


        1. fvariation
          14.04.2023 15:21

          Думаю, вы в сильном меньшинстве. Намного больше раздражает и сбивает роботизированный механический голос, чем легкая эмоциональность человека.

          Это как в шахматах, меньшинство предпочитает унылый безэмоциональный набор шахматных фигур. И действительно, это меньшинство довольно сильное в смысле рейтинга.


      1. ainoneko
        14.04.2023 15:21

        А фоновая музыка?


        1. grayrat Автор
          14.04.2023 15:21

          "Это другое"...


  1. mishkin79
    14.04.2023 15:21
    +1

    MDS(модель для сборки), гостелерадиофонд, радиоспектакли. Вовлечённость чтеца с талантом и образованием многого стоит. Послушать очередного Перумова или попаданцев на 1000+ страниц белого шума - это отвалившиеся от мыслительного процесса нейроны. Проще вентилятор послушать. Вредные советы у вас)


    1. grayrat Автор
      14.04.2023 15:21

      Мессир, поверьте, я с удовольствием смотрю хорошие спектакли и читаю интересные книги. Вот только это требует определённого настроя, да и процент действительно хороших спектаклей очень мал. При этом, Вы смотрите/слушаете не авторский вариант, а переработанный посторонним человеком взгляд на авторское произведение.
      После суточного дежурства, когда постоянно приходится решать не самые простые задачи, сил на то чтобы наслаждаться слогом, практически не остается.


  1. MatveiKyzin744
    14.04.2023 15:21
    +1

    TTS (Text-to-Speech) для ИТ - это технология, которая позволяет компьютерам генерировать речь на основе написанного текста. Эта технология может быть полезна в ИТ-сфере для автоматического чтения текстовых документов, уведомлений и сообщений, а также для создания голосовых помощников и роботов.
    Некоторые примеры использования TTS в ИТ:
    - Автоматическое чтение длинных текстовых документов, таких как инструкции по эксплуатации или технические отчеты.
    - Генерация голосовых уведомлений и сообщений для мониторинга систем или предупреждения об ошибках.
    - Создание голосовых помощников и роботов, которые могут отвечать на вопросы пользователей и выполнять определенные задачи.
    - Развлекательные приложения, такие как игры, которые используют голосовые эффекты и персонажей. TTS может быть полезен для людей с ограниченными возможностями, таких как слабовидящие и слабослышащие люди, которые могут использовать голосовые помощники для доступа к информации.


  1. grayrat Автор
    14.04.2023 15:21
    +5

    Попробую объяснить: Когда слушаешь первую книгу, робот напрягает, (тем более, я начинал когда качество озвучки было ниже пола).
    Но у Вас есть встроенный дополнительный преобразователь информации. Это как с чтением, сначала всё усилие идет не на понимание, а именно на чтение. Настолько, что понимаешь с трудом прочитанный текст.
    Но когда Вы овладеете навыком чтения, сами буквы Вы уже не замечаете.
    Так и с озвучкой. Очень быстро перестанете замечать как там буробит робот. Пойдет чистая информация.
    Вот тут и важно, чтобы технически, звуковой ряд не отвлекал вас от контекста. Даже при чтении, если шрифт неудобный, читать сложно. А при прослушивании, каждый голос Вы прежде всего будете пытаться анализировать его, а не книгу, т.к., голос является важным маркером человека. Я например с трудом слушал лекции. Подача информации для меня была медленной, мне было проще работать с учебниками. TTS - это просто еще один инструмент, позволяющий решить ряд задач.

    Понятно, что озвучивать роботом таблицы Брадеса, или курс программирования - идиотизм. Но прослушать за рулем очередную сказку про попаданцев - самое то.

    У каждого свои фломастеры.


  1. janvarev
    14.04.2023 15:21
    +4

    Рекомендую попробовать Silero TTS - имхо лучшее из бесплатных решений сейчас.

    Минусы - не очень много настроек.

    Я еще собрал веб-сервис для рендера файлов через него здесь.


    1. S-trace
      14.04.2023 15:21
      +2

      Присоединюсь к рекомендации попробовать Silero TTS - для локального использования я сделал скрипт: https://github.com/S-trace/silero_tts_standalone

      Он умеет разделять выходной WAV файл по мере синтеза по заданному размеру, есть небольшие оптимизации на стадии препроцессинга текста (такие как разделение текста на максимально возможные для выбранного голоса блоки по предложениям или по пробелам, замена чисел на текстовые представления, удаление неподдерживаемых движком символов), поддерживается синтез на GPU (у меня он медленно стартует, но на больших текстах значительно ускоряет работу).

      Скрипт оптимизирован для создания аудиокниг, на вход принимает .txt любого разумного размера (проверял на файлах до 1.5 метра). Из .fb2 можно сделать .txt через xsltproc FB2_2_txt.xsl file.fb2 > file.txt

      Качество звучания вполне человеческое, без "металлизации", даже какие-никакие интонации выдаёт (порой ошибается в ударениях, но это общая беда всех TTS). Есть выбор из двух мужских и трёх женских голосов.


      1. janvarev
        14.04.2023 15:21

        О, круто, спасибо.

        Насчет GPU - пробовал, но на маленьких текстах разницы почти нет по скорости. Видимо, на больших есть. Кстати, насколько приблизительно разница? И - можно ли настроить cuda/cpu параметром командной строки у вас?


        1. vassabi
          14.04.2023 15:21
          +1

          там есть строка в скрипте https://github.com/S-trace/silero_tts_standalone/blob/master/tts.py

          torch_device: str = 'cpu'

          меняете ее на куда (или просто берите значение из командной строки) и все


        1. S-trace
          14.04.2023 15:21
          +1

          На больших текстах разница в 6.6 раз между CPU i7-8750H и GPU 1050 Ti Mobile (2 часа 25 минут vs 22 минуты на тексте 2024 КБ, на выходе получилось 6100 МБ и 18.5 часов звучания), и это с учётом времени на "прогрев" в 3 минуты.

          Параметром командной строки не настраивается, но можно легко прикрутить такую возможность.


          1. S-trace
            14.04.2023 15:21

            UPD: Добавил device = 'auto' (использовать CUDA если доступно, иначе использовать CPU), добавил workaround для устранения медленного старта (сокращает время прогрева модели с 3 минут/15 секунд для GPU/CPU до 4 секунд).


      1. alexs963
        14.04.2023 15:21

        А где-то можно настроить скорость чтения и тембр голоса?


        1. S-trace
          14.04.2023 15:21

          Можно использовать SSML и тег prosody - там как раз таки есть аттрибуты rate и pitch для этого.


  1. Insaned
    14.04.2023 15:21

    Подскажите, а что такое deutf8.sh в 13й строчке вашего скрипта?


    1. grayrat Автор
      14.04.2023 15:21

      пардон сейчас добавлю, забыл


      1. grayrat Автор
        14.04.2023 15:21

        Извините за задержку


  1. Adambl4
    14.04.2023 15:21

    Для Android еще можете взглянуть на приложение Quickify. По моему мнению, лучшая реализация TTS для книг и статей на Android.


  1. andrey53
    14.04.2023 15:21

    Хорошо бы ещё после строки:

    sudo apt install rhvoice rhvoice-english rhvoice-russian

    добавить ещё две:


    sudo apt install lame
    sudo apt install xsltproc


  1. andrey53
    14.04.2023 15:21

    Спасибо за статью. Подробно и полезно.


  1. P1ratRuleZZZ
    14.04.2023 15:21

    Лайфхак моего детства или "как я слушал краткий пересказ литературных произведений, чтобы не читать это все с компутера". Тогда была "Говорилка", в ней можно было создать мп3 файл и закинуть его на мелкий мп3 плеер. Голос был ужасен, но через пару прослушиваний стало привычным, благодаря этому я за 9ый класс не прочитал ни одной книги по литературе, а лишь слушал краткие перессказы.

    Надеюсь эта статья поможет кому-то так же, как мне помог этот лайфхак.

    Ждем когда будет нейросеть "для всех", которая будет читать аудиокниги голосом какой-нибудь актрисы или типа того...


    1. S-trace
      14.04.2023 15:21

      Так есть же уже Silero TTS - вполне себе нейросеть, общедоступная, работает локально. Да и качество даёт гораздо приятнее "Говорилки". Разве что актрис не завезли ещё...