roboforum.ru

Технический форум по робототехнике.

Говорилка для AVR

Re: Говорилка для AVR

contr » 17 май 2009, 15:39

А можно через комп записать на флешку все что нужно и потом только читать с неё?

Можно, так и сделано, правда когда я свой звонок/манок делал I2C EEPROM были самым доступным носителем.

Re: Говорилка для AVR

yakuzaa » 19 авг 2009, 16:05

кароче надыбал я звуковой фрамент со всеми гласными и согласными буквами, а также всеми вариантами слогов (ба,бя,би, ва,вя,ви... и.т.д).
Вопрос - как сделать счканирование строки, чтобы к, примеру, прога выделяла из нее слоги (к примеру, ра+ди+о+ко+т) и брала соотв. звуковые фрагменты. Как-то пока я себе этот алгоритм не совсем представляю...
Думмаю пока сделаьть так: SD карта, разбить фрагмент на файлы, записать на карту, avr-dos ит.д; ну или если на сях, то есть уже отлаженная связка SD-карта + FatFs + vs1053... Если хто хочет помучаться вместе со мной - выложу тут аудио-файлик и кой какие исходники для работы с картой...

Re: Говорилка для AVR

Digit » 19 авг 2009, 16:13

не могу говорить с уверенностью, но вроде бы подобный алгоритм я встречал на сайте http://algolist.ru/. Там то ли семантический разбор текста, то ли еще что-то этом духе...

Re: Говорилка для AVR

Duhas » 19 авг 2009, 17:10

да, искать нада по семантике работы разные.. народ этим занимается..

а данные которые есть выкладывай, они тут не помешают..

Re: Говорилка для AVR

Snable » 19 авг 2009, 17:51

Хм... Семантика... Там простой алгоритм...

Код: Выделить всёРазвернуть
#include <stdio.h>
#include <string.h>

#define GLASNAYA 1
#define SOGLASNAYA 2
#define NEPONYATNO 3

//const char gl[] = "уеыаоэяиюё"; //10 букв
//const char sogl[] = "йцкнгшщзхфвпрлджчсмтб"; //21 буква
// ъ и ь тоже можно добавить... в гласные, наверное...
const char gl[] = "eyuioa"; //6
const char sogl[] = "qwrtpsdfghjklzxcvbnm"; //20


int f(char w)
{
   int i;
   for (i = 1; i<=6; i++)
      if (w==gl[i]) return GLASNAYA;
   for (i = 1; i<=20; i++)
      if (w==sogl[i]) return SOGLASNAYA;
   return NEPONYATNO;
}

void process_word(char *w)
{
   printf("%s : \n", (char*)w);
   int i;
   int l = strlen(w);
   for (i = 0; i<l; i++)
   {
      if (f(w[i])==SOGLASNAYA)
      {
         if (i+1>=l)
         {
            printf("%c ",w[i]);
            continue;
         }
         if (f(w[i+1])==GLASNAYA)
         {
            printf("%c%c ",w[i],w[i+1]);
            i++;
            continue;
         }  else // SOGLASNAYA
         {
            printf("%c ", w[i]);
            continue;
         }
      }
      if (f(w[i])==GLASNAYA) printf("%c ",w[i]);
      
   }
   printf("\n");
}

int main(int argc, char** argv)
{
   int i;
   for (i = 0; i<argc; ++i) process_word(argv[i]);
   return 0;
}



Звиняйте за корявый Си, если он корявый... Обычно на Си++ пишу...
Кстати, нет другого способа сделать это - "printf("%c ",w[i]);"?

Теперь осталось только вместо вывода на экран звуки издавать.

Чтобы воспользоваться прогой её надо компильнуть и в строке запуска написать что ты хочешь разложить после имени проги. То есть так:
Вложения
.png
Изучая фишки gcc...

Re: Говорилка для AVR

boez » 19 авг 2009, 23:39

Предлагаю представить себе красивое произнесение таким девайсом к примеру слова "вскрикнул" ;)
В общем в слитной речи не все так просто со слогами...

Re: Говорилка для AVR

Strijar » 20 авг 2009, 00:08

Предлагаю представить себе красивое произнесение таким девайсом к примеру слова "вскрикнул"


Ну можно и не по слогам, а имено парами "звуков". Я когда то так и хотел делать. вс-кр-ик-ну-л - пары микшировать между собой кросс-фэйдом. А можно даже так вс-ск-кр-ри-ик-кн-ну-ул лучше получится.

Re: Говорилка для AVR

Snable » 20 авг 2009, 00:25

yakuzaa писал(а):Вопрос - как сделать счканирование строки, чтобы к, примеру, прога выделяла из нее слоги (к примеру, ра+ди+о+ко+т) и брала соотв. звуковые фрагменты. Как-то пока я себе этот алгоритм не совсем представляю...

Собственно прога - ответ на этот вопрос.

А если про качество говорить... То да - это далеко не лучший выход. Самый лучший, ИМХО (и только ИМХО), - полный цикл синтеза звука.
Более реальный - синтез по фонемам. Там нужно предварительно раскладывать слова на фонемы и потом уже запускать файлы со записями звучания этих фонем. Суда можно прикрутить простейшую обработку.
А по слогам - самый простой. На мой взгляд с него лучше всего начинать. А потом двигаться дальше... Чтобы через пару лет запустить и сразу вырубить с гримасой отвращения на лице :D

Re: Говорилка для AVR

yakuzaa » 20 авг 2009, 12:51

Спасибо, Snable!

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

Код: Выделить всёРазвернуть
const char gl[] = "eyuioa#"; //6
const char sogl[] = "qwrtpsdfghjklzxcvbnm"; //20

int f(char w)
{
   int i;
   for (i = 0; i<=6; i++)
      if (w==gl[i]) return GLASNAYA;
   for (i = 0; i<=19; i++)
      if (w==sogl[i]) return SOGLASNAYA;
   return NEPONYATNO;
}


юзаю функцию process_word(char *w);
мягкий знак у меня пока обозначается решеткой.

Код: Выделить всёРазвернуть
strcpyf(fname, "sireneven#kij parovozik");
process_word(fname);



как отделить слова друг от друга пока не знаю, признак пробела как-то надо замутить...
Вложения
VOICE.rar
Набор гласных, согласных и парных звуков: 8 bit, PCM (Unsigned) 11 025 Hz
(321.36 КиБ) Скачиваний: 48
Последний раз редактировалось yakuzaa 24 авг 2009, 10:36, всего редактировалось 1 раз.

Re: Говорилка для AVR

Snable » 20 авг 2009, 18:30

только циклы надо от нуля делать

Это то да... Просто я потом русскому его пытался научить в кодировке UTF-8... А там это весьма весело... Кстати, тогда, наверное, вместо "<=" надо "<" ставить в условиях продолжения.

как отделить слова друг от друга

Вместо пробела ничего не воспроизводить некоторое время будет достаточно. Тоже самое вместо знаков и припинания и так далее... Для этого введена константа NEPONYATNO.

И, я думаю, лучше каким-то образом наладить работу с русскими буквами. Если кодировка однобайтная (типа cp1251), то особых проблем возникнуть не должно... Хотя тут я могу ошибаться. Думаю, кто-нибудь подскажет )))

Re: Говорилка для AVR

Snable » 24 авг 2009, 18:34

Кстати, тем, кому интересна теория синтеза и анализа речи - есть ссылочка.
Тут кладезь знаний :-)
А для меня - источник геморроя - еще минимум 2 года придется грызть :-)

Re: Говорилка для AVR

Strijar » 24 авг 2009, 19:32


Re: Говорилка для AVR

leonidy-85 » 18 май 2010, 20:59

Strijar писал(а):Ну тогда уж тут http://torrents.ru/forum/viewtopic.php?t=1557655

уже тут

Re: Говорилка для AVR

Kozinaka » 18 июн 2010, 13:35

Торренты прикрыли. А что было по ссылке? :)

Re: Говорилка для AVR

galex1981 » 18 июн 2010, 13:55

h t t p : / / r u t r a c k e r . o r g / / f o r u m / v i e w t o p i c . p h p ? t = 1 5 5 7 6 5 5
Подборка книг по ИИ


Rambler\'s Top100 Mail.ru counter