Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.60.149] |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
Исходный код упаковщика hts-голосов RHVoice в новый формат 1.07(8). Код без оптимизации, но проверен и протестирован.
Прикреплённый файлhts_pack1.07_2.rar (75,24 Кбайт, скачиваний: 683) |
Сообщ.
#17
,
|
|
|
Кто-нибудь собирал последнюю версию RHVoice в Windows 7...8.1? Поделитесь опытом.
Считаю, что в Linux - это ось командной строки, в которой всегда висит окно консоли для ввода команд, настройки окон, запуска программ, удаления создания файлов и тд. Не ось, а печатная машинка. Поэтому разработчикам Windos трудно перейти на Linux и наоборот. Есть VS для Linux, но все разработчики используют только python+scons. Я неспеша дорабатываю SALB. Уже воспроизводит русский голос, но еще много недоработок: английский акцент (тк я прикрутил только лексику из RHvoice), иногда неправильное ударение, пока не работают канал русского языка в 64-битной версия драйвера, хотя английский работает нормально и 64-битный бинарник hts_engine и cli( ошибка доступа к памяти при инициализации звукового интерфейса bp winmm.lib, но в драйвере в канале англ. языка работает без проблем). |
Сообщ.
#18
,
|
|
|
Доработка текстового анализатора SALB и flite для того, чтобы синтезатор произносил знакомую всем фразу "с++" или "c+++ --+=".
В файл us_text.c вносятся следующие изменения: после кода else r = val_append(en_exp_number(aaa), cons_val(string_val("slash"), en_exp_number(bbb))); if ((cst_regex_match(cst_rx_digits,ffeature_string(token,"p.name"))) && (item_prev(token))) /* don't mistake "0" as a number */ r = cons_val(string_val("and"),r); cst_free(aaa); cst_free(bbb); } необходимо добавить // этот код синтезирует первый символ -,+,= // - + = - --- + +++ = === else if (cst_streq(name,"-")) { item_set_string(token,"punc",""); r = cons_val(string_val("minus"),NULL); } else if (cst_streq(name,"+")) { item_set_string(token,"punc",""); r = cons_val(string_val("plus"),NULL); } else if (cst_streq(name,"=")) { item_set_string(token,"punc",""); r = cons_val(string_val("it"),NULL); } и закоментировать следующий код: /* // этот код удаляет "-" из синтезированной речи else if ((p=(strchr(name,'-')))) { /* aaa-bbb */ /*aaa = cst_strdup(name); aaa[cst_strlen(name)-cst_strlen(p)] = '\0'; bbb = cst_strdup(p+1); if (cst_regex_match(cst_rx_digits,aaa) && cst_regex_match(cst_rx_digits,bbb)) { ccc = cst_strdup(name); item_set_string(token,"name",bbb); r = us_tokentowords_one(token,bbb); item_set_string(token,"name",aaa); r = val_append(us_tokentowords_one(token,aaa), cons_val(string_val("to"),r)); item_set_string(token,"name",ccc); cst_free(ccc); } else r = val_append(us_tokentowords_one(token,aaa), us_tokentowords_one(token,bbb)); cst_free(aaa); cst_free(bbb); }*/ Следующий код в исходном файле разбивает токены вида "c++text" на несколько токенов (те для произнесения с++), но программа падает при токенизации кирилицы: else if ((cst_strlen(name) > 1) && (!cst_regex_match(cst_rx_alpha,name))) { /* its not just alphas */ for (i=0; name[i] != '\0'; i++) if (text_splitable(name,i)) break; aaa = cst_strdup(name); aaa[i+1] = '\0'; bbb = cst_strdup(&name[i+1]); item_set_string(token,"nsw","nide"); r = val_append(us_tokentowords_one(token,aaa), us_tokentowords_one(token,bbb)); cst_free(aaa); cst_free(bbb); } Проверочная строка "аз,+=и", кодировка ascii Запуск в отладчике с английским текстом показал, что программа заходит в блок, если name содержит знаки +-= (признаки токенизации). Если строка содержит кириллицу, то программа заходит в блок в любом случае. Ошибка. Функция cst_regex_match(cst_rx_alpha,name) возвращает false, если в строке нет символов "-+=", другие я не проверял. Функция hs_regexec(const cst_regex *prog, const char *string); проверяет на валидность и запускает предварительно откомпилированную функцию с объектным кодом. Видимо автор flite не дружит с встроенным ассемблером или защищает свои авторские права. См. файлы regexp.c и cst_regex.h . "Косяк" с кириллицей исправляется так //else if ((cst_strlen(name) > 1) && (!cst_regex_match(cst_rx_alpha,name))) else if ( (cst_strlen(name) > 1) && (strchr(name,'+') || strchr(name,'-') || strchr(name,'=')) ) |
Сообщ.
#19
,
|
|
|
Пример синтеза дробей после доработки кода
Прикреплённый файлoutput_1.rar (135,78 Кбайт, скачиваний: 683) |