Нашел нативный TTS движок, довольно неплохой. Но не без недостатков, конечно.
https://github.com/MycroftAI/mimic3Управляется такими командами:
mimic3 --help
mimic3 --voices
mimic3 --play-program aplay --speaker 0 --voice ru_RU/multi_low 'Текст'
mimic3 --speaker 0 --voice ru_RU/multi_low 'Текст' > output.wav
cat input.txt | mimic3 --speaker 0 --voice ru_RU/multi_low > output.wav
Баги:
1. Медленный.
2. Проглатывает окончание предложений. В некоторых других языках тоже
https://github.com/MycroftAI/mimic3/issues/30 Костыль: заменять точки (и переносы строк) на запятые.
3. Читает только символы своего языка. Т.е. не читает латиницу совсем. Костыль: sed'ом заменить латинские символы на русские аналоги.
4. Шепелявит. Иногда что-то странное творится с интонациями, как будто некоторые символы воспринимает как теги интонаций.
5. Пустые переносы строк добавляют задержку (лишнюю паузу)
6. Потребляет много RAM. Чем больше текста, тем больше потребляет.
7. Нет поддержки 32 бит и видимо старых систем.
8. Дни недели произносит буквально (например 7 октября - семь октября). В отличии от IVONA. Однако в отличии от RHVoice правильно произносит "в 1990-х годах". IVONA произносит подобное правильно практически всегда.
Доработал yad скрипт очень кривенько.
Может быть полезно, если важна лицензионная чистота.
#!/bin/bash
if [ "$#" -ne 2 ]; then
echo "start wo 2 args"
cd /tmp
rm says*.txt
rm says*.wav
rnd=$RANDOM
rfnt="/tmp/saysf$rnd.txt"
rfns="/tmp/saysf$rnd.wav"
if yad --text-info --editable --file-op --wrap \
--title="Сейчас скажу!" \
--text="Введите текст:" \
--entry-text "" \
--width=600 --height=240 > $rfnt
then
echo "RUN $0 $rfnt $rfns"
$0 $rfnt $rfns
else
echo "EXIT"
exit 0
fi
else
echo "start with 2 args $1 $2"
for ((i=1; i<=3; i++)) {
echo "# $((i*33))%"
echo $i
#sleep 1
if [ "$i" -eq 1 ]; then
sed 's/\./,/g;s/A/А/g;s/B/Б/g;s/C/Ц/g;s/D/Д/g;s/E/Е/g;s/F/Ф/g;s/G/Г/g;s/H/Х/g;s/I/И/g;s/J/Й/g;s/K/К/g;s/L/Л/g;s/M/М/g;s/N/Н/g;s/O/О/g;s/P/П/g;s/Q/К/g;s/R/Р/g;s/S/С/g;s/T/Т/g;s/U/У/g;s/V/Ф/g;s/W/В/g;s/X/К/g;s/Y/И/g;s/Z/З/g;s/a/а/g;s/b/б/g;s/c/ц/g;s/d/д/g;s/e/е/g;s/f/ф/g;s/g/г/g;s/h/х/g;s/i/и/g;s/j/й/g;s/k/к/g;s/l/л/g;s/m/м/g;s/n/н/g;s/o/о/g;s/p/п/g;s/q/к/g;s/r/р/g;s/s/с/g;s/t/т/g;s/u/у/g;s/v/ф/g;s/w/в/g;s/x/к/g;s/y/и/g;s/z/з/g;s/$/,/g' $1 > fixed.txt && cat fixed.txt | mimic3 --speaker 0 --voice ru_RU/multi_low > $2
fi
if [ "$i" -eq 2 ]; then
vlc $2
fi
} | yad --progress \
--text="Прогресс..." \
--width=300 \
--auto-kill \
--enable-log="Прогресс" \
--log-expanded \
--auto-close
echo "start new scrip and exit"
$0 &
fi
exit 0
Французский гораздо лучше читает, чем русский. Только быстровато.
mimic3 --play-program aplay --speaker 0 --voice fr_FR/m-ailabs_low 'Bonjour'