Компиляционный синтез речи
LAWNMOWER MAN (Proteus)
Contents
Синтезаторы речи различаются, прежде всего, по исходному речевому материалу. Это могут быть или предварительно закодированная, сжатая по возможности речь в виде фраз, слов, слогов, фонем или сегментов, или искусственные речеподобные звуки, сформированные электронным устройством.
В первом случае используют широко известные из общей теории обработки сигналов способы: спектральное описание, адаптивную дельта модуляцию, клиппирование, логарифмическую импульсно-кодовую модуляцию, аппроксимацию формы полуволны и другие способы. Мне особенно нравится так называемый метод распознавания обазцов. Коротко его суть заключается в следующем: в памяти хранится множество образцов огибающих. Программа берет небольшую часть сигнала и решает на какой из образцов он похож больше, т.е. передается уже не сам сигнал, а номера образцов. Может быть это бестолковая идея, но её так просто реализовать !
По принципу построения синтезируемых сообщений из исходных элементов различают синтезаторы целостные и компилятивные. В первом случае целые слова или фразы, предварительно закодированной естественной речи извлекаются из памяти и восстанавливаются. Во втором случае система создает речевое сообщение из отдельных элементов естественного или искусственного происхождения. Целостный синтез обладает хорошей натуральностью звучания, но имеет ограниченный набор слов (фраз). Компилятивный синтез позволяет строить произвольные сообщения по тексту, но уступает в натуральности звучания, так как простая стыковка звуков не соответствует физике речеобразования и плохо воспринимается на слух. Системы компилятивного синтеза имеют очень важные преимущества:
Проще всего осуществлять такой синтез по фонетической транскрипции, или же система должна обладать способностью преобразовывать орфографический текст в фонетический.
Основная проблема компилятивного синтеза - это учет коартикуляции, т.е. взаимного влияния артикуляционных движений при произнесении соседних звуков и, как следствие, зависимости параметров фонемы от фонетического окружения. Особенно подвержены коартикуляции начальный и конечный участки фонем. Для решения этой проблемы разработаны различные методы. В частности, компилятивный синтез речи из аллофонов. Но в данном случае возникает другая проблема: предварительное выделение аллофонов из речи и их дальнейшее согласование при синтезе.
Запись и воспроизведение по слогам (подобный способ синтеза применяется в программе CHESSMASTER 7000).
Запись стыков между всеми сочетаниями звуков.
Метод уменьшения амплитуды начального и конечного участков каждой фонемы по какому-либо математическому закону (в простейшем случае - по линейному закону) и наложение этих участков друг на друга.
Форматный синтез и коартигуляция с помощью интерполяции форматных траекторий.
Таблица правил содержит в себе список эвристик, упорядоченный по приоритетам.
Для поиска ударений сначала проверяется список всегда выполняющихся эвристик, затем словарь исключений, затем список не всегда выполняющихся эвристик.
В односложных словах ударение падает на единственную гласную.
В словах, содержащих гласную -e-, ударение падает на эту гласную.
Если слово заканчивается на -льон (+ окончание), то ударение падает на этот слог.
Пример: бульон, павильон.
Если слово заканчивается на -ция, то ударение падает на предыдущий слог.
Пример: милиция, конституция.
Если слово заканчивается на -ион (+ окончание), то ударение падает на гласную -о-.
Пример: миллион.
Если слово заканчивается на -иант (+ окончание), то ударение падает на гласную -а-.
Пример: бриллиант, вариант.
Если слово начинается с приставки, и за приставкой следует одна из следующих подстрок: -бира-, -лага-, -тира-, -мира-, -пира-, -стила-, -дира-, то ударение падает последнюю гласную подстроки.
Пример: разбирающий, перестилать.
Если слово содержит подстроку -стира- или -ража-, то ударение падает на гласную -а-.
Пример: стирающий, выражать.
Если слово заканчивается на одну из следующих подстрок (+ окончание), то ударение падает на первую гласную подстроки: -ист-, -истк-, -изм-, -ент-, -ентк-, олог-, -ант-, -антк-, -уля-, -аст-, -астк-, -ир-, -ург-, -атор-, -итор-, -ктор-
Пример: турист, туристка, капитализм, студент, студентка, филолог, аспирант, аспирантка, грязнуля, гимнаст, гимнастка, командир, хирург, оператор, аудитор, кондуктор.
Если слово содержит один из следующих суффиксов, то ударение падает на первую гласную суффикса: -онок-, -онк-, -юшк-, -ишк-, -ашк-, -ат-, -ят-, -атин-, -ятин-, -оныш-, -яг-, -чан-,-чанин-,-янк-,-анк-,-рам- .
Пример: медвежонок, девчонка, зверюшки, мальчишка, букашка, девчата, козлята, зайчатина, козлятина, работяга, англичанин, землянка, панорама.
В словах, заканчивающихся на одну из следующих подстрок (+ окончание), ударение падает на первую гласную подстроки: -манность, -ебниц-, -иец-, -еец-, -аец-, -графия, -метрия, -логия, -евно, -ально, -ебно, -душно .
Пример: туманность, лечебница, партиец, гвардеец, китаец, география, геометрия, биология, плачевно, нормально, лечебно, равнодушно.
В словах, заканчивающихся на одну из следующих подстрок (+ окончание), ударение падает на первую гласную, стоящую перед подстрокой: -тельность, -енность, -льник-, -тик- .
Пример: внимательность, болезненность, начальник, математика.
Если слово состоит из двух слогов (+ окончание) и второй слог включает в себя одну из следующих подстрок, то ударение падает на первый слог: -очк-, -ость, -чик-, -щик-, -ник- .
Пример: девочка, зрелость, мальчик, ящик, чайник.
Если слово заканчивается на одну из следующих подстрок (+ окончание) то ударение падает на вторую гласную подстроки: -урги-, -овато .
Пример: металлургия, серовато.
В словах, начинающихся с подстроки -аэро-, за которой следует один слог (+ окончание), то ударение падает на этот слог.
Пример: аэропорт, аэродром.
Если слово заканчивается на одну из следующих подстрок и окончание прилагательного, то ударение падает на первую гласную подстроки: -евн-, -ебн-, -альн-, -ичн-, -учн-, -душн-, -ивн-, -ическ-, -он- анн н-, -инн-, -изн-, -ин-, -ив-,-ованн- .
Пример: плачевный, лечебный, нормальный, логичный, научный, равнодушный, спортивный, классический, телефонная, глубинный, капризный, голубиный, ленивый, организованный.
Если слово содержит один из следующих суффиксов, перед которым в слове только один слог, и заканчивается на окончание прилагательного, то ударение падает на этот суффикс: -аст-, -ист-.
Пример: ушастый, пушистый.
В словах, содержащих суффикс -оват- или -еват-, ударение падает на вторую гласную суффикса.
Пример: сероватый, бежеватый.
Если слово состоит из двух слогов и окончания прилагательного, и второй слог -айш- или -ейш-, то ударение падает на второй слог.
Пример: ближайший, нежнейший.
Если слово заканчивается на одну из следующих подстрок и окончание прилагательного, то ударение падает на слог, предшествующий подстроке: -тельск-, -льск-.
Пример: приятельский, подольский.
Если слово заканчивается на подстроку - и окончание прилагательного или на подстроку - анно, и перед подстрокой в слове стоит только один слог то ударение падает на первую гласную подстроки.
Пример: туманный, желанно.
Если слово начинается с приставки, заканчивается на одну из следующих подстрок и окончание глагола, и между приставкой и подстрокой стоит по меньшей мере один слог, то ударение падает на слог, предшествующий подстроке: -ива-, -ыва-, -ив-, -ыв-.
Пример: рассматриваешь, разглядываешь, расписываться, приклеивать.
Если слово начинается с приставки, заканчивается на одну из следующих подстрок и окончание прилагательного, и между приставкой и подстрокой стоит по меньшей мере один слог, то ударение падает на слог, предшествующий подстроке: -ивающ-, -ывающ-, -иваем-, -ываем-, -ивавш-, -ывавш- .
Пример: рассматривающий, разглядывающий, разбрасываемый, привязывавший.
Если слово заканчивается на подстроку - иров - и окончание глагола, и перед подстрокой в слове стоит по меньшей мере один слог, то ударение падает на первую гласную подстроки.
Пример: регулировать, трансформировать.
Если слово заканчивается на одну из следующих подстрок и окончание прилагательного, и перед подстрокой в слове стоит по меньшей мере два слога, то ударение падает на первую гласную подстроки: -ирующ-, -ируем-, -ировавш-.
Пример: регулирующий, трансформируемый, гарантировавший.
В глаголах, имеющих следующие окончания -ишь-, -ешь-, -ите-, -ете-, -ем-, -ет-, -им-, -ит-, -ат-, -ят-, -ут-, -ют- ударение падает на слог, предшествующий окончанию, в остальных глаголах (кроме указанных в словаре) ударение падает на первый слог окончания.
Пример: смотришь, ходят.
Если прилагательное имеет суффикс - ов -, перед которым в слове стоит только один слог, то ударение падает на этот суффикс.
Пример: торговый, портовый.
Если существительное заканчивается на одну из следующих подстрок и окончание, то ударение падает на первую гласную подстроки: -ани-, -ени-, -яни-, -ити-, -яти- .
Пример: внимание, строение, влияние, наитие, мероприятие.
В существительных, заканчивающихся на -арь или -ырь, ударение падает на последний слог.
Пример: фонарь, пустырь.
В существительных, заканчивающихся на подстроку - шинств - и окончание, ударение падает на первую гласную окончания.
Пример: старшинство, меньшинство.
В существительных, состоящих из двух слогов и окончания, где второй слог - суффикс - ец -, ударение падает на первую гласную окончания. Если же окончание нулевое,то ударение падает на суффикс.
Пример: гордец, гордеца.
В существительных, имеющих один из следующих суффиксов, ударение падает на слог, предшествующий суффиксу: -чик-, -щик-, -ник- .
Пример: вагончик, барабанщик, второгодник.
В словах, содержащих подстроку - енн -, ударение падает на слог, предшествующий подстроке.
Пример: заполненный, присмотренный.
В словах, содержащих суффикс - чив -, ударение падает на слог, предшествующий суффиксу.
Пример: задумчиво, находчивый.
В словах, заканчивающихся на одну из следующих подстрок и окончание, ударение падает на слог, предшествующий подстроке: -чивост-, -ост-.
Пример: находчивость, туманность.
В наречиях, заканчивающихся на -иво, -асто, -исто, -турно ударение падает на первую гласную подстроки.
Пример: красиво, пушисто, культурно.
В прилагательных, имеющих один из следующих суффиксов, стоящий перед окончанием, ударение падает на суффикс: -аст-, -ист-, -лив-, -уч-, -ив-.
Пример: ушастый, душистый, сварливый, могучий,игривый.
В существительных, заканчивающихся на - ель или -аль (+ окончание), ударение падает на первую гласную подстроки.
Пример: параллель, спираль.
В существительных, имеющих суффиксы -ушк-, -иц-, -чих-, -еньк-, -ышк-, -очек-, -ищ-, -овк-, -ечк-, ударение падает на суффикс.
Пример: деревушка, ключица, зайчиха, деревенька, мартышка, дружочек, ручища, курсовка, крылечко.
В существительных, имеющих суффиксы -чиц-, -ниц-, ударение падает на слог, предшествующий суффиксу.
Пример: мотажница, наладчица.
Если слово содержит подстроку - тель -, то ударение падает на слог, предшествующий подстроке.
Пример: обстоятельство, старательно.
Если существительное заканчивается на одну из следующих подстрок (+ окончание), то ударение падает на слог, предшествующий подстроке: -ств-, -оньк-, -тик-, -нец, -нц-, -ик- .
Пример: хулиганство, кухонька, зонтик, румянец,румянца, коврик.
В прилагательных, заканчивающихся на одну из следующих подстрок и окончание, ударение падает на слог, пред- шествующий подстроке: -еньк-, -ищн-, -ск-, -ечн-, -чн-.
Пример: беленький, чудовищный, житейский, точечный, отличный.
В существительных, оканчивающихся на подстроку -тек - и окончание или на подстроку - тур - и окончание, ударение падает на первую гласную подстроки.
Пример: картотека, партитура.
В существительных, заканчивающихся на - ок, ударение падает на этот слог.
Пример: дружок, бережок.
В существительных, оканчивающихся на - брь, ударение падает на последний слог. Если окончание не нулевое, то ударение падает на первую гласную окончания.
Пример: октябрь, декабря.
В существительных, имеющих подстроку -парк-, ударение падает на первую гласную подстроки.
Пример: зоопарк, лесопарк.
Программа написана на языке C++, с применением библиотек WATCOM C++.
Программа построена таким образом, что она ничего не знает о языке, с которым она работает. Все необходимые данные записаны в конфигурационном файле.
REMARKCHAR | установка символа комментария(по умолчанию '.'). |
SYLLABLE | установка символа обозначающего слог(по умолчанию '@'). |
ANYCHAR | установка символа обозначающего любую непустую последовательность букв (по умолчанию '-'). |
PUBLIC | установка множества гласных букв. |
DEFTOKS | установка символа обозначающего какое либо буквосочетание из указанного списка (применяется для обозначения приставок, окончаний и т.п.). Символ равный (ANYCHAR) обозначает возможность пустого буквосочетания. |
OBLIGATORY | список всегда выполняющихся эвристик (список оканчивается словом END). |
!OBLIGATORY | список не всегда выполняющихся эвристик. |
EXCEPTIONS | файл со словарем исключений. |
END. | (chc) конец файла (chc контрольная сумма файла). |
Комментарии начинаются и кончаются с помощью символа определенного REMARKCHAR.
Символ определенный с помощью SYLLABLE обозначает один слог.
Символ определенный с помощью ANYCHAR обозначает любую непустую последовательность символов.
Символ определенный с помощью DEFTOKS обозначает одну из строк соответствующего списка.
Буква обозначает соответствующую букву в слове.
Символ ' обозначает, что ударение находится слева от заданной позиции.
Символ ` обозначает, что ударение находится справа от заданной позиции.
По умолчанию, при совпадении с шаблоном, ударение падает на первый слог слова.
Программа не знает, где проходят границы слога, и для заданного шаблона проверяет все возможные варианты границ проходящих через согласные буквы.
Словарь хранится в виде простого списка слов, ударение в которых обозначено символом '. И по сути представляет из себя тот-же набор эвристик, которые тупо грузятся в память.
Конструктор. В качестве параметра принимает имя конфигурационного файла, который загружает в память.
Деструктор.
Часть деструктора. Удаляет список из памяти.
Принимает указатель на слово. Выдает позицию ударения.
Добавляет слово в список оператора DEFTOKS.
Загружает список эвристик. Принимает указатель на файловый поток и список эвристик.
Сверяет слово с заданной эвристикой. Принимает указатель на эвристику, слово, и начальную позицию в слове (0).
Сверяет слово буквенным шаблоном из списка DEFTOKS и с остатком эвристики. Принимает указатель на остаток эвристики, остаток слова, образец из списка, текущую позицию слова.
Ищет заданное слово в заданном списке эвристик. Возвращает указатель на эвристику или 0. Также устанавливает переменные Direction, Position.
Контрольная сумма файла с правилами
Приблизительная позиция ударения.
Направление поиска гласной, от приблизительной позиции ударения.
Список гласных.
Список символов DEFTOKS.
Количество определенных DEFTOKS.
Элемент списка.
Массив указателей на списки DEFTOKS.
Ссылка на список обязательных и не обязательных эвристик. А также словарь исключений.
Буфер общего назначения.
Значения символов ANYCHAR, REMARKCHAR, SYLLABLE.