Драйвер NVDA для нейронных естественных голосов Microsoft (Azure Embedded Speech SDK), работающий полностью офлайн после установки голосовых пакетов.
Внимание, если вы обновляетесь с версии 1.13.0 или более старой. Дополнение сменило имя с «NeuralVoices» на «NeuralVoicesUA» — чтобы его не путали со сторонним драйвером с таким же названием. Для NVDA это новое дополнение, поэтому старое останется установленным рядом: удалите «NeuralVoices» в управлении дополнениями после установки этого. Ваши настройки — голоса, пары голосов, параметры каждого голоса, профили — переносятся автоматически.
Сам синтезатор далее настраивается в обычном диалоге NVDA «Голос синтезатора» — Ctrl+Insert+V (те же параметры доступны и в кольце настроек, NVDA+Ctrl+стрелки):
Отдельный диалог настроек этого дополнения (меню NVDA → Параметры → Настройки NeuralVoicesUA) содержит шесть разделов: Языки (какие языки показывать в разделе «Голоса»), Голоса (голос и параметры для каждого языка), Пары голосов (ниже), Голосовые профили (ниже), Ударение слова (ниже) и Разное (кнопка «Справка», открывающая этот файл в браузере).
Раздел «Голоса» диалога настроек дополнения позволяет для каждого отмеченного в разделе «Языки» языка выбрать, какой из установленных голосов озвучивает его по умолчанию, и настроить его скорость, высоту тона и громкость отдельно от других голосов. Ошибка одного голосового пакета не мешает загрузке остальных установленных — если какой-то голос не появляется в списке, проверьте прежде всего именно его установку.
Пара голосов — это именованная группа соответствий «язык → голос» (не обязательно ровно два языка: можно создать, например, группу из трёх и более языков — английский + украинский + немецкий и т.д.). Переключение между парами одним пунктом заменяет настройку каждого языка по отдельности.
В диалоге настроек активная пара отмечается надписью «(активна)» в списке пар, а если сохранённая пара ссылается на более не установленный голос — это видно прямо в списке участников пары.
Чтобы быстро переключаться между парами без открытия диалога настроек: откройте меню NVDA → Параметры → Жесты ввода, найдите категорию «NeuralVoicesUA» → «Переключить на следующую пару голосов NeuralVoicesUA» и назначьте удобное сочетание клавиш. По умолчанию сочетание не назначено.
Голосовой профиль — это нумерованный слот, в который кладётся одна пара голосов вместе с её скоростью, высотой тона и громкостью. Слотов десять, и у каждого своя комбинация клавиш: NVDA+Ctrl+1 … NVDA+Ctrl+9, а десятый — NVDA+Ctrl+0.
Отличие профиля от жеста «следующая пара голосов» — в двух вещах. Во-первых, профиль открывает нужную пару сразу, а не после нескольких нажатий подряд. Во-вторых, и это главное: профиль срабатывает даже тогда, когда синтезатор NeuralVoicesUA сейчас не активен в NVDA — комбинация сама переключает NVDA на него и поднимает его уже с голосами профиля. Жест «следующая пара» в такой ситуации лишь сообщает, что синтезатор не активен.
Чтобы настроить профиль:
Кнопка «Очистить профиль» освобождает слот; сама пара при этом остаётся.
Комбинации клавиш можно изменить: меню NVDA → Параметры → Жесты ввода → категория «NeuralVoicesUA». По умолчанию выбраны NVDA+Ctrl+цифра, а не Ctrl+Alt+цифра, поскольку последние в Microsoft Word означают стили заголовков.
Если пара, на которую ссылался профиль, удалена, слот показывает это в списке, а нажатие его клавиши сообщает, что пары больше нет — сам профиль при этом не исчезает, достаточно назначить ему другую пару.
Флажок «Определять язык текста на основе Unicode-письменностей» в настройках голоса NVDA (Ctrl+Insert+V) включает автоматическое переключение голоса по письменности символов (латиница, кириллица и т.д.) прямо внутри одного предложения — удобно сочетать с парами голосов, чтобы текст на смешанном языке сразу озвучивался нужными голосами из выбранной пары.
Украинский и русский используют одну и ту же кириллицу, поэтому по одной только письменности их не различить. Если пара голосов настроена сразу и на украинский, и на русский язык, драйвер автоматически включает отдельный режим: по умолчанию используется украинский, а переключение на русский происходит только тогда, когда в тексте (в пределах одного предложения) встречается что-то характерное именно для русского письма.
Этот режим можно также включить отдельно, без настройки пары голосов: флажок «Автоматически определять русский текст в кириллице (экспериментально)» в настройках голоса NVDA (Ctrl+Insert+V, и в кольце настроек) работает при условии, что установлен хотя бы один украинский и хотя бы один русский голосовой пакет — если какого-то из них нет, NVDA озвучит соответствующее сообщение, и флажок не включится.
Признаки, по которым текст определяется как русский:
Это эвристика, а не абсолютное правило: короткие слова и фразы без этих маркеров по умолчанию останутся украинскими, даже если фактически написаны по-русски. Классификация обновляется на каждой точке, восклицательном или вопросительном знаке, а также переносе строки — то есть маркер в одном предложении не переходит на соседнее.
Полный список маркеров хранится в отдельном текстовом файле synthDrivers\NeuralVoices\russianMarkers.txt внутри папки дополнения — его можно отредактировать любым текстовым редактором, чтобы добавить свои маркеры. Изменения вступают в силу после перезапуска NVDA.
Защита от ложного срабатывания: если в предложении есть буквы і, ї, є, ґ (их нет в русском алфавите), оно всегда остаётся украинским — независимо от того, встретился ли в нём какой-то из маркеров выше. Это гарантия, а не эвристика: наличие этих букв стопроцентно означает, что текст украинский.
Исключение: если такая буква встречается только в самом первом слове предложения (например, когда какое-то приложение «приклеивает» собственную украинскую метку элемента, скажем «Відео», прямо перед русским текстом без какого-либо знака препинания между ними), а остальная часть предложения сама по себе однозначно выглядит русской — гарантия действует только на это первое слово, а не на всё предложение.
То же самое касается украинских слов или фраз, вставленных в середину предложения (например, когда NVDA описывает встроенный эмодзи по-украински прямо посреди иначе полностью русского предложения) — но в этом случае гарантия снимается только тогда, когда остальная часть предложения (без этой вставки) содержит букву ы, э или ъ — не просто какой-то маркер-эвристику, а стопроцентный признак русского письма.
Так же устроено распознавание польского и немецкого языков внутри латиницы. Если пара голосов настроена сразу и на английский, и на польский язык (или английский и немецкий), драйвер автоматически включает соответствующий режим; отдельно его включают флажки «Автоматически определять польский текст в латинице (экспериментально)» и «Автоматически определять немецкий текст в латинице (экспериментально)» в настройках голоса NVDA — при условии, что установлены соответствующие голосовые пакеты (английский и польский / английский и немецкий).
Немецкие твёрдые буквы ä, ö, ü, ß однозначно определяют немецкий текст независимо от каких-либо маркеров — их нет в польском алфавите. Полные списки маркеров — в файлах synthDrivers\NeuralVoices\polishMarkers.txt и synthDrivers\NeuralVoices\germanMarkers.txt, с тем же принципом редактирования, что и для русских маркеров выше.
Число внутри предложения (например, «в 2024 году») озвучивается языком этого предложения, а не всегда украинским. Число в НАЧАЛЕ фразы берёт язык следующего за ним текста: «5 з десяти» прозвучит полностью по-украински, даже если активен английский голос.
Если полагаться на эту догадку не хочется, пункт «Язык чисел» в настройках голоса NVDA (Ctrl+Insert+V, и в кольце настроек) закрепляет за цифрами кириллицу или латиницу навсегда: «Автоматически (по окружению)» — поведение по умолчанию, «Всегда кириллицей», «Всегда латиницей». В режиме «Всегда кириллицей» число в русском предложении всё равно прозвучит русским голосом, а не украинским.
Флажок «Игнорировать цифры при определении языка текста» полностью отключает эту привязку: цифры становятся полностью нейтральными для определения языка, как пробелы или знаки препинания. Имеет смысл включать его, если числа в тексте сбивают автоопределение языка на соседних словах.
Модель Microsoft иногда неправильно ставит ударения в украинских словах. NeuralVoicesUA позволяет исправить это самостоятельно, не дожидаясь обновления от Microsoft. Флажок «Исправлять ударение украинских слов из словаря» в настройках голоса NVDA включает или выключает всю эту поправку.
NVDA+Alt+U работает поверх любой программы и открывает короткое окно:
Украинский язык сильно изменяет слова по падежам, поэтому вписывать каждую форму отдельной строкой неудобно. Список предлагает четыре варианта, от самого узкого до самого широкого:
Приставка может менять ударение — в отличие от окончаний, которые почти всегда его сохраняют. Особенно это касается приставки «ви-» (укр. «вы-»), которая почти всегда перетягивает ударение на себя («ви́писати», «ви́носити», «ви́конати»). Поэтому варианты с разрешённой приставкой никогда не применяются к слову, которое начинается ровно с «ви» перед основой, — это сделано намеренно: лучше не исправить произношение, чем исправить его неправильно. Если нужно именно такое исключение, добавьте это конкретное «ви-»-слово отдельной записью с вариантом «Только это слово»: точная запись всегда имеет приоритет над основой. Основа с разрешённой приставкой должна быть не короче 4 букв — более короткая совпадала бы со слишком многими несвязанными словами; на вариант «только окончание» это ограничение не распространяется.
Кнопка «Открыть настройки словаря…» в быстром окне (как и раздел «Ударение слова» в диалоге настроек дополнения напрямую) открывает полный список слов: там можно просмотреть, изменить или удалить любую запись, а не только только что добавленное слово.
Словарь хранится в файле в папке конфигурации NVDA, поэтому не исчезает при обновлении дополнения.
По нажатию NVDA+Alt+E озвучивание эмодзи включается и выключается. NVDA сразу сообщает результат: «Эмодзи не озвучиваются» или «Эмодзи озвучиваются».
Зачем это. В лентах соцсетей, мессенджерах и на сайтах эмодзи встречаются пачками, и каждый NVDA озвучивает описанием — «улыбающееся лицо с улыбающимися глазами», «тон кожи 3». Чтобы добраться до двух слов текста, приходится выслушать описание двух десятков значков. Флажок убирает их из речи ещё до синтеза.
Тот же переключатель есть и как обычная настройка голоса — «Не озвучивать эмодзи» в диалоге «Голос синтезатора» (Ctrl+Insert+V) и в кольце настроек, поэтому его состояние сохраняется между запусками NVDA.
Список состоит примерно из 1635 правил и охватывает сами значки, модификаторы тона кожи и служебные символы. Каждый эмодзи заменяется пробелом, а не пустой строкой: иначе слова, написанные вплотную к значку, слиплись бы в одно.
Если нужен свой список, положите файл neuralVoicesEmoji.dic в папку конфигурации NVDA — он полностью заменит встроенный. Формат тот же, что и у словарей речи NVDA: шаблон, замена, учёт регистра, тип, разделённые табуляцией. Правила с регулярными выражениями (тип 2) не применяются.
Фильтрация действует только когда активный синтезатор — NeuralVoicesUA: в чужую речь дополнение не вмешивается.
Автор дополнения — Александр Николайчук (alexandrnikolaychuk@gmail.com).
Если вы хотите поблагодарить автора, а также поддержать развитие проекта, это можно сделать по следующим реквизитам: