Балаболка TTS
|
|
balabolka | Дата: Суббота, 24.07.2021, 00:53 | Сообщение #1 |
 V.I.P.
Группа: Модераторы
Сообщений: 195
Статус: Offline
| Начало темы здесь (ссылка на архивную копию форума mytts.info)
(5,1 Mb) архивная копия начала текущей ветки с форума mytts.info - для офлайн просмотра и поиска по всем страницам
Балаболка TTS (авт. Илья Морозов)
Сайт программы "Балаболка"
Установочная версия
Portable-версия
|
|
| |
Kei | Дата: Среда, 10.09.2025, 22:21 | Сообщение #61 |
Группа: Пользователи
Сообщений: 5
Статус: Online
| Прошу прощения, мне уже неловко снова писать, но обнаружилась ещё одна проблема.
Исправленная подсветка сломала работу моих голосов на больших файлах (>10 МБ). Подсветка отстаёт от воспроизведения, а сам голос может заикаться или вовсе замолкать.
Чем больше файл, тем сильнее проявляется проблема. На ~10 МБ подсветка может начинать подлагивать; ближе к 20 МБ заикания происходят чаще.
Для проверки я скачал PortableApps версию 904 — там всё работает нормально.
Я также протестировал портативную 905 — она начала заикаться позже, чем моя установленная версия. Возможно, дело в словарях или каких‑то настройках.
На моём рабочем файле (12 МБ) проблема проявляется раньше, чем на похожем по объёму тексте, скопипасщенным из следующего абзаца, но на 17 МБ и подсветка отстаёт, и голос заикается.
Код Так говорила в июле 1805 года известная Анна Павловна Шерер, фрейлина и приближенная императрицы Марии Феодоровны, встречая важного и чиновного князя Василия, первого приехавшего на ее вечер. Анна Павловна кашляла несколько дней, у нее был [i]грипп,[/i] как она говорила ([i]грипп[/i] был тогда новое слово, употреблявшееся только редкими). В записочках, разосланных утром с красным лакеем, было написано без различия во всех:
Можно было бы сказать, что такие большие файлы — редкость, но я как раз собирался слушать два файла размером 12 и 18 МБ.
Честно говоря, не уверен, есть ли в новых версиях место моим устаревшим голосам, которые и запускаются только в режиме совместимости. Может, стоит сохранить установщик версии 877 и оставаться на ней?
Пишу в надежде, что это тоже можно исправить.
|
|
| |
Kei | Дата: Четверг, Вчера, 20:41 | Сообщение #62 |
Группа: Пользователи
Сообщений: 5
Статус: Online
| P.S.
Я тут установил NaturalVoiceSAPIAdapter чтобы появился голос Mark. Он не появился, видимо его как-то отдельно надо ставить, хотя в системе он показывается. Но не суть. После установки в Балаболке появилась куча неплохих голосов, в основном английских.
Но я заметил у них одну общую проблему: заметная задержка между абзацами. При этом, если попробовать записать аудиофайл, то в нём нету большой задержки.
Я проводил тесты на голосе Microsoft Ava Online, со скоростью 2. Тестировал я на чистой портативной 905.
Для текста я использовал сто строк "Word.".
В программе:
Подряд: 1 минута 3 секунды С пустой строкой: 1 минута 38 секунд Красная строка из пяти пробелов: 1 минута 49 секунды
В записи:
Подряд: 1 минута 2 секунды С пустой строкой: 1 минута 12 секунд Пять пробелов: 1 минута 3 секунды
Если текст идёт сплошняком без пустых строк - то разницы нет, но где в природе встречается такой текст? Почти всегда в английском есть пустые строки. И если смотреть на более естественный вариант, то разница достаточно существенная. В записи прибавилось 10 секунд паузы, а при чтении в программе все 35. Это почти треть времени.
На больших объёмах текстов эти паузы могут превратиться в часы тишины. Да и в целом на коротких диалогах это заметно.
На этом этапе я вспомнил про вкладку "правила" в настройках, и изменения там действительно дали некоторые результаты.
В программе, правила: абзац.
Подряд: 1 минута 2 секунды С пустой строкой: 1 минута 36 секунд Пять пробелов: 1 минута 48 секунд
В программе, правила: комбинированный.
Подряд: 1 минута 2 секунды С пустой строкой: 1 минута 36 секунд Пять пробелов: 1 минута 6 секунд
Проблему с стандартным форматированием английского текста это не решило, но хотя бы с красной строкой в комбинированном варианте паузы пропали.
При этом проблема эта только с новыми голосами. Так в режиме по предложениям мои голоса, голос Zira не показали изменения времени чтения в программе как в идущем сплошняком "Word.", так и с пустыми строками.
В чем может быть проблема? Если при записи аудиофайла пустые строки добавляют 10 секунд паузы что кажется естественным, в конце концом надо же отделять абзацы, то вот 36 секунд тишины при чтении в программе - явный перебор.
При этом эта проблема существует даже если ни один словарь не включён. Если есть словарь то в режиме по предложением с сплошным текстом появляется некоторая задержка, но в комбинированном режиме задержки от словаря не наблюдается.
|
|
| |
balabolka | Дата: Четверг, Вчера, 22:01 | Сообщение #63 |
 V.I.P.
Группа: Модераторы
Сообщений: 195
Статус: Offline
| Цитата Kei (  ) Я проводил тесты на голосе Microsoft Ava Online Слово "online" в названии голоса намекает нам на то, что синтез речи происходит на удаленном сервере корпорации Microsoft. Моя программа преобразует текст в речь абзацами (если не применяются словари): если абзац очень длинный, его текст делится на куски размером не более 4 килобайта. Как видно из Ваших тестов, на паузы оказывает влияние количество запросов к серверу (количество абзацев), то есть паузы наблюдаются между запросами. А вот объем текста в запросе не влияет на длительность паузы, то есть сервер быстро преобразует большой текст в речь и быстро вернет даже большие по размеру аудиоданные.
Это интересная информация, надо будет поразмыслить над этим. Можно будет попробовать конвертировать в речь по несколько абзацев за раз. Насколько я помню из документации Microsoft Azure, там ограничение устанавливает не на длину текста в запросе, а на продолжительность получающихся аудиоданных: запрос вернет не более 10 минут речи (иначе сервер просто обрежет аудиоданные). Это очень не удобно: например, мой лимит в четыре килобайта русского текста уложится в 10 минут речи, а четыре килобайта китайских иероглифов - нет. Сложно делить текст на части, если заранее не известно, сколько времени потребуется на его прочтение вслух: а если текст содержит числа, даты, сокращения? а если текст будет прочитан на медленной скорости? Поэтому я опасаюсь максимально увеличивать длину текста в запросе и предпочитаю преобразовывать текст абзацами: это безопасно, и паузы между абзацами всегда будут более-менее одинаковыми по длительности.
Text to speech REST API
Цитата If the body length is long, and the resulting audio exceeds 10 minutes, it's truncated to 10 minutes. In other words, the audio length can't exceed 10 minutes.
Значение имеют также Ваше местоположение и скорость интернет-соединения. Чем быстрее сервер Microsoft (точнее - один из серверов, endpoint) ответит на запрос, посланный с Вашего компьютера, тем меньше будет пауза. Если бы Россия и США наладили взаимоотношения, то endpoint'ы могли располагаться в Москве, Питере, Новосибирске: тогда время ответа на запрос существенно сократилось бы. Сейчас, когда Microsoft ушел из России, то я вообще не знаю, куда именно российские компьютеры с Windows отправляют запросы, на сервер в какой стране (вряд ли Microsoft сейчас будет заботиться о российских пользователях). А если установлен и активирован VPN, то время ответа на запрос может еще возрасти.
Всё это относится к чтению вслух.
Цитата Kei (  ) В записи:
Подряд: 1 минута 2 секунды С пустой строкой: 1 минута 12 секунд При записи в аудиофайл время ожидания ответа сервера уже значения не имеет, так что тут нет никаких лишних пауз. Здесь разница в десять секунд появляется, скорее всего, потому, что голос вставляет маленькую паузу после каждого абзаца: пустая строка = конец абзаца.
|
|
| |
balabolka | Дата: Четверг, Вчера, 22:12 | Сообщение #64 |
 V.I.P.
Группа: Модераторы
Сообщений: 195
Статус: Offline
| Цитата Kei (  ) Я тут установил NaturalVoiceSAPIAdapter чтобы появился голос Mark. Он не появился, видимо его как-то отдельно надо ставить, хотя в системе он показывается. Голос Mark относится к "Mobile" или "OneCore" голосам Microsoft. Изначально эти голоса не были предназначены для работы с SAPI 5: голоса должны были работать только с Metro-приложениями из Microsoft Store. Но "OneCore" голоса легко можно сделать доступными и для SAPI 5. Например, можно скачать и один раз запустить утилиту SAPI Unifier.
|
|
| |
Kei | Дата: Пятница, Сегодня, 16:35 | Сообщение #65 |
Группа: Пользователи
Сообщений: 5
Статус: Online
| Спасибо. Mark и ряд пара других голосов действительно появились. Правда некоторые голоса дублировались. Та же Zira представлена в двух вариациях: с приставкой Desktop и без. Но это не особая проблема
Собственно, я тут провел ещё пару тестов на других голосах и фрагменте естественного текста в комбинированном режиме:
Microsoft Andrew Online, скорость 2.
Обычный: 2 минуты 44 секунды Аудиофайл: 2 минуты 8 секунд Бес пустых: 2 минуты 12 секунд
Microsoft Eric Online, скорость 2.
Обычный: 2 минуты 38 секунд Аудиофайл: 2 минуты 23 секунды Бес пустых: 2 минуты 21 секунда
Не уверен почему у "Эрика" не такая большая разница между чтением вслух и аудиофайлом как у первого голоса. Может, поскольку я прогонял один и тот же текст, то он "закешировался" и поэтому первый запуск Эрика выдал меньшую паузу в обычном режиме? Ну, или это какая-то спицифика конкретного голоса, как всё это работает я не знаю.
Так или иначе, в отличие от прошлого теста, тут разница между аудиофайлом и сплошным текстом выражена в совсем гомеопатических значениях. Видимо те 10 секунд были вызваны большим количеством абзацев.
В стандартном варианте, без задержек с запросом, на мой слух не хватает паузы между абзацами. А вот пауза от задержек наоборот раза в два дольше необходимой. Местами она быстрая, а порой можно две секунды ждать.
Я попробовал решить вопрос паузы в сплошном тексте путём настроек, но таким голосам нету дела до выставленных во вкладке "паузы" значений для абзацев/предложений. Также я вспомнил про SAPI теги, но представленный в F1 образец Silence не вызвал никакой реакции. Я бы подумал что таким голосам и до тегов дела нет, но пример с Silence не сработал и на обычных голосах типа Zira, а вот тег с изменением громкости применился к онлайн голосам.
Как программа вообще работает с такими голосами? И насколько она на такое расщитана? Ну, с учётом того что для их появления нужно устанавливать отдельную программу.
Прошу прощения если вопросы покажутся глупыми, я правда не разбираюсь в технической части.
Паузы возникают из-за времени на запрос, его обработку и ответ от сервера после окончания прочтения фрагмента. Возможно ли подготавливать следующий фрагмент текста во время чтения предыдущего? Аудиофайл программа генерирует быстрее чтения вслух (Текст 6 минутной длины был сделан за 2 минуты)
Или у записи аудиофайла и чтения вслух принципиально разная логика?
Помимо воспроизведения звука во время чтения также идёт синхронная подсветка читаемого слова. Каждое отдельное подсвеченное слово не может быть отдельным запросом, значит по мимо аудио сервер отправляет "субтитры" для синхронизации с подсветкой. Сервер это делает одним пакетом? Или программа получает данные от сервера во время всего воспроизведения?
Я предполагаю что нельзя послать сразу несколько запросов к серверу, поскольку сервера такое обычно не любят, поэтому предполагаю что запросы должны быть последовательны и не раньше чем сервер вернёт прошлый ответ. И если при создании аудиофайла программа засовывает в него ответ сервера по готовности, то при чтении вслух программе уже понадобится иметь буфер. Программа такое может или мой вопрос это какое-то страшное извращение?
|
|
| |
Lecron | Дата: Пятница, Сегодня, 17:55 | Сообщение #66 |
Группа: Пользователи
Сообщений: 27
Статус: Offline
| Цитата balabolka (  ) Можно будет попробовать конвертировать в речь по несколько абзацев за раз. На 4pda есть пользователь с ником ssiiaa. Автор программы fb2-player. Он реализовал буфферизацию. Пока текущий абзац слушается, следующий уже отправлен на озвучку. К моменту окончания прослушивания текущего, он уже лежит у клиента. Глубина буфферизации может быть и больше 2. Что полезно если текущий абзац гораздо меньше следующего — реплика диалога с последующим описательным абзацем.Цитата balabolka (  ) Сложно делить текст на части, если заранее не известно, сколько времени потребуется на его прочтение вслух Насколько сложно установить динамический лимит? Пересчитывать исходя из соотношения размера текста и продолжительности возвращаемого аудио. При желании можно даже записать в конфиг. Сильно маловероятно, что сразу первый абзац превысит лимит, после которого его надо бить на части.
|
|
| |