Текст в речь с помощью Festival в Linux
О программе
Festival — это система преобразования текста в речь. Помимо простого преобразования текста в речь, его можно использовать в интерактивном командном режиме для тестирования и разработки различных аспектов технологии синтеза речи.
Фестиваль имеет два основных режима: командный и интерактивный.
У программы довольно много недостатков:
- неприятный голос;
- в некоторых словах проглатываются определённые звуки;
- если в тексте встречается некая последовательность символов, то может вылететь с ошибкой.
Но небольшие полезности можно заставить её проделывать. В конце статьи я покажу небольшой скрипт, который будет проговаривать текущую дату.
Установка
Установить festival и пакет с поддержкой русского языка (festvox-ru) можно из стандартных репозиториев в Debian или Ubuntu:
$ sudo apt install festival festvox-ru
Работа в командном режиме
Festival умеет проговаривать текст получаемый из стандартного потока ввода. А для проговаривания на русском языке необходимо указать --language russian:
$ echo "Hello world!" | festival --tts
$ echo "Привет мир!" | festival --language russian --tts
Но также можно озвучивать текст из файла:
$ echo "Привет, меня зовут Фестиваль" > test.txt
$ festival --language russian --tts test.txt
Добавлю также, что этот синтезатор речи, не может проговорить текст, в котором будут встречаться одновременно русские и английские слова. Для озвучивания смешанного текста необходимо написать скрипт-обертку (например, на Python или Bash), который будет разбивать исходный текст на отдельные фрагменты с помощью регулярных выражений, разделяя кириллицу и латиницу. И последовательно передавать каждый фрагмент в festival, динамически меняя используемый язык.
Работа в интерактивном режиме
Существует интерактивный режим, войти в который можно просто выполнив festival без дополнительных опций:
$ festival
Festival Speech Synthesis System 2.5.0:release December 2017
Copyright (C) University of Edinburgh, 1996-2010. All rights reserved.
clunits: Copyright (C) University of Edinburgh and CMU 1997-2010
clustergen_engine: Copyright (C) Carnegie Mellon University 2005-2017
hts_engine: All rights reserved.
For details type `(festival_warranty)'
festival>
Приведу несколько примеров работы в интерактивном режиме.
- Произнести текст на английском:
festival> (SayText "Hello!")
- Посмотреть, какие языки установлены в систему:
festival> (voice.list)
(kal_diphone msu_ru_nsh_clunits)
- Поменять язык на русский и произнести текст на русском:
festival>(voice_msu_ru_nsh_clunits)
festival>(SayText "Привет!")
- Выйти из интерактивного режима:
festival> (exit)
Скрипт проговаривания текущей даты
Начнём создавать наш скрипт:
$ nano say_date.sh
Текст скрипта:
#!/bin/bash
# Вычисляем день и месяц и заносим их в переменные
d=$(date "+%_d")
m=$(date "+%_m")
# Массив дней
days=(" " "первое" "второе" "третье" "четвертое" "пятое" "шестое" "седьмое" "восьмое" "девятое"
"десятое" "одиннадцатое" "двенадцатое" "тринадцатое" "четырнадцатое" "пятнадцатое" "шестнадцатое"
"семнадцатое" "восемнадцатое" "девятнадцатое" "двадцатое" "двадцать первое" "двадцать второе"
"двадцать третье" "двадцать четвертое" "двадцать пятое" "двадцать шестое" "двадцать седьмое"
"двадцать восьмое" "двадцать девятое" "тридцатое" "тридцать первое")
# Массив месяцев
months=(" " "января" "февраля" "марта" "апреля" "мая" "июня" "июля" "августа" "сентября" "октября"
"ноября" "декабря")
# Проговариваем
echo ${days[$d]} ${months[$m]} | festival --tts --language russian
Даём скрипту право на запуск и проверяем его работу:
$ ./say_date.sh
Festival может использоваться в разных связках с другими системами. Например, её можно использовать в связке с сервером телефонии asterisk, но я такую связку не настраивал.
Если понравилась статья, подпишись на мой канал в VK или Telegram .