Автор Тема: Хотелось бы немного доработать прогу Universal Interface для синтеза речи (TTS)  (Прочитано 1709 раз)

Оффлайн artenaki

  • Давно тут
  • **
  • Сообщений: 184
Надо включить через
--enable-log="Прогресс" --log-expanded
Было включено.

Уточню. В Альте используется форк yad, а в убунте (которой я пользуюсь) старая 0.40 версия 2017 года.
Только в Debian experimental перешли на yad 7.2 2020 года.
« Последнее редактирование: 21.12.2023 13:59:18 от artenaki »

Оффлайн YYY

  • Мастер
  • ***
  • Сообщений: 5 972
а что говорит в теримнале

yad --help-all | grep log

Оффлайн artenaki

  • Давно тут
  • **
  • Сообщений: 184
Впрочем, дело не в этом. Скомпилировал новейшую версию.

а что говорит в терминале
yad --help-all | grep log
/usr/bin/yad --version
0.40.0 (GTK+ 3.24.33)
/usr/bin/yad --help-all | grep log
  --enable-log=[ТЕКСТ]                        Показать окно журнала
  --log-expanded                              Развернуть окно журнала
  --log-on-top                                Разместить окно журнала над индикатором прогресса
  --log-height                                Высота окна журнала

/opt/yad/bin/yad --version
13.0 (GTK+ 3.24.33)
/opt/yad/bin/yad --help-all | grep log | grep -v dialog
  --enable-log=[TEXT]                            Show log window
  --log-expanded                                 Expand log window
  --log-on-top                                   Place log window above progress bar
  --log-height                                   Height of log window
Много dialog'ов в описании, убрал.
« Последнее редактирование: 21.12.2023 14:02:03 от artenaki »

Оффлайн artenaki

  • Давно тут
  • **
  • Сообщений: 184
Офигеть, в новых сборках выпилен русский.
ls /opt/yad/share/locale
de  es  fr  it  ka  pt_BR  sk  uk  zh_TW
Пришлось удалить новую версию.
В Сизифе Альта и Росе вернули патчем.
Есть также gtk2 версия. Но в ней окно открывается не по центру.
« Последнее редактирование: 22.12.2023 03:27:44 от artenaki »

Оффлайн YYY

  • Мастер
  • ***
  • Сообщений: 5 972
  --enable-log=[TEXT]                            Show log window
  --log-expanded     

значит должно работать - надо в коде искать косяк


Оффлайн gosts 87

  • Завсегдатай
  • *
  • Сообщений: 2 636
  • Дмитрий/Dmitry/德米特里/दिमित्री
Скомпилировал новейшую версию.
Офигеть, в новых сборках выпилен русский.
А перед компиляцией в исходник заглянуть и, если надо, впилить? ;-)

Оффлайн artenaki

  • Давно тут
  • **
  • Сообщений: 184
Нашел нативный 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'
« Последнее редактирование: 27.12.2023 03:05:08 от artenaki »

Оффлайн artenaki

  • Давно тут
  • **
  • Сообщений: 184
Более современный проект https://github.com/rhasspy/piper
Сэмплы https://rhasspy.github.io/piper-samples/
Это уже действительно качественный уровень, доступный на линуксе. Правда, единственный приятный для меня голос Ирина очень уж любит тупить и тормозить (паузы). Обидно что при этом нарекания к качеству синтеза нет и качество звука хорошее.
Ну и довольно медленно рендерит с загрузкой всех ядер. Голос довольно приятный, но использовать вряд ли буду.
А может запилить какой-нибудь консольный автоудалятор пауз в звуке?
« Последнее редактирование: 27.12.2023 19:33:25 от artenaki »

Оффлайн YYY

  • Мастер
  • ***
  • Сообщений: 5 972
Более современный проект https://github.com/rhasspy/piper
Сэмплы https://rhasspy.github.io/piper-samples/

на чем запускаете (по софту и железу)?

Оффлайн artenaki

  • Давно тут
  • **
  • Сообщений: 184
YYY, да нет. Тупит она не в смысле нагрузки, хотя грузит ядра все при генерации (кстати, хотелось бы уменьшить до 1 как-то, но как?). Просто такой голос, что часто паузы добавляет. На других голосах норм. Это другое, особенность движка. При проигрывании в VLC нагрузки нет. Я неправильно выразился.
Я пробовал фильтр удаления пауз в Audacity, стало лучше. Попробую sox.

Сейчас у меня такой скрипт:
#!/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
               cat $1 | /home/denis/piper/piper --model /home/denis/piper/irina/ru_RU-irina-medium.onnx --speaker 0 --sentence_silence 0.1 --length_scale 1.0 --output_file $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

Оффлайн artenaki

  • Давно тут
  • **
  • Сообщений: 184
на чем запускаете (по софту и железу)?
Бинарники https://github.com/rhasspy/piper/releases/download/v1.2.0/piper_amd64.tar.gz
Голос https://huggingface.co/rhasspy/piper-voices/tree/v1.0.0/ru/ru_RU/irina/medium
Железо AMD 2012 года. x86-64-v1.
Есть еще проект, который клонирует несколько ГБ и требует SSE4_1 или AVX инструкции https://github.com/coqui-ai/TTS но у меня проц не подходит. А может быть из-за CUDA. Piper работает.

Из английского мне понравился голос en_GB-jenny_dioco-medium.
В русском голосе piper нет проблем с латиницей.

С ядрами разобрался. Дописал taskset -c 1
Хотя, конечно, теперь очень медленно генерит.
А вот такие параметры обеспечивают воспроизведение без пауз. Перенести бы в консоль.
« Последнее редактирование: 28.12.2023 05:19:16 от artenaki »

Оффлайн YYY

  • Мастер
  • ***
  • Сообщений: 5 972

Оффлайн artenaki

  • Давно тут
  • **
  • Сообщений: 184
Вот такая вот дичь творится без коррекции Audacity.
pipel.mp4 - исходный файл
audacity.mp4 - после коррекции в Audacity
Пришлось пересжать, на форуме лимит 1 МБ на файл. Звук немного подгадился aac кодером (fdk vbr 5).

Скорость рендеринга на моем железе (на одном ядре): 61-67 секундный файл (в зависимости от того удалять ли паузы) рендерится 50 секунд. Т.е. довольно медленно. На двух ядрах 28 секунд.
IVONA в wine appimage 13 секунд (всегда используется одно ядро).

Прога крутая, но у нас малоизвестна. Да и мало людей интересуются TTS почему-то. А я давно интересовался созданием аудиокниг.

Синтаксис у sox, конечно, жесть.

Вот это чуть чуть получше. Но не дотягивает до Audacity. Больше ничего не получается.
cat $1 | taskset -c 1 /home/denis/piper/piper --model /home/denis/piper/irina/ru_RU-irina-medium.onnx \
--speaker 0 --sentence_silence 0.1 --length_scale 1.0 --output_file temp.wav && \
sox temp.wav $2 silence 1 0.95 0.2% 1 0.95 0.2%
Начало файла съедает.

Лол, оно ничего не корректирует. Только начало файла съедает (за счет этого разница в продолжительности). Это placebo. sox говно. А есть нормальные консольные утилиты?
« Последнее редактирование: 28.12.2023 15:51:35 от artenaki »

Оффлайн artenaki

  • Давно тут
  • **
  • Сообщений: 184
Вот такой вариант юзабельный:
ffmpeg -i input.wav -af silenceremove=start_periods=1:stop_periods=-1:start_threshold=-40dB:stop_threshold=-40dB:start_silence=0.15:stop_silence=0.15 -y output.wavДругое дело, что теперь она шпарит без остановок. В некоторых случаях это может быть неприемлемо, но для чтения новостных отрывков сойдет.

Слишком долго рендерит. Громкость в некоторых предложениях почему-то плавает (увеличивается). Теперь еще нормализацию пилить. Да и голос не очень приятный. В общем, в топку. IVONA Tatyana тоже не подарок и слишком красноречива, но надо же чем-то пользоваться.

К тому же, несмотря на удаление пауз, piper кривовато рендерит, запинается.
« Последнее редактирование: 29.12.2023 08:03:05 от artenaki »

Оффлайн artenaki

  • Давно тут
  • **
  • Сообщений: 184
А сейчас вообще круто. Искусственный интеллект мне пишет проги сам. https://github.com/artenax/baidu-tts/tree/main/baidu-translator
Я просто говорю ему что надо и немного дорабатываю. Вот до чего техника дошла.