В статье будет рассмотрена программа 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. Я такую связку не настраивал, но вот пример настройки.

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *