NeuralVoicesUA (драйвер нейронних природних голосів Microsoft)

Драйвер NVDA для нейронних природних голосів Microsoft (Azure Embedded Speech SDK), що працює повністю офлайн після встановлення голосових пакетів.

Зміст

Початок роботи

Увага, якщо ви оновлюєтесь із версії 1.13.0 або старішої. Надбудова змінила ім'я з «NeuralVoices» на «NeuralVoicesUA» — щоб її не плутали зі стороннім драйвером, який зветься так само. Для NVDA це нова надбудова, тож стара лишиться встановленою поруч: видаліть «NeuralVoices» у керуванні надбудовами після встановлення цієї. Ваші налаштування — голоси, пари голосів, параметри кожного голосу, профілі — переносяться самі, нічого налаштовувати заново не треба.

  1. Установіть цей драйвер, а також один або декілька додатків із голосовими даними — окремі надбудови з назвою на кшталт «NeuralVoices-voice-Ostap-Natural-Ukrainian-Ukraine» чи «NeuralVoices-voice-Polina-Natural-Ukrainian-Ukraine».
  2. Натисніть Ctrl+Insert+S, щоб відкрити діалог вибору синтезатора мовлення, і виберіть у списку «NeuralVoicesUA».

Сам синтезатор далі налаштовується у звичайному діалозі NVDA «Голос синтезатора» — Ctrl+Insert+V (ті самі параметри доступні й у кільці налаштувань, NVDA+Ctrl+стрілки):

Додатковий діалог налаштувань цього додатку (меню NVDA → Параметри → Налаштування NeuralVoicesUA) має шість розділів: Мови (які мови показувати в розділі «Голоси»), Голоси (голос і параметри для кожної мови), Пари голосів (нижче), Голосові профілі (нижче), Наголос слова (нижче) і Різне (кнопка «Довідка», що відкриває цей файл у браузері).

Голоси та пари голосів

Окремі голоси

Розділ «Голоси» діалогу налаштувань додатку дозволяє для кожної позначеної в розділі «Мови» мови вибрати, який із встановлених голосів озвучує її за замовчуванням, і налаштувати його швидкість, висоту тону й гучність окремо від інших голосів. Помилка одного голосового пакета не заважає завантаженню решти встановлених — якщо якийсь голос не з'являється в списку, перевірте насамперед саме його встановлення.

Пари голосів

Пара голосів — це іменована група відповідностей «мова → голос» (не обов'язково рівно дві мови: можна створити, наприклад, групу з трьох і більше мов — англійська + українська + німецька тощо). Перемикання між парами одним пунктом заміняє налаштування кожної мови окремо.

  1. Відкрийте меню NVDA → Параметри → Налаштування NeuralVoicesUA, перейдіть у розділ «Пари голосів».
  2. У полі «Назва пари» введіть довільну назву (наприклад, «Жіночі голоси»).
  3. У списку «Учасники пари» додайте потрібні мови: виберіть мову й голос, натисніть «Додати до пари» — і повторіть для кожної мови, яку хочете включити в пару.
  4. Натисніть «Зберегти пару».
  5. Щоб створити ще одну пару (наприклад, «Чоловічі голоси»), обов'язково натисніть «Нова пара», перш ніж вводити назву й додавати мови — інакше наступне «Зберегти пару» перезапише щойно створену пару замість того, щоб створити нову. Щоб відредагувати вже наявну пару, замість цього виберіть її в списку «Пари голосів».
  6. Закрийте діалог. Щойно створена пара з'явиться прямо у списку «Голос» (Ctrl+Insert+V) поруч зі звичайними голосами — вибір пари одразу призначає всі її голоси відповідним мовам.

У діалозі налаштувань активна пара позначається написом «(активна)» у списку пар, а якщо збережена пара посилається на більше не встановлений голос — це видно прямо в списку учасників пари.

Щоб швидко перемикатися між парами без відкриття діалогу налаштувань: відкрийте меню NVDA → Параметри → Жести введення, знайдіть категорію «NeuralVoicesUA» → «Перемкнути на наступну пару голосів NeuralVoicesUA» і призначте зручну комбінацію клавіш. За замовчуванням комбінація не призначена.

Голосові профілі

Голосовий профіль — це нумерований слот, у який кладеться одна пара голосів разом із її швидкістю, висотою тону та гучністю. Слотів десять, і кожен має власну комбінацію клавіш: NVDA+Ctrl+1NVDA+Ctrl+9, а десятий — NVDA+Ctrl+0.

Різниця між профілем і жестом «наступна пара голосів» — у двох речах. По-перше, профіль відкриває потрібну пару одразу, а не після кількох натискань поспіль. По-друге, і це головне: профіль спрацьовує навіть тоді, коли синтезатор NeuralVoicesUA зараз не активний в NVDA — комбінація сама перемикає NVDA на нього й одразу піднімає його з голосами профілю. Жест «наступна пара» в такій ситуації лише повідомляє, що синтезатор не активний.

Щоб налаштувати профіль:

  1. Спершу створіть потрібні пари голосів у розділі «Пари голосів» — профіль посилається на готову пару, а не заміняє її.
  2. Якщо хочете зберегти в профілі ще й параметри мовлення, виставте їх на панелі «Голоси» так, як вам треба.
  3. Відкрийте меню NVDA → Параметри → Налаштування NeuralVoicesUA, перейдіть у розділ «Голосові профілі».
  4. У списку «Голосові профілі» виберіть слот. Кожен рядок показує номер слота, його комбінацію клавіш і те, що в ньому лежить.
  5. У списку «Пара голосів для цього профілю» виберіть пару.
  6. Галочка «Запам'ятати також поточні швидкість, висоту й гучність» (типово увімкнена) зберігає в профілі поточні параметри кожного голосу пари окремо — саме так драйвер їх і зберігає, тож для пари з трьох мов запам'ятається три набори.
  7. Натисніть «Призначити профілю».

Кнопка «Очистити профіль» звільняє слот; сама пара при цьому лишається на місці.

Комбінації клавіш можна змінити: меню 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 працює поверх будь-якої програми й відкриває коротке вікно:

  1. Слово підставляється автоматично — з курсору перегляду (якщо ви щойно почули помилку, найпростіше одразу стати на це слово) або з буфера обміну; можна й ввести чи виправити вручну.
  2. У списку «Наголошена голосна» виберіть, яка голосна має бути наголошена.
  3. У списку «Застосувати до» виберіть, наскільки широко застосовувати виправлення (нижче).
  4. Натисніть «Прослухати», щоб перевірити результат на слух, — транскрипція завжди наближення, тож перевіряти варто щоразу.
  5. Натисніть «OK», щоб зберегти.

Список «Застосувати до»

Українська мова сильно змінює слова за відмінками, тож вписувати кожну форму окремим рядком незручно. Список пропонує чотири варіанти, від найвужчого до найширшого:

Префікс може змінювати наголос — на відміну від закінчень, які майже завжди його зберігають. Особливо це стосується префікса «ви-», який майже завжди перетягує наголос на себе («ви́писати», «ви́носити», «ви́конати»). Тому варіанти з дозволеним префіксом ніколи не застосовуються до слова, яке починається рівно з «ви» перед основою — краще не виправити вимову, ніж виправити її неправильно. Якщо потрібен саме такий виняток, додайте це конкретне «ви-»-слово окремим записом із варіантом «Лише це слово»: точний запис завжди має пріоритет над основою. Основа з дозволеним префіксом має бути не коротшою за 4 літери — коротша збігалася б із надто багатьма непов'язаними словами; на варіант «лише закінчення» це обмеження не поширюється.

Керування всім словником

Кнопка «Відкрити налаштування словника…» у швидкому вікні (як і розділ «Наголос слова» у діалозі налаштувань додатку напряму) відкриває повний список слів: там можна переглянути, змінити чи видалити будь-який запис, а не лише щойно додане слово.

Словник зберігається у файлі в теці конфігурації NVDA, тож не зникає при оновленні додатку.

Інші налаштування

Емодзі

За натиском NVDA+Alt+E озвучення емодзі вмикається й вимикається. NVDA одразу каже, що вийшло: «Емодзі не озвучуються» або «Емодзі озвучуються».

Навіщо це. У стрічках соцмереж, месенджерах і на сайтах емодзі трапляються пачками, і кожен NVDA озвучує описом — «усміхнене обличчя з усмішкою», «тон шкіри 3». Щоб дістатися до двох слів тексту, доводиться вислухати опис двох десятків значків. Прапорець прибирає їх з мовлення ще до синтезу.

Той самий перемикач є і як звичайне налаштування голосу — «Не озвучувати емодзі» в діалозі «Голос синтезатора» (Ctrl+Insert+V) та в кільці налаштувань, тож його стан зберігається між запусками NVDA.

Список складається приблизно з 1635 правил і охоплює самі значки, модифікатори тону шкіри та службові символи. Кожен емодзі заміняється пробілом, а не порожнім рядком: інакше слова, написані впритул до значка, злиплися б в одне.

Якщо потрібен власний список, покладіть файл neuralVoicesEmoji.dic у теку конфігурації NVDA — він повністю замінить вбудований. Формат той самий, що й у словників мовлення NVDA: шаблон, заміна, врахування регістру, тип, розділені знаками табуляції. Правила з регулярними виразами (тип 2) не застосовуються.

Прибирання діє лише тоді, коли активний синтезатор — NeuralVoicesUA: у чуже мовлення надбудова не втручається.

Поради

Про автора та підтримку проєкту

Автор додатку — Олександр Ніколайчук (alexandrnikolaychuk@gmail.com).

Якщо ви бажаєте подякувати автору, а також підтримати розвиток проєкту, це можна зробити за такими реквізитами: