Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Говорилка, программа воспроизведения речи 
:(
    Опции темы
Ivankult
Дата 10.12.2009, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 181
Регистрация: 8.9.2008

Репутация: нет
Всего: нет



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

private void button1_Click(object sender, EventArgs e)
        {
            int t = 120;
            button1.Enabled = false;
            Audio audio = new Audio("E:\\media\\media\\Voice1\\null.wav");
            if (textBox1.Text.Length == 0) { audio.Play(); }                      
            for (int i = 0; i < textBox1.Text.Length; i++)
            {
                if (textBox1.Text[i] == ' ')
                { audio.Open("E:\\media\\media\\Voice1\\0.wav", true); Thread.Sleep(t); audio.Stop(); }
                if (textBox1.Text[i] == 'а')
                { audio.Open("E:\\media\\media\\Voice1\\1.wav", true); Thread.Sleep(t); audio.Stop(); }
                if (textBox1.Text[i] == 'б')
                { audio.Open("E:\\media\\media\\Voice1\\2.wav", true); Thread.Sleep(t); audio.Stop(); }
                if (textBox1.Text[i] == 'в')
                { audio.Open("E:\\media\\media\\Voice1\\3.wav", true); Thread.Sleep(t); audio.Stop(); }
                if (textBox1.Text[i] == 'г')
                { audio.Open("E:\\media\\media\\Voice1\\4.wav", true); Thread.Sleep(t); audio.Stop(); }
                if (textBox1.Text[i] == 'д')
                { audio.Open("E:\\media\\media\\Voice1\\5.wav", true); Thread.Sleep(t); audio.Stop(); }
                if (textBox1.Text[i] == 'е')
                { audio.Open("E:\\media\\media\\Voice1\\6.wav", true); Thread.Sleep(t); audio.Stop(); }
                if (textBox1.Text[i] == 'л')
                { audio.Open("E:\\media\\media\\Voice1\\12.wav", true); Thread.Sleep(t); audio.Stop(); }
                if (textBox1.Text[i] == 'м')
                { audio.Open("E:\\media\\media\\Voice1\\13.wav", true); Thread.Sleep(t); audio.Stop(); }
                if (textBox1.Text[i] == 'н')
                { audio.Open("E:\\media\\media\\Voice1\\14.wav", true); Thread.Sleep(t); audio.Stop(); }
                if (textBox1.Text[i] == 'о')
                { audio.Open("E:\\media\\media\\Voice1\\15.wav", true); Thread.Sleep(t); audio.Stop(); }
            }
            button1.Enabled = true;
        }


Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  media.rar 700,69 Kb
--------------------
Стив Макконнелл: «Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете».
PM MAIL ICQ   Вверх
Heinzz
Дата 10.12.2009, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 5
Всего: 9



Ваши файлы заикаются сами по себе, послушайте.


--------------------
user posted image
PM MAIL   Вверх
Heinzz
Дата 10.12.2009, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 5
Всего: 9



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

Код

private void button1_Click(object sender, EventArgs e)
        {
           
            button1.Enabled = false;
            Audio audio = new Audio("E:\\media\\media\\Voice1\\null.wav");
            if (textBox1.Text.Length == 0) { audio.Play(); }                      
            for (int i = 0; i < textBox1.Text.Length; i++)
            {
                Thread.Sleep(100);
                object o=null;
                if (textBox1.Text[i] == ' ')
                {o = (object)"E:\\media\\media\\Voice1\\0.wav";}
                if (textBox1.Text[i] == 'а')
                {o = (object)"E:\\media\\media\\Voice1\\1.wav"; }
                if (textBox1.Text[i] == 'б')
                {o = (object)"E:\\media\\media\\Voice1\\2.wav"; }
                if (textBox1.Text[i] == 'в')
                {  o = (object)"E:\\media\\media\\Voice1\\3.wav"; }
                if (textBox1.Text[i] == 'г')
                {  o = (object)"E:\\media\\media\\Voice1\\4.wav"; }
                if (textBox1.Text[i] == 'д')
                {  o = (object)"E:\\media\\media\\Voice1\\5.wav"; }
                if (textBox1.Text[i] == 'е')
                {  o = (object)"E:\\media\\media\\Voice1\\6.wav"; }
                if (textBox1.Text[i] == 'л')
                {  o = (object)"E:\\media\\media\\Voice1\\7.wav"; }
                if (textBox1.Text[i] == 'м')
                {  o = (object)"E:\\media\\media\\Voice1\\8.wav"; }
                if (textBox1.Text[i] == 'н')
                {  o = (object)"E:\\media\\media\\Voice1\\9.wav"; }
                if (textBox1.Text[i] == 'о')
                {  o = (object)"E:\\media\\media\\Voice1\\10.wav"; }
                Thread t = new Thread(new ParameterizedThreadStart(A));
                t.Start(o);
            }
            button1.Enabled = true;
        }
        static void A(object o)
        {
            Audio audio = new Audio("E:\\media\\media\\Voice1\\null.wav");
             audio.Open((string)o, true); Thread.Sleep(t); audio.Stop();
        }



перезапишите звуки.
зы  по-хорошему надо не audio.Stop() , а плавное снижение громкости до нуля. Получится что предыдущий звук спадает, а следующий набирает громкость (тоже отрегулировать)

if-ы плохо смотрятся, лучше переписать словать дженерик.

не добьетесь плавности, пытайтесь по слогам

Это сообщение отредактировал(а) Heinzz - 10.12.2009, 20:59


--------------------
user posted image
PM MAIL   Вверх
Ivankult
Дата 10.12.2009, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 181
Регистрация: 8.9.2008

Репутация: нет
Всего: нет



Спасибо. Еще были варианты многопоточности-один поток готовит очередь звуковых файлов, другой воспроизводит, но непонятна реализация. второй вариант-записать очередь файлов в один файл и воспроизвести, но непонятно как это сделать. Каике еще будут варианты? а звуки записаны ,вроде, нормально, не заикаются(кроме "д" и "б", ну а как иначе?)

p.s. очень приятно общаться с культурными людьми, знающими русский язык

Это сообщение отредактировал(а) Ivankult - 10.12.2009, 21:25
--------------------
Стив Макконнелл: «Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете».
PM MAIL ICQ   Вверх
Heinzz
Дата 10.12.2009, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 5
Всего: 9



мне кажется что так городить не надо, в предложенном примере каждый звук запускается в отдельном потоке немного накладывающемся на предыдущий звук. Попробуйте развить реализацию smile 


--------------------
user posted image
PM MAIL   Вверх
Ivankult
Дата 11.12.2009, 07:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 181
Регистрация: 8.9.2008

Репутация: нет
Всего: нет



Как организовать такую многопоточность? пример кода приведите пожалуйста.
--------------------
Стив Макконнелл: «Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете».
PM MAIL ICQ   Вверх
Heinzz
Дата 11.12.2009, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 5
Всего: 9



Ну так я уже привел выше, значение t=200, так -что звуки накладываются.


--------------------
user posted image
PM MAIL   Вверх
Ivankult
Дата 11.12.2009, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 181
Регистрация: 8.9.2008

Репутация: нет
Всего: нет



Попробовал. вот что получилось(долго колдовал с регулировкой задержки, но заикается все-равно. перезаписал звуки-но все равно не красиво). как можно еще красивую речь генерить?

Присоединённый файл ( Кол-во скачиваний: 14 )
Присоединённый файл  media.rar 536,41 Kb
--------------------
Стив Макконнелл: «Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете».
PM MAIL ICQ   Вверх
KuMa1104
Дата 12.12.2009, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: нет
Всего: 3



Ivankult Здравствуйте.

Я бы посоветовал вам работать непосредственно с звуковой картои.
Нужно просто закидывать ваши данные в буфер в нём уже стоит очередь.
И когда очередной буфер с данными воспроизведёться тут же начнётся следующий.

Я так думаю что это минимальные задержки из вообще вазможных. 

Код

waveOutOpen
waveOutPrepareHeader и тд. наберите в helpe 




Это сообщение отредактировал(а) KuMa1104 - 12.12.2009, 00:10


--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0461 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.