Suravel "Балаболка" будет вставлять знак ударения после фонемы ударной гласной в IPA, если выполняются два условия:
голос русский (в программе в списке голосов для этого речевого движка указано "Русский (Россия)");
в названии голоса присутствует слово "Microsoft".
Иначе программа будет вставлять знак ударения перед началом слога.
Плохо, когда нет официального дистрибутива голоса: название голоса может быть написано как угодно. Вот почему, как я уже писал ранее, так важно правильно прописать для голоса атрибут Name в ветку Attributes в системном реестре. Сейчас это единственный способ для "Балаболки" понять, с каким голосом она имеет дело.
То есть, я настойчиво рекомендую тем, кто создает неофициальные дистрибутивы голосов, внимательно относиться к записи названия голосов в системный реестр (например, чтобы там присутствовали слова "Microsoft Svetlana", "Microsoft Dmitry").
"Балаболка" будет вставлять знак ударения после фонемы ударной гласной в IPA, если выполняются два условия:голос русский (в программе в списке голосов для этого речевого движка указано "Русский (Россия)"); в названии голоса присутствует слово "Microsoft".
Иначе программа будет вставлять знак ударения перед началом слога.
Да, я тоже так подумала и прописала в реестре в атрибутах Светланы и Дмитрия имена с microsoft, но всё оказалось не так просто. Например, в реестре Дмитрий-брутал в атрибуте name стоит Dmitry_brutal без microsoft, а в списке балаболки отображается название с microsoft. Точно также со старой версией Светланы. А вот с новой Светланой и просто Дмитрием - совсем наоборот. В атрибутах реестра "mcrosoft" есть, поскольку я сама его туда вписала, а в списке голосов балаболки - нет. Так что дело, похоже, не в реестре и не в балаболке, а в самих голосах. Где-то этот "microsoft" вписан или не вписан совсем в другом месте. Во всяком случае, в .ini и .xml файлах самих голосов, как и в реестре, я не нашла ничего, что могло бы объяснить подобное поведение
Дата: Воскресенье, 23.11.2025, 12:03 | Сообщение #80
Группа: Пользователи
Сообщений: 9
Статус: Offline
Недавно я установил оффлайн Edge TTS голоса и обнаружил что в онлайн версии между предложениями есть заметные паузы. Пример:
Aria Онлайн: 23 Оффлайн: 16
Запись выдавал аналогичные результаты, так что проблема явно была не в задержке до сервера.
На всякий случай отмечу что у меня подредактирован реестр в соответствии с этой рекомендацией.
Тест проводился на голосе Microsoft Aria Online на стандартных настройках при помощи этого текста:
Код
The sun rose early. Birds sang in the garden. A thin mist lay over the field. I stepped onto the porch. The cold air refreshed me. Coffee hissed warmly in the cup. The cat rubbed my pant leg. Children laughed nearby. The wind stirred the leaves. The day promised to be calm.
Паузы между предложениями связаны с правилами коррекции произношения и отчасти с наличием словарей.
Тесты проводились на приведённом выше англ. отрывке, голосом Aria Online.
v2.15.0.886 В файл, без словарей: 19 В файл, со словарём: 24 Вслух, без словарей: 21 Вслух, со словарём: 23
После этих результатов я попробовал поменять правила коррекции (Изначально стоял комбинированный).
Вслух, со словарями: Комб/абзац: 24 Предложение: 22
Запись, со словарями: Комб/абзац: 23.58 Предложение: 18.13
Тут, судя по всему, и кроется почему изначально у меня и в записи были паузы. Без словаря пауз не будет при любом типе коррекции.
После этого я протестировал новые версии, и в них при любом типе коррекции в файл записываются паузы. Однако, самое любопытное, что если в новой версии включить исправление пауз в голосах Microsoft и поставить коррекцию по предложениям, то читать вслух программа будет без пауз.
Таким образом, чтение вслух происходит быстрее в новых версиях (19 vs 21 секунда), а запись без пауз возможна лишь в старых версиях.
Напомню, изначально я сравнивал оффлайн и онлайн версии, и там вслух результат был 16 против 23 секунд. В новой версии с иной коррекцией это уже 16 против 19. В записи это 16.1 против 18.1, но лишь в старых версиях.
Изначально я предполагал что эти паузы - свойство голоса т.к. в браузере Edge они тоже были, но сейчас уже не уверен. Браузерную версию я с секундомером не замерял, так что мне могло и показаться. Однако, по впечатлениям, оффлайн версия чуть быстрее читает.
Также я предполагал что голоса Ava и Emma задержку не имели, но, при сравнении, даже у них паузы стали чуть меньше. Может быть они просто имеют меньшую "естественную" паузу?
По итогу тут есть два вывода:
При чтении пауз нет лишь при коррекции по предложениям.
В последней версии невозможно записать файл без пауз.
Видимо, настройка исправления пауз для голосов Microsoft не применяется при записи. А изменение в этой версии добавило паузы даже при коррекции по предложениям.
На всякий случай я также провел тест на чтение вслух на оффлайн голосах на том же тексте с включённым словарём:
Zira комб 20 Zira пред 23
Mark комб 19 Mark пред 21
George пред 22 George комб 21
И оффлайн версии EdgeTTS:
Jenny комб 13 Jenny пред 14
Aria комб 17 Aria пред 17
Как видно, для оффлайн тип коррекции не добавляет пауз, а порой комб. может быть предпочтительнее. Разве что Zira выглядит подозрительно.
Возможно ли исправить задержку при комб/абзац коррекции и записи в файл? Или паузы между предложениями - это свойство голоса и паузы и должны быть такими, просто при коррекции по предложениям программа не отправляет абзац, а лишь сами предложение, сама делая паузы между предложениями?
Паузы у Aria 23 с комб/абзац, а с пред 19. А вот у Ava это уже 19 и 18. Может в голосе Ava, Emma и дригих, у которых есть мультиязычная версия, паузы сделали меньше по умолчанию? А вот опробованные мною не-мульти голоса паузы имели.
Я сейчас ещё установил расширение MS Edge TTS на Firefox, и там голос Aria возвращает аудиофайл на 24 секунды, что тоже намекает что это паузы по умолчанию. Ava там даёт файл на 20 секунд, что ближе к 19 что идёт в комб/абзац режиме.
Если это естественные паузы, то у не-мульти голосов они слишком долгие. Но и отсутствие пауз тоже немного режет слух, хоть и чуть лучше изначального варианта. Можно использовать способ коррекцией по предложениям и самому добавить тишины по вкусу в настройке пауз, но это не столь удобно т.к. паузы будут применены и к голосам, которые в них не нуждаются.
Сообщение отредактировал Kei - Воскресенье, 23.11.2025, 13:16
Дата: Воскресенье, 23.11.2025, 22:43 | Сообщение #81
V.I.P.
Группа: Модераторы
Сообщений: 209
Статус: Offline
Kei Несколько раз прочёл Ваш пост, но так и не понял до конца, что именно Вам нужно. Коротко могу ответить, что ранее "Балаболка" при записи в звуковой файл делила текст на предложения; сейчас программа делит текст на абзацы. Если сейчас при записи звукового файла появляются паузы между предложениями внутри абзаца - это паузы самого голоса: так было задумано разработчиками синтезатора речи.
Для новых голосов Microsoft (online, natural) эта пауза равна 750 миллисекундам. Теоретически ее можно изменить, если программа будет оформлять каждый запрос к голосу как SSML (можно задать паузы между предложениями, в начале текста, в конце текста). Но "Балаболка" не использует SSML: поддерживаются лишь XML-теги SAPI 5.
С паузами вот какая ситуация. Программа делит текст на части, и отправляет каждую часть голосу; голос возвращает аудиоданные, и там будут три вида пауз:
пауза в начале аудиоданных; теоретически она должна быть очень маленькой, но разные голоса вставляют тишину разной длины, до 100-150 мс;
пауза в конце аудиоданных; она может быть очень разной - до нескольких сотен или даже тысяч миллисекунд;
паузы между предложениями внутри аудиоданных; это всё на усмотрение голоса - он сам определяет длину паузы между предложениями.
Соответственно, когда раньше "Балаболка" делила текст на предложения, то присутствовали лишь два вида пауз - в начале аудиоданных и в конце аудиоданных, полученных от голоса. Суммарная длина этих пауз (в конце одного предложения и в начале следующего) была непредсказуемой: от нескольких миллисекунд до секунды и больше.
Сейчас внутри абзаца длина пауз задана разработчиками конкретного голоса: это их решение; я не несу ответственности за выбранные ими значения. Длина пауз между абзацами всё также остается непредсказуемой: действительно, для некоторых голосов пауза между абзацами может быть даже меньше паузы между предложениями.
Как я понял, Вы хотите, чтобы при записи аудиофайла "Балаболка" делила текст на предложения (как было в старых версиях). Не могу обещать, что сделаю это. Но я согласен, что в программе наблюдается чехарда с паузами: если применять словари к предложениями, программа будет делить текст на предложения; если не применять словари, текст делится на абзацы. И каждый раз голос будет вставлять свои паузы в начало аудиоданных (в начало предложения или абзаца), в конец аудиоданных (в конец предложения или абзаца), а также между предложениями внутри аудиоданных. Теоретически для новых "online" голосов Microsoft этими паузами можно управлять, но в "Балаболке" такой возможности нет.
Дата: Понедельник, 24.11.2025, 17:20 | Сообщение #82
Группа: Пользователи
Сообщений: 9
Статус: Offline
balabolka
Прошу прощения за сумбурность, в процессе тестов появлялись новые данные и текст дописывался, теряя связность. Если вначале я грешил на Балаболку, теперь у меня больше претензий к голосам Microsoft.
Обычно я пользуюсь только голосом Ava, в котором паузы между предложениями более короткие, поэтому при сравнении онлайн и оффлайн голосов мне сперва показалось что проблема в других онлайн голосах из-за Балаболки. Тем более что изменение некоторых параметров действительно давало уменьшение пауз. Ещё меня смутил этот пост. Если я теперь всё правильно понимаю, то паузы становятся меньше из-за того что в режиме чтения со влючённым словарём и коррекцией по предложениям программа передаёт данные по предложениям, не давая возможности голосу зачитать несколько предложений и поставить естественную паузу.
В той теме на 4pda автор поста сказал что пользуется только записью в аудиофайл, поэтому для него в новых версия "хитрость" с уменьшением пауз и недоступна. Но в случае записи файла паузы можно уменьшить в Audacitry.
Так или иначе, проблема кроется в паузах по умолчанию, а не Балаболке. Мультиязычные голоса типа Ava и Emma, и почему-то голос Sonia, не имеют настолько заметную паузу между предложениями при комб/абзац режиме.
Не уверен что Дмитрий - последний слитый голос, но вариант в виде Eric и Michelle я так и не понял как установить из той раздачи Gears of War. Как под них редактировать реестр я на 4pda не нашел, плюс там ещё предлагалось как-то через докер подменять словари... В общем, вот последние тесты что я провёл по этому вопросу на Дмитрии:
Использовалась чистая портативная v909 и этот текст в режиме чтения:
Солнце встало рано. Птицы пели в саду. Тонкий туман лежал над лугом. Я вышел на крыльцо. Холодный воздух бодрил. Кофе горячо шипел в чашке. Кошка мяла подол штанов. Дети смеялись неподалёку. Ветер шевелил листья. День обещал быть спокойным.
Дмитрий оффлайн, предложения: 18 Дмитрий оффлайн, комбинированный: 17
Без словаря
Дмитрий оффлайн, предложения: 17 Дмитрий оффлайн, комбинированный: 17
Расширение MS Edge TTS возвращает аудиофайл на 26 секунд. Полагаю оно сразу весь текст отправляет.
Я всё ещё не уверен почему все имеющиеся у меня оффлайн голоса читают быстрее, Хотя один раз голос Sonia выдал те же 17 секунд как и его оффлайн версия. Но в основном он даёт 20-21 секунду на чтение при любых настройках.
Может у оффлайн голосов иные настройки, либо голос на сервере тоже по предложением читает и потом их склеивает, вставляя паузу.
Буду пока слушать свою любимую Ava без пауз, но трясись теперь. И так неуютно зависеть от стороннего сервера, так теперь ещё и не понятно: пауз у неё нет потому что её ещё не "пропатчили", или это другие голоса не "починили"?
Про 10 минут Вы говорили, а про размер фрагмента - не помню. Есть какие-то изменения что окажут влияние на Балаболку, или для неё ничего не поменялось? В смысле того как Балаболка нарезает текст для отправки, его можно отправлять в том же количестве?
Я попробовал этот длинный текст одним предложением протестировать на Ava и Guy:
While the early morning mist clung to the rolling hills and the distant church bell tolled softly, a lone traveler, whose weathered boots had long since memorized the rhythm of the path and whose mind carried a collage of fleeting memories—sunlit kitchens, thunderous rehearsals, whispered promises, and the sharp tang of sea air from a childhood summer—paused beneath an ancient oak whose gnarled branches, like the bent fingers of an old storyteller, reached out to cradle the sky, and as he lifted his face to the pale gold of a waking sun, he felt a curious and sudden clarity, as if all the scattered fragments of his life were being swept together by an invisible hand into a single, coherent mosaic that shimmered with equal parts regret, wonder, and cautious hope, prompting him to take a deep breath that tasted faintly of smoke and rain and to whisper a vow—softly, solemnly, without fanfare—to keep walking, to keep listening for the music hidden in ordinary days, to forgive what could not be undone, and to seek, however quietly, the next small kindness he might offer to the world that had already given him so much.
Оба они перед этими словами делали разрыв:
lifted his face to
could not be undone
Похоже Балаболка режет с запасом, но просто хочу уточнить из первых рук.
P.S. Пока голоса не работали я искал альтернативы и увидел что Вы сделали удобный установщик оффлайн Edge голосов. Я удобно доустановил интересные мне, большое спасибо!
P.P.S Давно хотел спросит но всё забывал: почему Балаболка не делает разрыв между абзацами? В тексте внутри epub-файла мнежду элементами p стоит <hr/> но в программе ни строки типа "---", и просто дополнительной пустой строки не появляется.
Насколько я понимаю, на заре времён никто не договорился как оформлять разрывы и поэтому в одной программе они есть, в другой нет. Но возможно ли в Балаболке ставить на месте этого элемента пустую строку или какое нибудь "* * *". В некоторых книгах бывают частые смены точек зрения, и иногда с удивлением для себя открываешь что последние пару строк были уже от лица иного персонажа.
Сейчас лимит для "нарезания" кусков текста менее 4096 символов, так что проблем быть не должно. Если, конечно, текст не содержит много чисел или сокращений: в этом случае продолжительность аудио может не уложиться в 10 минут.
Тег <hr> в "Балаболке" никак не обрабатывается. Символы типа "---" или "* * *" вставлять не стану ни в коем случае, так как обязательно найдется голос, который будет читать это как "минус минус минус" или "звёздочка звёздочка звёздочка". Подумаю над вставкой пустой строки вместо этого тега. Спасибо за информацию.
Жаль что нет универсального символа для обозначения разрыва. Я у себя давно на "* * *" сделал небольшую паузу, но да, без доработки словарём будет "звёздочка, звёздочка, звёздочка". Если Вы сделаете пустую строку, то можно ли словарём задать на двух пустых строках паузу? Или коррекция устроена так, что это невозможно?
Такой ещё вопрос: не знаете, что определяет настройки скорости голоса для EdgeTTS?
В браузере довольно кутцые настройки, пара делений туда, пара обратно. В расширении MS Edge TTS для Firefox градация +-50%. А в Балаболке +-10. Насколько я понимаю, все SAPI 5 имеют такой диапазон. Я сравнил, и итоговый файл в Балаболке со значением 2 выходит быстрее файла из MS Edge TTS с настройками +10%. Из этого делаю предположение что у этих голосов нету строгого списка допустимых значений, поэтому автор расширение и адаптора смогли задать свои шкалы. То есть где-то в NaturalVoiceSAPIAdapter есть "таблица" для перевода шкалы SAPI в конкретные значения внутри допустимого Edge голосами диапазона?
Если голоса Edge даже имеют диапазон настроек в +-50%, то это в пять раз больше допустимых значений чем в Балаболке сейчас. С учётом того что +-3 - это уже сомнительно что приятно слушать, то я лучше бы обменял всю шкалу на ригулировку в +-15 процентов как в расширении, чтобы одно диленее SAPI соответсвовало 1,5% для более тонкой настройки.
Это вопрос уже скорее к автору NaturalVoiceSAPIAdapter, я просто неуверен как это всё устроено.
Сообщение отредактировал Kei - Суббота, 20.12.2025, 23:44
Дата: Понедельник, 22.12.2025, 02:29 | Сообщение #86
V.I.P.
Группа: Модераторы
Сообщений: 209
Статус: Offline
ЦитатаKei ()
Если Вы сделаете пустую строку, то можно ли словарём задать на двух пустых строках паузу? Или коррекция устроена так, что это невозможно?
"Балаболка" читает текст абзацами и, соответственно, применяет правила к текущему абзацу. Программа не сможет сделать паузу на нескольких пустых строках подряд.
Насчет замены <hr> пустой строкой буду еще думать. Тут есть свои "за" и "против".
ЦитатаKei ()
Такой ещё вопрос: не знаете, что определяет настройки скорости голоса для EdgeTTS?
В Microsoft Azure скорость речи меняется от -50% до +200%. А в SAPI 5 скорость речи меняется от -10 до +10. Неоднократно разработчиков Microsoft просили изменить этот диапазон (увеличить или вместо целых чисел использовать вещественные), но всё бесполезно: это было невероятно глупое решение со стороны разработчиков. Оно очевидно было нелепым уже во времена Windows XP.
Создатель NaturalVoiceSAPIAdapter вынужден для скорости речи конвертировать диапазон SAPI 5 в диапазон Microsoft Azure. В модуле TTSEngine.cpp есть такой код:
То есть, увеличению темпа речи на одну единицу в SAPI 5 соответствует шаг в 20% при использовании NaturalVoiceSAPIAdapter. Из-за странной прихоти программистов Microsoft у нас нет более точной настройки скорости речи при работе с online-голосами через SAPI 5.