Текст в речь с помощью Festival в Linux

В статье будет рассмотрена программа Festival, которая позволяет преобразовывать текст в речь. Я покажу пример её работы на Debian 11.















О программе




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




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




Работа в интерактивном режиме




Существует интерактивный режим, войти в который можно просто выполнив 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




Даём скрипту право на запуск:




$ chmod u+x say_date.sh




И проверяем его работу:




$ ./say_date.sh









Итог




Я познакомил вас с системой перевода текста в речь — festival. Эта система может использоваться в разных связках с другими системами. Например её можно использовать в связке с сервером телефонии asterisk. Я такую связку не настраивал, но вот пример настройки.




Возможно вам понравятся другие статьи:






2022-10-07T11:21:27
Программирование на Bash