Разметка и озвучивание смешанного текстаСмешанный текст - текст, содержащий помимо слов и символов на языке издания (базовом языке) символы на одном или нескольких других языках [1].
Сегодня литература очень часто изобилует множеством слов, фраз а иногда и целых кусков текста написанном на других языках. Как правило, все существующие сегодня голосовые синтезаторы способны самостоятельно выделять и озвучивать текст, написанный на английском, а иногда и других языках, однако зачастую качество произношения тех или иных слов просто ужасное – жуткий акцент, неправильное произношение, ударение и многое другое делает прослушивание такого текста практически бесполезным. С другой стороны, если учесть тот факт что помимо базового языка текст может содержать не только английский, то становится очевидным, что такой текст полноценно озвучить будет весьма затруднительно.
В связи с этим сейчас все больше получает распространение новый метод разметки и синтеза смешанного текста - били́нгва (от лат. bi - «дву(х)» и lingua - «язык») - метод, при котором используются два голосовых синтезатора - каждый для своего языка. Озвучивание смешанного текста разными голосами снимает все те погрешности произношения, которые возникают при синтезе всего текста только одним голосом. Однако подобный метод не единственный, существует и альтернатива, но про неё потом.
Главными проблемами при использовании метода билингва становятся: правильный выбор нужного голосового синтезатора, который бы хорошо сочетался с синтезатором для базового текста, имеется в виду восприятие произношения «на слух» и правильная разметка текста, выделение в тексте базового текста и всего остального. Если первая задача решается довольно просто – каждый может выбрать для себя то, что считает лучшим, то вторая представляет некоторые трудности. Прежде всего, трудности обусловлены самим текстом, точнее тем как именно базовый язык пересекается с другим - это могут быть отдельные слова, аббревиатуры, фразы и т.п.
Сегодня существует два способа реализации данного метода – программный и словарный.
Программный способ подразумевает выделение базового языка от остального программой для чтения – удобно, быстро, но есть привязка к конкретной программе и иногда встречаются ошибки.
Словарный способ представляет из себя разметку текста – выделение базового языка от остального тегами указывающими смену и выбор нужного голоса при непосредственном синтезе – немного дольше, чем предыдущий, сложнее и не все программы поддерживают формат подобных словарей, однако меньше ошибок и есть возможность правки уже найденных.
Как правило, самый простой словарь представляет собой ряд правил в виде регулярных выражений для поиска нужного фрагмента текста и обрамление его соответствующим тегом смены голоса.
Теги (tags) - это текстовые управляющие команды, вставляемые в читаемый текст, причём они сами не читаются, а подают синтезатору (речевому движку) справочную информацию (команды) по изменению тех или иных параметров чтения текста [2].
Поскольку теги смены голоса для SAPI4 некоторые голоса не поддерживают, остановимся только на SAPI5.
Тег Voice - заставляет движок изменить синтезатор на другой в соответствии с параметрами (Age, Gender, Language, Name, Vendor и VendorPreferred). Тег может быть пустым (тогда его действие распространяется на весь последующий текст) или не быть пустым (тогда действие тега ограничивается лишь фрагментом текста) [2].
Тег имеет два атрибута: Required ("обязательный") и Optional ("возможный"). Будет выбран речевой движок, который в наибольшей степени соответствует заданным параметрам. Если ни один подходящий голос не найден, то никаких изменений не произойдёт [2].
- Код:
-
Это предложение будет прочитано голосом по умолчанию.
<voice required="name = Alyona22k">
Это предложение будет прочитано Алёнкой.
<voice required="name = Microsoft Anna">
This text will be read by Anna.
</voice>
</voice>
Тег Lang - заставляет движок изменить синтезатор на другой в соответствии с заданным языком. Тег может быть пустым (тогда его действие распространяется на весь последующий текст) или не быть пустым (тогда действие тега ограничивается лишь фрагментом текста) [2].
Тег имеет только один атрибут LangId - это идентификатор языка, например, 419 (русский), 422 (украинский), 409 (американский английский) или 411 (японский). Хотя эти числа являются шестнадцатеричными, они записываются без приставки "0x" [2].
Примеры для различных идентификаторов языка LangId:
- Код:
-
409=You have selected %s as the computer's default voice.
411=%sの声をコンピュータの規定の声に選択しました。
804=你选择了%s作为计算机的缺省语音
401=لقد اخترت %s كالصوت الإفتراضي للكمبيوتر.
416=Você selecionou %s como voz padrão do computador.
405=Jako výchozí hlas počítače jste vybrali %s.
406=Du har valgt %s som computerens standardstemme.
407=Sie haben %s als Computerstandardstimme gewählt.
408=Έχετε επιλέξει %s ως προεπιλεγμένη φωνή του υπολογιστή.
c0a=Ha seleccionado %s como voz predeterminada de su equipo.
40b=%s on valittu tietokoneen oletusääneksi
40c=Vous avez choisi %s comme voix par défaut.
40d=בחרת את %s כקול ברירת המחדל של המחשב.
40e=A következőt választotta ki a számítógép alapértelmezett hangjaként.
410=La voce selezionata come predefinita è %
412=컴퓨터의 기본 음성으로 %s을(를) 선택했습니다.
413=U hebt %s als standaardstem geselecteerd.
414=Du har angitt %s som standardstemme for datamaskinen.
415=Jako domyślny głos komputera wybrano głos %s
816=Seleccionou %s como a voz predefinida do computador.
419=Голос компьютера по умолчанию - %s
41d=Du har valt %s som standardröst för datorn
41f=%s bilgisayarın varsayılan insan sesi olarak seçildi.
404=您選擇了 %s 做為電腦的預設語音。
Тег Lang является усечённым вариантом тега Voice с атрибутом Required, который содержит строку "Language=xxx" [2].
- Код:
-
<voice required="Language=409">
A U.S. English voice should speak this.
</voice>
<lang langid="419">
Это предложение будет прочитано русским голосом.
</lang>
Пример словаря для разметки русско-английского текста [3]: - Код:
-
([A-z.,!?-x20]+)=<eng>$1</eng>
<eng>([!?.,-x20]+)</eng>=$1
<eng>=<voice required="Name=Microsoft Anna">
</eng>=</voice>
Как уже наверно видно, проблему в таком методе составляет только разметка текста, который содержит в себе похожие символы, но имеет разное произношение. Данные словари почти полностью перекрывают смешанные тексты с базовым русским языком.
Помимо описанного метода синтеза, более чем с одним голосом, существует довольно простой метод синтеза одним голосом для базового языка. Заключается он в транслитерации слов другого языка на базовый язык. Простой пример:
- Код:
-
This test consists of one sentence.
Зыс тест консист оф ван сентенс.
Для реализации такого метода достаточно одного словаря (
словарь транслитерации), в котором будут переводиться базовые сочетания. Например, согласно [4]:
- Код:
-
ё=yo
ж=zh
ц=cz, c
ч=ch
ш=sh
ы=y'
ю=yu
я=ya
...
Данный метод прост до безобразия, однако с его помощью можно легко озвучивать текст с более чем двумя языками помимо базового, правда иногда, при синтезе, получается очень сильный акцент в виду неидеальности самой транслитерации слова.
Литература:- Мильчин А.Э. Издательский словарь-справочник: [электронное издание]. — 3-е изд., испр. и доп. — М.: ОЛМА-Пресс, 2006. http://slovari.yandex.ru
- Морозов И. Справочное руководство к программе Балаболка. http://www.cross-plus-a.ru
- Венедикт Ли, словарь Я_Билингва_SAPI5.ini. http://aloys.narod.ru/demagog.htm
- ГОСТ 7.79-2000 Транслитерация
Ссылки на предыдущие обсуждения данной темы:
https://mytts.forum2x2.ru/t291-topichttps://mytts.forum2x2.ru/t303-topic