Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Говороун


Автор: Ivankult 20.12.2009, 11:55
Возвращаясь к теме программы "Говорун"-программы которая читает текст вслух. Как организовать не заикающуюся речь? в приложении скомпилированная программа(читает только до буквы З). Заикание только из-за качества записи, програмных задержек нет

Автор: Любитель 20.12.2009, 12:04

 ! 
Любитель
Какое отношение эти темы имеют к ASP .Net?!

Автор: Экскалупатор 20.12.2009, 13:25
Цитата(Ivankult @  20.12.2009,  10:55 Найти цитируемый пост)
Заикание только из-за качества записи,

раз ты знаешь в чем проблема, значит ты ее уже можешь решить. сделай нормальную запись. поясни качества записи чего именно? начальных треков или результата?

Автор: KuMa1104 20.12.2009, 13:32
Экскалупатор здраствуй!

скажи пожалуста, у тебя получилось вообше скачать присоединённый фаил?

Я для интереса хотел скачать посмотреть.
 А вместо этого всё время html страницу скачиваю, что нетак?

Автор: Экскалупатор 20.12.2009, 14:13
нет, не скачалось. тож какую то страницу качает

Автор: wester 20.12.2009, 15:05
KuMa1104, 
Экскалупатор, 
у меня такая лажа со всем форумом , попробуйте скачать файл с помощью IE

Автор: Ivankult 20.12.2009, 17:00
Все те же лица- кума и эскалупатор. Здравствуйте))) Я 2 часа перезаписывал звуки. не смог подогнать так, что бы согласные не заикались(получается БааааБаааа или ааааДаааа)

Автор: KuMa1104 21.12.2009, 11:56
Цитата(Ivankult @  20.12.2009,  17:00 Найти цитируемый пост)
Все те же лица- кума и эскалупатор. Здравствуйте))) Я 2 часа перезаписывал звуки. не смог подогнать так, что бы согласные не заикались(получается БааааБаааа или ааааДаааа)

Поясните что вы имеете в виду под заиканием? У вас звуки гласных 'a' повторяются много раз. Или один но возникает ощущение заикания?

Автор: Ivankult 21.12.2009, 14:46
Я ввожу слово "ада", но программа мне говорит аааДааа(а-0,1 сек, д-0,02 сек и а-0,1 сек), т.е. получается "проглатывание" или проскакивание буквы "д". если зпись делать больше(не 0,02 сек а 0,05) то он говорит аааДЭааа.
В этом проблема

Автор: Экскалупатор 21.12.2009, 15:42
довольно странное поведение, вот интересно а треки у тебя одинаковые? т.е. по времени?

Автор: Ivankult 21.12.2009, 16:34
нет. я ж говорю-гласные по 0,1 сек а согласные по 0,02 сек. А нормально записать не получается. в этом то и вся проблема

Автор: Экскалупатор 21.12.2009, 16:52
ты жуткий тип. записал треки разной длины, а потом говорит что по разному говорит. это не программерская проблема. я ж тебе говорю запиши(ну или обреж готовые)до нужной длины. а проще все же читать словами.

Автор: Zakonnic 21.12.2009, 17:09
Ничего странного и жуткого. Какая разница, какие там треки? Вообще, для начала советую подучить матчасть, тобишь фонетику. Во-первых, читать по буквам НЕЛЬЗЯ. Гласные бывают короткие/длинные, а согласные - мягкие/твердые и черт знает какие еще. Где-то нужно читать "а" вместо "о" (скажите вслух слово "программист" smile ), и т.п. Как минимум, нужен список фонем, а не просто буквы. Во-вторых, все звуки, должны быть записаны с одной интонацией, без обрывов (не "дэ", а просто "д"). И наконец, самое главное - в речи звуки сливаются и плавно переходят один в другой. Попробуйте записать свою речь и растянуть ее в звуковом редакторе, а потом сравните с образцами звуков. Заодно, попробуйте в том же редакторе сложить все надиктованные звуки и узнайте заранее, заикается оно или нет. 
Поэтому на самом деле нужен генератор звуков. Предположу, что он должен аппроксимировать переходы, но вот как он будет считать длину звука, ставить ударение и соблюдать адекватную интонацию - это предмет серьезного анализа.

ЗЫ. А как у вас озвучена буква "мягкий знак"?  smile 

Автор: Экскалупатор 21.12.2009, 17:13
Zakonnic, а вот и лучший друг капитана! мы кстати это уже не в одной теме обсуждали, и все эти вопросы поднимались, я по этому и предлагаю четать целыми словами. тут еще есть куча вопросов по знакам препинания. где ставить акценты в вопросительных предложениях. и пр. так что вопрос пока только в том что буквы записаны по разному, а по этому по разному и читаются. если будут одной длины то будут и читаться одинаково по времени.

Автор: KuMa1104 21.12.2009, 17:39
Экскалупатор добрый вечер!
Не кажется ли тебе что пора открывать отдельную ветку форума для этой темы и её автора.
Уж больно она большой получилась))

Ivankult
ИМХО.
1. для начала сделайте всё таки треки как вам ранее говорил Экскалупатор ожинаковой длины и размера.
    (думаю вам стоитотладить программу при самых простых условиях а потом думать как улучшить)
2.Раз увас происходит заикание значиит вероятнее всего, гласные записываются неоднократно.
   (проидитесь в debuge и посмотрите что в действительности программа закидывает в ваш трек)

P.S. напомните вы всё таки решили собирать из букв треки слов или всё таки воспроизводите каждую букву отдельно?


Автор: Ivankult 21.12.2009, 20:16
Так. Пора проводить конкурс на Капитана Очевидность 2009. Вы думаете я просто так 2 часа с звукозаписью и отлатчиком кувыркался? вы предлагаете самые очевидные варианты. А теперь представьте-делаем все звуки одной длины. Д например вы не запишите так, чтобы оно не повторялось(не как зубодробильная машина дыдыддыдыы) а одно одинокое Д, и длина трека была больше 0,03 сек. Все буквы одной длины? Слово караганда-9букв, 9звуков. 9*0,03=0,27. Т.е слово из девяти букв программа говорит за 0,3 секунды. ФИГНЯ это!!! А как сделать все адекватно? как например программно растягивать звук или что еще можно попробоваь? не толките воду в ступе. а про ветку форума-идея хорошая))

Автор: Экскалупатор 21.12.2009, 20:28
я давно уже предлагал, взять словарь, и по словарю перечитать все слова. я думаю их будет не так уж и много(тыщ 5-6 должно с лихвой хватить). и читать целыми словами, тогда сразу пропадают все проблемы, и с интонацией, и ударениями, и заиканием и прочей хренью.

Добавлено через 1 минуту и 34 секунды
Цитата

Д например вы не запишите так, чтобы оно не повторялось(не как зубодробильная машина дыдыддыдыы) а одно одинокое Д


вот это не понял, не ужели нельзя сказать в микрофон просто "д", один раз? или сказать несколько а потом вырезать одну?

Добавлено через 5 минут и 21 секунду
если честно, то я даже не представляю как сделать так что бы можно было по буквам заставить комп читать. кстати, думаю, что с английским было бы проще, у них там нету столько словоформ, и вопрос от повествования не интонацией а строением предложения отличается. а заставить комп разбираться в русском это как то... не скоро еще. меня от вопросов этих аж в сон клонит. как например прочить предложение:
"я купил замок."? я купил зАмок или замОк? как это объяснить программе?

Добавлено через 6 минут и 25 секунд
Ivankult, скажи, для чего тебе это?

Автор: KuMa1104 21.12.2009, 20:44
Цитата(Экскалупатор @  21.12.2009,  20:28 Найти цитируемый пост)
я давно уже предлагал, взять словарь, и по словарю перечитать все слова. я думаю их будет не так уж и много(тыщ 5-6 должно с лихвой хватить). и читать целыми словами, тогда сразу пропадают все проблемы, и с интонацией, и ударениями, и заиканием и прочей хренью.

Точняк smile 

Наверное можно забахать огромную Хэш таблицу слово ---- соответствующий трек Или ещё что то более производительное. А если он слова не находит в базе то тогда уже ваш метод.

Вы тогда сможете по ходу улучшения программы добавлять новые!

Добавлено через 2 минуты и 8 секунд
А по поводу заикания, вы проверили что он вам туда кидает?
Можно проверить исходя из размеров трека ещё, смотреть что на выходе получается.
трек "аааДааа" бадет явно длиннее "ада".

Автор: Ivankult 21.12.2009, 21:55
Вы очень умные ребята, я посмотрю)) Идея в том, чтобы потом программа умела распознавать речь(это раз) и могла подстраивать голос по речи(человек говорит в микрофон, нарезаются буквы, и из них собирается новая голосовая оболочка)

А про базу со словами-это не вариант. Не заставлять же каждого следующего человека читать 5-6 тыс слов! Это абсурд

Автор: Экскалупатор 21.12.2009, 22:57
Ivankult, в таком случае тебе не следует начинать с треков и выяснять почему они тормозят. для начала надо разобраться что такое нейронные сети. и на них уже пытаться все это организовать. иначе никак. в любом случае для любого голоса сделать не получиться, даже "детектор лжи" всегда перенастраивают на определенного человека.

Автор: Любитель 21.12.2009, 23:07
Для генерации речи я вообще не понимаю изобретения велосипеда с квадратными колёсами. Есть же SAPI.

Для подстройки генератора под речь человека - задача нетривиальная, надо рыть нормальные алгоритмы. Но.. не хочу никого обижать, но обсуждаемый здесь код всё-таки явно другого уровня. Особенно учитывая, что (особенно для русского) языка нормальных синтезаторов оч мало и задача их написания (именно синтезаторов, а не кучи говорилок) очень нетривиальная. А с подстройкой - я бы отнёс это (на текущем этапе развития техники) к нерешаемой (при разумном времени написания и использовании ресурсов) задачи.

Словарь - это хорошо. Но "я писать программа" - это тоже как-то не супер. Нормальный словарь займёт столько памяти, что.. Вообщем тоже (в чистом виде) не решение.

Автор: KuMa1104 22.12.2009, 01:37
Цитата(Любитель @  21.12.2009,  23:07 Найти цитируемый пост)
 Но.. не хочу никого обижать, но обсуждаемый здесь код всё-таки явно другого уровня

Думаю выскажу общее мнение. Вы никого не обидели.
ИМХО  наоборот критика очень полезна если она по существу.

Добавлено через 14 минут и 21 секунду
Ivankult Вы решили создавать сложный проект.

Если это не в комерческих целях, может вам стоит упростить задачу?

Автор: Ivankult 22.12.2009, 06:36
Спасибо за критику. Цели пока не коммерческие(просто интересно), но если получиться, можно будет развивать. Проект, понятно, не на неделю работы, а на пол года минимум. но в этом и все удовольствие-поломать голову над тем, как это организовать. Я понимаю, что представленный мной код очень прост для решения этой задачи, но это только наметки. если не получиться так, то можно легко перейти к другому способу. а если бы я написал несколько тыс строк кода, а потом получилась лажа-было бы обидно. Я решаю задачу методом проб и ошибок. Сейчас пишу блок для авто записи треков(человек читает слово., прога выделяет соответсвие буква-звук). вечером скажу что получится

Автор: Ivankult 22.12.2009, 17:22
Добрый вечер! Наконец написал демо версию блока записи и анализа голоса. Проект в приложении. Не пугайтесь, но Anal это сокращение от английского анализ, а не то, что вы подумали. Коментов к сожалению нет, ибо писал в ударном темпе. Сразу скажу-работает не очень, пка занимаюсь отладкой. Принцип основан на делении слова на равные промежутки, т.е. каждая буква(читай каждый звук) одинаковой длины. Этот блок показывает, что так делать не есть хорошо. Какие ваши предложения по модернизации блока или что менять в корне.

Автор: Любитель 22.12.2009, 21:18
Так в этом и проблема, что звуки далеко не фиксированны. Кроме того - буквенный подход в принципе некорректен. [л'] и [л] - это разные звуки, скажем. Ударная гласная и безударная - тоже по-разному звучат (и в плане длительности в том числе).

Автор: Ivankult 22.12.2009, 22:07
Спасибо Капитан! Я это учитываю! Но пока надо определить, работает ли метод. 

"
Спасибо за критику. Цели пока не коммерческие(просто интересно), но если получиться, можно будет развивать. Проект, понятно, не на неделю работы, а на пол года минимум. но в этом и все удовольствие-поломать голову над тем, как это организовать. Я понимаю, что представленный мной код очень прост для решения этой задачи, но это только наметки. если не получиться так, то можно легко перейти к другому способу. а если бы я написал несколько тыс строк кода, а потом получилась лажа-было бы обидно. Я решаю задачу методом проб и ошибок. Сейчас пишу блок для авто записи треков(человек читает слово., прога выделяет соответсвие буква-звук). вечером скажу что получится 
"

Автор: Любитель 22.12.2009, 22:55
Нет. Такой метод не работает. Почитайте классчиеские подходы в области синтеза и распознавания речи.

Автор: Ivankult 23.12.2009, 06:26
Добрыйй вечер, спасибо за совет. Я читал некоторые статьи, но скажу чесно-не вдохновило. Сейчас основная проблема-записать звуки и определить какой длинны каждый звук должен быть. В основном теле(метод buttom1_click()) учитывается и мягкий знак и все остальные вещи. А в блоке анализа я пока просто проверяю теорию деления слова на равные части. Если у вас на примете есть что-то конкретное-дайте ссылку, или просто расскажите своими словами.

Автор: GavriKos 6.1.2010, 12:37
Ууу. Работаю в целом отделе, который занимается подобным - синтезом речи, анализом, словоформами и прочей страшной мутью. Скажу сразу - задача распознавания очень нетривиальна. Тут подходов несколько - нейросети, СРО с обучением допустим. Второе - делать все это на лету будет сложно - в задачу распознавания почти наверняка входит преобразование Фурье, а это оччень небыстро. Ну и последнее - синтез речи побуквенно делать очень сложно. Хотя бы потому, что слово нужно будет преобразовать в фонему (то, как слово звучит), и по фонеме уже собирать. Записывать надо все ЗВУКИ (ударные, безударные, мягкие, твердые и прочее). Это для начала ;-)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)