На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Модераторы: RaD, nsh
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
> Sapi для HTS Voice, Sapi для HTS Voice и утилиты
    Исходный код упаковщика hts-голосов RHVoice в новый формат 1.07(8). Код без оптимизации, но проверен и протестирован.

    Прикреплённый файлПрикреплённый файлhts_pack1.07_2.rar (75,24 Кбайт, скачиваний: 27)
    Сообщение отредактировано: webcoder88 -
      Кто-нибудь собирал последнюю версию RHVoice в Windows 7...8.1? Поделитесь опытом.

      Считаю, что в Linux - это ось командной строки, в которой всегда висит окно консоли для ввода команд, настройки окон, запуска программ, удаления создания файлов и тд. Не ось, а печатная машинка. Поэтому разработчикам Windos трудно перейти на Linux и наоборот. Есть VS для Linux, но все разработчики используют только python+scons.
      Я неспеша дорабатываю SALB. Уже воспроизводит русский голос, но еще много недоработок: английский акцент (тк я прикрутил только лексику из RHvoice), иногда неправильное ударение,
      пока не работают канал русского языка в 64-битной версия драйвера, хотя английский работает нормально и 64-битный бинарник hts_engine и cli( ошибка доступа к памяти при инициализации звукового интерфейса bp winmm.lib, но в драйвере в канале англ. языка работает без проблем).
      Сообщение отредактировано: webcoder88 -
        Доработка текстового анализатора SALB и flite для того, чтобы синтезатор произносил знакомую всем фразу "с++" или "c+++ --+=".

        В файл us_text.c вносятся следующие изменения:

        после кода
        ExpandedWrap disabled
          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);
              }


        необходимо добавить
        ExpandedWrap disabled
              // этот код синтезирует первый символ -,+,=
              //  - + =       - --- + +++ = ===
              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);
              }


        и закоментировать следующий код:

        ExpandedWrap disabled
              /*
          // этот код удаляет "-" из синтезированной речи
              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" на несколько токенов (те для произнесения с++), но программа падает при токенизации кирилицы:
        ExpandedWrap disabled
              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,'=')) )
        Сообщение отредактировано: webcoder88 -
          Пример синтеза дробей после доработки кода
          Прикреплённый файлПрикреплённый файлoutput_1.rar (135,78 Кбайт, скачиваний: 9)
          1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script Execution time: 0,0790 ]   [ 18 queries used ]   [ Generated: 27.05.19, 00:00 GMT ]