Форум ReidS Soft

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Форум ReidS Soft » Flite+hts_engine » Flite+hts_engine 1.05


Flite+hts_engine 1.05

Сообщений 1 страница 5 из 5

1

Проект Flite+hts_engine 1.05 дает больше возможностей для дальнейшего улучшения за счет разделения файла приложения и файла голоса, что позволяет производить быструю замену голосовых файлов.
Архив Flite+hts_engine 1.05         https://www.sendspace.com/file/bazy0l
В исходный код внесены некоторые изменения, а также добавлены необходимые файлы из flite. Добавлен проект hts_engine_API для для отладки в vc6.0. Библиотеки и приложение собраны утилитой make с компилятором и линкером vs 2008.
Приложение испытано в XP c голосом hts_voice_cmu_us_arctic_slt-1.05.

0

2

Flite+hts_engine 1.05 может синтезировать речь в реальном времени. Для этого необходимо ... Если спросит кто-нибудь, обязательно напишу.

0

3

Если вы соберете Flite+hts_engine 1.02 с hts_engine_api 1.06, то сможете использовать голоса из Festival и RHVoice0.4-a2
Успешно испытаны голоса alan и elena из каталога установки RHVoice0.4-a2. Текст должен быть на английском языке.

Иногда появляется необходимость собрать проект для отладки.
Для этого вам потребуется скопировать Flite+hts_engine в отдельный каталог и внести изменения в проектные файлы и собрать отладочные версии библиотек проекта.
В командную строку компилятора добавляются ключи /Zi /D "WIN32" /D "_DEBUG"
Например, так:
CFLAGS = /I ..\hts_engine_API\include /I ..\include /I ..\flite\include \
         /I ..\flite\lang\cmu_us_kal /I ..\flite\lang\cmulex /I ..\flite\lang\usenglish \
         /Zi /D "WIN32" /D "_DEBUG" \
         /D "FLITE_PLUS_HTS_ENGINE" /D "NO_UNION_INITIALIZATION" \
         /O2 /Ob2 /Oi /Ot /Oy /GT /TC /GL

Затем создаете рабочее пространство для проекта vc 6.0 из каталога bin и собираете приложение для отладки.
Скопируйте  в bin подкаталог alan из каталога установки RHVoice. 
Для того, чтобы в vc 6.0 отладить утилиту, принимающую параметры из командной строки, необходимо закоментировать код обработки аргументов командной строки и дописать код инициализации параметров программы.

Командный файл для синтеза речи с голосом alan:
flite_hts_engine -td alan\tree-dur.inf -tf alan\tree-lf0.inf -tm alan\tree-mgc.inf -md alan\dur.pdf -mf alan\lf0.pdf -mm alan\mgc.pdf -df alan\lf0.win1 -df alan\lf0.win2 -df alan\lf0.win3 -dm alan\mgc.win1 -dm alan\mgc.win2 -dm alan\mgc.win3 -o  output.wav input.txt

pause

Первая командная строка не должна содержать символов перевода строк.
input.txt - текстовый файл в кодировке ANSI с вашим текстом.
output.wav - выходной файл, создается программой.

Во время  отладки появится проблема с навигацией по файлам исходника.  Предлагаю разобраться самостоятельно.

(Решается достаточно просто, путем переименования файла исходника программы и названия проекта.)

Ля ля ля ля ля.......

0

4

Сохранение меток в файл для последующего использования в hts_engine.exe

Метки создаются в файле flite+hts_engine-1.02\lib\flite_hts_engine.c функцией  void Flite_HTS_Engine_synthesis(Flite_HTS_Engine * f, char *txt, FILE * wavfp).

Для сохранения в файл необходимо создать дескриптор открытого файла FILE * labfp в flite_hts_engine.c и передать в эту функцию.

Ниже приведен код измененной функции. Асемблерная вставка используется для разъименовывания указателей. Мне так понятнее.
 
/* Flite_HTS_Engine_synthesis: speech synthesis */
void Flite_HTS_Engine_synthesis(Flite_HTS_Engine * f, char *txt, FILE * wavfp, FILE * labfp)
{
   int i;
   cst_voice *v = NULL;
   cst_utterance *u = NULL;
   cst_item *s = NULL;
   char **label_data = NULL;
   int label_size = 0;
char *label_d2=NULL;

char szln[]={0x0a,0}; 

   /* text analysis part */
   v = REGISTER_VOX(NULL);
   if (v == NULL)
      return;
   u = flite_synth_text(txt, v);
   if (u == NULL)
      return;
   for (s = relation_head(utt_relation(u, "Segment")); s; s = item_next(s))
      label_size++;
   if (label_size <= 0)
      return;
   label_data = (char **) calloc(label_size, sizeof(char *));
   for (i = 0, s = relation_head(utt_relation(u, "Segment")); s;
        s = item_next(s), i++) {
      label_data[i] = (char *) calloc(MAXBUFLEN, sizeof(char));
      Flite_HTS_Engine_create_label(f, s, label_data[i]);

   }

   /* save Labels to file _out.lab */

   //fwrite((char*)"hhhh", sizeof(char), 4, labfp); //ok
   for (i = 0; i<label_size; i++){
    _asm{
   mov ecx, dword ptr[label_data]
   mov eax, dword ptr [i]
   imul eax,4
   add ecx, eax
   mov eax, [ecx]
   mov dword ptr[label_d2],eax
    }
   fwrite(label_d2, sizeof(char), strlen(label_d2), labfp);
   fwrite(szln, sizeof(char), 1, labfp);
   }

   /* speech synthesis part */
   HTS_Engine_load_label_from_string_list(&f->engine, label_data, label_size);
   HTS_Engine_create_sstream(&f->engine);
   HTS_Engine_create_pstream(&f->engine);
   HTS_Engine_create_gstream(&f->engine);
   if (wavfp != NULL)
      HTS_Engine_save_riff(&f->engine, wavfp);
   HTS_Engine_refresh(&f->engine);

   for (i = 0; i < label_size; i++)
      free(label_data[i]);
   free(label_data);

   delete_utterance(u);
   UNREGISTER_VOX(v);
}

В файл flite_hts_engine добавлены строки:

int main(int argc, char **argv)
{
   int i;
   FILE *txtfp = stdin, *wavfp = NULL;
   FILE *labfp = NULL;   /*for labels*/
...

   /* read command */
   while (--argc) {
...
         case 'o':
            wavfp = Getfp(*++argv, "wb");
            --argc;
            break;
         case 'z':                                         // <------- new
            labfp = Getfp(*++argv, "w");           // <------- new
            --argc;                                       // <------- new
            break;                                        // <------- new 
         case 'h':
            Usage();
            break;
...

/* synthesis */
   if (fgets(buff, INPUT_BUFF_SIZE, txtfp) != NULL && strlen(buff) > 0){
      Flite_HTS_Engine_synthesis(&engine, buff, wavfp, labfp);
   }

...
   fclose(labfp);  /*labs*/

   return 0;
} //end of func

0

5

Команда для генерации звука и файла меток:
flite_hts_engine -td alan\tree-dur.inf -tf  alan\tree-lf0.inf -tm  alan\tree-mgc.inf -md  alan\dur.pdf -mf  alan\lf0.pdf -mm  alan\mgc.pdf -df  alan\lf0.win1 -df  alan\lf0.win2 -df  alan\lf0.win3 -dm  alan\mgc.win1 -dm  alan\mgc.win2 -dm  alan\mgc.win3 -o  output.wav -z _out.lab input.txt

pause

Команда вводится без перевода строки,  _out.lab- файл меток в формате hts_engine.exe

Таким образом, достигается разделение кода сегментации текста  и  генерации меток и  кода синтеза речи с помощью меток.

0


Вы здесь » Форум ReidS Soft » Flite+hts_engine » Flite+hts_engine 1.05