Page 1 of 5

Проект: Речевой движок

Posted: Sun Jul 05, 2009 12:12 pm
by Mario
Давно уже (года 2) вертится в виде фонового процесса в мозгу, с периодически всплывающими напоминающими вызовами идея сваять голосовой движок.

Варианты:

1) Произношение по буквам
Преимущества: легкость реализации, малое количество сэмплов.
Недостатки: низкое качество речи, трудно воспринимаемое неподготовленным слушателем.

2) Произношение по слогам
Преимущества: повышенное качество речи.
Недостатки: реализация труднее чем п.1, большое количество сэмплов.

3) Произношение по словам
Преимущество: максимальное качество воспроизведения.
Недостатки: реализация нереальна для одиночного разработчика, потому что количество сэмплов для русского языка порядка 120 тысяч, а если учитывать все падежи, и прочие особенности, то вообще нереальное.

Как итог, я лично пока готов заниматься только вариантом 1.

Есть у кого-нибудь соображения в тему?

Re: Проект: Речевой движок

Posted: Sun Jul 05, 2009 2:12 pm
by Gluk
идея отличная.. но даже в первом варианте придется анализировать слово целиком, даже тщательней чем во 2-м варианте (т.к. надо определять мягкость/твердость, и т.д., в то время как во 2м варианте просто проигрываем нужный слог). В 3-м варианте конечно количество семплов неисчисляемо, зато код должен будет обрабатывать разве что только знаки препинания, а слова просто проигрывать (в отличие от 2-го не надо возиться с ударением, произношением букв не так как они пишутся (прим.: малако), хотя такой словарь вида " молоко-малако' " можно составить и для первых 2х вариантов).

Re: Проект: Речевой движок

Posted: Sun Jul 05, 2009 3:32 pm
by Mario
Ну, идея со словарями старая. Правда в текущих движках под Windоws, иногда доводят до абсурда. Например что у Катерины, что у Алёны слово "тел" всегда читается в конце предложения как "телефон", как результат появляются пёрлы вроде "Коридоры были завалены множеством... телефон".

Re: Проект: Речевой движок

Posted: Sun Jul 05, 2009 5:48 pm
by bw
Думаю, что можно совместить все три вариант или только два. Не обязательно все существующие слова забивать в базу (представляю, как размер у неё получится, да и невозможно это), а только наиболее часто употребляемые или наименее качественно воспроизводимые другими методами. Например не будет большой сложностью воспроизводить все имена третьим способом, а так же слово Колибри ;-).

..bw

Re: Проект: Речевой движок

Posted: Sun Jul 05, 2009 8:06 pm
by Mario
Например не будет большой сложностью воспроизводить все имена третьим способом, а так же слово Колибри
ИМХО проблемно все имена знать, а тем более правильно произносить. По этой причине я остановлюсь либо на 1 варианте, либо на 2. Скорее всего изначально 1, затем переработаю до 2. Просто в процессе написания варианта 1 уже будут готовы промежуточные процедуры и написание варианта 2 несколько облегчится. Плюс потребуется решить проблему базы данных соответствия произносимых слов. Написание парсера (синтаксического анализатора) тоже непростая задача.

Проект: Речевой движок

Posted: Tue Oct 06, 2009 5:57 am
by Валерьян
Интересная тема, только идея была организовать воспроизведение слов в (к примеру) .мр3. Я конечно понимаю, что медиабибилиотека будет ого-го, но все же...
Эх, если б молодость бы знала, а старость все могла :)

Re: Проект: Речевой движок

Posted: Tue Oct 06, 2009 9:44 am
by Mario
Для воспроизведения слов mp3 возможно подойдет, но для звуков и слогов сомнительно, имхо будет заметное ухудшение разборчивости речи, кроме того усложнение реализации - нет готовой библиотеки, чтобы подать на вход упакованные данные, а на выходе получить распакованные.

А также:
www.vorbis.com
If you decide to sell your music in MP3 format, you are responsible for paying Fraunhofer a percentage of each sale because you are using their patents. Vorbis is patent and license-free, so you will never need to pay anyone in order to sell, give away, or stream your own music.

Re: Проект: Речевой движок

Posted: Tue Oct 06, 2009 11:55 am
by art_zh
Mario wrote:Для воспроизведения слов mp3 возможно подойдет, но для звуков и слогов сомнительно, имхо будет заметное ухудшение разборчивости речи, кроме того усложнение реализации - нет готовой библотеки чтобы подать на вход упакованные данные, а на выходе получить распакованные.
Это зависит от того, на какой гармонике обрезается частотный спектр. Чем короче сигнал, и чем больше в нем взрывных и шипящих согласных - тем выше доля верхних частот в спектре.

Но в любом случае, частотная запись акустических сигналов - гораздо компактнее осциллографической, и лучше подходит для дальнейшего микширования, распознавания и синтеза.

А библиотека кодеков действительно нужна. Так же как и драйвер для HD Audio.

Re: Проект: Речевой движок

Posted: Mon Nov 01, 2010 12:16 pm
by Mario
Нагуглил список слогов здесь http://lingvoforum.net
syls.7z (21.14 KiB)
Downloaded 438 times
В списке 6357 слогов.

Re: Проект: Речевой движок

Posted: Mon Nov 01, 2010 3:09 pm
by Mario
Впрочем я тут подумал - если отбросить правила русского языка (нам ведь не писать, а произносить) то можно обойтись 2-х, ну в крайнем случае 3-х символьными сочетаниями, а это чуть больше тысячи сочетаний, что уже в разы проще.

Пожалуй перед воспроизведением будет препарсинг слова. Преобразуем в таблицу указателей на звуковые блоки. Для каждого словосочетания достаточно 2-х байт - все равно количество словосочетаний не превысит 65536.

1) Итого например, слово "дирижабль", в первичном анализаторе:

0x0500 = ди
0x2300 = ри
0x1700 = жа
0x3300 = бль

0xFFFF = терминатор выражения

dw 0x0500, 0x2300, 0x1700, 0x3300, 0xFFFF

2) Далее вторичный код анализа воспроизводящий звук берет из таблицы указатели на области со звукам и циклически вызывает блок воспроизведения.

Можно конечно сразу составить таблицу соответствия буквосочетаний и областей звука, но например в 64-х битной среде уже придется по 8 байт на каждое буквосочетание расходовать если так. Хотя я пока не разбирался с перспективами использования Long Mode процессора.

Re: Проект: Речевой движок

Posted: Mon Nov 01, 2010 5:49 pm
by SoUrcerer
Когда-то довольно давно ковырял espeak (http://espeak.sourceforge.net/). Разобрать то, что он произносит, можно очень хорошо - а занимает все это всего около 1 мб со словарями.
Используется синтез по формантам.

Re: Проект: Речевой движок

Posted: Mon Nov 01, 2010 9:53 pm
by Asper
Нужно ещё будет подобрать подходящую скорость чтения, размер паузы между словами и в зависимости от знаков препинания.

Re: Проект: Речевой движок

Posted: Tue Nov 02, 2010 6:06 pm
by maximYCH
Mario, каждый слог нужно озвучивать в двух вариантах - ударном и не ударном.

Re: Проект: Речевой движок

Posted: Tue Nov 02, 2010 8:04 pm
by Mario
Ударный и не ударный зачастую сложно решить. Вот как различать слова "зАмок" и "замОк"? Это только на словах все просто - программе не доступен сложный алгоритм анализа, который есть в голове человека.

Re: Проект: Речевой движок

Posted: Tue Nov 02, 2010 8:22 pm
by Gluk
ну espeak, например, вполне сносно отрабатывает значок ` в качестве ударения.