Форум ReidS Soft

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

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


Вы здесь » Форум ReidS Soft » Flite » Построение TTS Flite в Visual C++ 6.0


Построение TTS Flite в Visual C++ 6.0

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

1

Источник:
Flite text-to-speech using Visual C++ 6.0
http://typefaster.sourceforge.net/flite-msvc-howto.html

Построение TTS Flite в Visual C++ 6.0

В этом документе дано описание процесса построения flite 1.2 from Visual C++. (Очевидно, вы не сможете скомпилировать flite 1.2 в Visual C++: "В Visual C++ 6.0 процесс компиляции завершается неудачно при большой базе данных файлов дифона."). На самом деле, использовать Flite в Visual C++ очень легко, для этого необходимо построить flite с помощью MinGW и подключить созданные библиотеки к вашему проекту.
Файлы, которые Вы можете загрузить на этой странице, сгенерированы из версии flite-1.2. Файлы защищены  лицензией flite.
Я рекомендую использовать flite, если Вы хотите синтезировать речь из текста. flite требует намного меньше памяти, чем фестиваль, поэтому вы можете использовать много потоков, и они смогут синтезировать речь параллельно. Очевидно, что фестиваль не обеспечивает безопасность потоков.
Нетерпеливым пользователям достаточно загрузить библиотекиs: libflite_cmu_us_kal.a, libflite_usenglish.a, libflite_cmulex.a, libflite.a (правый щелчок мыши, сохранить файл как). Загрузите и распакуйте файл include.zip и посмотрите на пример кода, приведенный ниже. В то же время Вы можете построить библиотеки из исходного кода flite 1.2. Если Вам не важна эффективность кода (прим. переводчика: преимущества SAPI), Вы можете  построить и использовать flite.exe (сохраните его на c:\). Он будет работать даже в MinGW.

Построение Flite с помощью MinGW

Я использую MinGW с тех пор как он создает бинарный файл, независимый от Cygwin dll.
+Установите Cygwin и убедитесь в наличие инструмента построения MinGW.
+Запустите установщик в 14Mб или около того и он сделает все сам.
+Отредактируйте /etc/profile в Cygwin путем изменения строки PATH= для запуска чего-либо, например так "/cygdrive/c/MinGW/bin:/usr/local/bin: ...". Это сработает точно так же как ввод  в gcc в Cygwin, когда вы используете MinGW gcc. Перезапустите Cygwin.
+Загрузите исходный код flite 1.2 и распакуйте (Как вы знаете, можно напечатать cd c: в Cygwin)
+Run "./configure --disable-sockets", вы можете добавить "--with-vox=cmu_us_kal16". Вы можете подключить сокеты для работы в MinGW, но вам придется подключить #include < winsock.h >, сделать загрузочный блок и тд. За дополнительной информацией обратитесь к  руководству Beej по сетевому программированию.
+Отредактируйте config/config и измените MMAPTYPE с posix на win32. Также я удалил -g из CFLAGS, чтобы уменьшить результат работы.
+Запустите make и (в зависимости от количества установленной оперативной памяти) подождите некоторое время. Вероятно, в конце компиляции вы получите сообщение об ошибке относительно функции gettimeofday. Эта функция, кажется, используется для получения временной метки, чтобы определить сколько времени затрачено на выполнение. Если вы хотите собрать flite.exe, то просто закомментируйте строки, содержащие gettimeofday, time_start и time_end, весь параграф if(flite_verbose ... и повторите запуск make. При желании вы можете использовать такие функции как: SYSTEMTIME now и GetSystemTime(&now)

Прим. пер. Вы можете построить библиотеки *.lib в Visual C++ из проектов в каталоге sapi.
Для замены gettimeofday, можно внести следующие изменения в код:
#include <time.h>

int main(int argc, char **argv){
    struct tm tv; //struct timeval tv;
//...
_getsystime(&tv); //gettimeofday(&tv,NULL);
time_start = (double)(tv.tm_sec); //+(((double)tv.tv_usec)/1000000.0);
//...
_getsystime(&tv);//gettimeofday(&tv,NULL);
time_end = ((double)(tv.tm_sec)); //+((double)tv.tv_usec/1000000.0);
//...
}

Использование Flite в программах на Visual C++.

В меню Project выберите пункт Settings, перейдите на вкладку С/С++, в выпадающем списке "Category:" выберите пункт Preprocessor, в поле Additional include directories добавьте пути к заголовочным файлам flite (или к каталогу include из архиваinclude.zip). (Прим пер.: Например, там будет стоять что-то похожее "..\include,..\lang\cmulex" без дв. кавычек).     
На вкладке Link добавьте путь к каталогу lib c библиотеками flite (или достаточно скопировать  загруженные файлы .a-файлы в ту же самую директорию, содержащую файл проекта .dsw). Затем в поле "Object/library modules" добавьте следующую строку:
libflite_cmu_us_kal.a libflite_usenglish.a libflite_cmulex.a libflite.a winmm.lib   Укажите .\ перед каждым файлом, если они расположены в каталоге проекта .dsw.
Если загруженные библиотечные файлы скопированы в отдельный подкаталог lib, созданный в каталоге проекта, то добавляемая строка примет вид:  lib\libflite_cmu_us_kal.a lib\libflite_usenglish.a lib\libflite_cmulex.a lib\libflite.a winmm.lib
Вы можете заменить libflite_cmu_us_kal.a with libflite_cmu_us_kal16.a на свои файлы (в том числе на файлы *.lib, построенные из исходников каталога sapi). Теперь вы можете использовать код, приведенный ниже:

#include "flite.h"

extern "C"
{
cst_voice* register_cmu_us_kal();
}
cst_voice* voice;

int main(void)
{
flite_init();
voice=register_cmu_us_kal();
flite_text_to_speech("hello world",voice,"play");
return 0;
}

Пожалуйста, дайте мне знать, если обнаружите какие-либо ошибки или возможности для улучшения этого документа. Следует учесть, что этот материал дается без каких-либо гарантий, и у меня нет уверенности, что все это работает правильно.

Мой email адрес: mataav@yahoo.co.uk

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

препроцессора #pragma comment(lib,"libfile.lib").
Допустим, что после распаковки архива flite 1.2 с исходным кодом он расположен в каталоге

D:\flite-1.2-release\flite-1.2-release, ваш пример - в подкаталоге D:\flite-1.2-release\flite-1.2-release\Test, а загруженные

библиотеки - в каталоге  D:\flite-1.2-release\flite-1.2-release\Tes\lib . Вам следует открыть проект flite_sapi.dsw и собрать

4 библиотеки. Каждую библиотеку можно собирать отдельно с помощью файлов проектов cmu_us_kal.dsp и тд.
Все файлы библиотек собираются без ошибок и первые три, кроме flite.lib могут быть выборочно использованы вместо загруженных.
По умолчанию flite.lib собирается без api-функций из winmm.lib, поэтому пример не воспроизводит синтезированный голос.
Поэтому необходимо внести небольшие изменения в проект flite. В  дереве решения flite в каталог решения  audio к трем

имеющимся ссылкам на файлы добавьте файл au_wince.c из того же каталога на диске.    Далее откройте файл native_audio.h и

добавьте в начале строку #define CST_AUDIO_WINCE
Далее в конце файла закоментируйте код
/*
#ifdef CST_AUDIO_NONE

#define AUDIO_OPEN_NATIVE audio_open_none
#define AUDIO_CLOSE_NATIVE audio_close_none
#define AUDIO_SET_SAMPLE_RATE_NATIVE audio_set_sample_rate_none
#define AUDIO_WRITE_NATIVE audio_write_none
#define AUDIO_DRAIN_NATIVE audio_drain_none
#define AUDIO_FLUSH_NATIVE audio_flush_none

#endif

#ifndef AUDIO_OPEN_NATIVE

#define AUDIO_OPEN_NATIVE audio_open_none
#define AUDIO_CLOSE_NATIVE audio_close_none
#define AUDIO_SET_SAMPLE_RATE_NATIVE audio_set_sample_rate_none
#define AUDIO_WRITE_NATIVE audio_write_none
#define AUDIO_DRAIN_NATIVE audio_drain_none
#define AUDIO_FLUSH_NATIVE audio_flush_none
#define CST_AUDIO_NONE

#endif

cst_audiodev *AUDIO_OPEN_NATIVE(int sps, int channels, cst_audiofmt fmt);
int AUDIO_CLOSE_NATIVE(cst_audiodev *ad);
int AUDIO_WRITE_NATIVE(cst_audiodev *ad,void *buff,int num_bytes);
int AUDIO_DRAIN_NATIVE(cst_audiodev *ad);
int AUDIO_FLUSH_NATIVE(cst_audiodev *ad);
*/

Сохраните изменения. После этого flite.lib собирается с функциями для работы со звуком в Windows.
 
 
В этом случае, код примера будет следующим:

#include "..\include\flite.h"

#pragma comment(lib,"D:\\flite-1.2-release\\flite-1.2-release\\sapi\\cmu_us_kal\\Debug\\cmu_us_kal.lib")
//#pragma comment(lib,"lib\\libflite_cmu_us_kal.a")
#pragma comment(lib,"D:\\flite-1.2-release\\flite-1.2-release\\sapi\\cmulex\\Debug\\cmulex.lib")
//#pragma comment(lib,"lib\\libflite_cmulex.a")

#pragma comment(lib,"D:\\flite-1.2-release\\flite-1.2-release\\sapi\\usenglish\\Debug\\usenglish.lib");
//#pragma comment(lib,"lib/libflite_usenglish.a")

#pragma comment(lib,"D:\\flite-1.2-release\\flite-1.2-release\\sapi\\flite\\Debug\\flite.lib");
//#pragma comment(lib,"lib\\libflite.a")

extern "C"
{
cst_voice* register_cmu_us_kal();
}
cst_voice* voice;

int main(void)
{
flite_init();
voice=register_cmu_us_kal();
flite_text_to_speech("hello world",voice,"play");
return 0;
}

Если ваш компилятор выдает сообщение о недостатке памяти, используйте ключ /Zm, то отредактируйте файл проекта *.dsp вручную.

Добавьте ключ /Zm1000 в командную строку компилятора, что обеспечит для компилятора память в 750Мб, вместо 75Мб по умолчанию.
Дополнительную информацию см. в MSDN "/Zm (Specify Precompiled Header Memory Allocation Limit)"

http://msdn.microsoft.com/en-us/library/bdscwf1c.aspx

0

2

Построение flite_main.exe из каталога flite-1.2-release\main
Откройте файл flite_main.c в MS VS 6.0 и выполните компиляцию. Среда разработки создаст файл проекта. Для успешной компиляции необходимо добавить несколько файлов в проект, а также внести изменения в файл flite_main.c.
В итоге вы получите полностью работоспособный файл flite_main.exe.
Примеры запуска из командной строки:
flite_main.exe --help
flite_main.exe --version
flite_main.exe -t hello world -o text.wave
flite_main.exe text.txt

Новый файл проекта flite_main.dsp
//--------------------------------------------------------------------
# Microsoft Developer Studio Project File - Name="flite_main" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **

# TARGTYPE "Win32 (x86) Console Application" 0x0103

CFG=flite_main - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "flite_main.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "flite_main.mak" CFG="flite_main - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "flite_main - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "flite_main - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE

# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe

!IF  "$(CFG)" == "flite_main - Win32 Release"

# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x419 /d "NDEBUG"
# ADD RSC /l 0x419 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib

ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib

ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386

!ELSEIF  "$(CFG)" == "flite_main - Win32 Debug"

# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\include" /I "..\lang\cmu_time_awb" /I "..\lang\usenglish" /I

"..\lang\cmulex" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD BASE RSC /l 0x419 /d "_DEBUG"
# ADD RSC /l 0x419 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib

ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386

/pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib

ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib winmm.lib /nologo /subsystem:console /debug

/machine:I386 /pdbtype:sept

!ENDIF

# Begin Target

# Name "flite_main - Win32 Release"
# Name "flite_main - Win32 Debug"
# Begin Source File

SOURCE=..\lang\cmu_time_awb\cmu_time_awb.c
# End Source File
# Begin Source File

SOURCE=..\lang\cmu_time_awb\cmu_time_awb_cart.c
# End Source File
# Begin Source File

SOURCE=..\lang\cmu_time_awb\cmu_time_awb_clunits.c
# End Source File
# Begin Source File

SOURCE=..\lang\cmu_time_awb\cmu_time_awb_lex_entry.c
# End Source File
# Begin Source File

SOURCE=..\lang\cmu_time_awb\cmu_time_awb_lex_phone.c
# End Source File
# Begin Source File

SOURCE=..\lang\cmu_time_awb\cmu_time_awb_lpc.c
# End Source File
# Begin Source File

SOURCE=..\lang\cmu_time_awb\cmu_time_awb_mcep.c
# End Source File
# Begin Source File

SOURCE=.\flite_main.c
# End Source File
# End Target
# End Project






flite_main.c
//----------------------------------------------------------------------------------

//..\lib\libflite_cmu_us_kal.a ..\lib\libflite_usenglish.a ..\lib\libflite_cmulex.a ..\lib\libflite.a winmm.lib

//#pragma

comment(lib,"..\\sapi\\cmu_us_kal\\Debug\\cmu_us_ka

l.lib")
#pragma comment(lib,"..\\lib\\libflite_cmu_us_kal.a")

//#pragma

comment(lib,"..\\sapi\\cmulex\\Debug\\cmulex.lib")
#pragma comment(lib,"..\\lib\\libflite_cmulex.a")

//#pragma

comment(lib,"..\\sapi\\usenglish\\Debug\\usenglish.

lib");
#pragma comment(lib,"..\\lib\\libflite_usenglish.a")

//#pragma

comment(lib,"..\\sapi\\flite\\Debug\\flite.lib");
#pragma comment(lib,"..\\lib\\libflite.a")

//#pragma

comment(lib,"..\\sapi\\flite\\Debug\\flite.lib");
#pragma comment(lib,"..\\lib\\libflite.a ")

#include <stdio.h>
#include <string.h>
#include <time.h> //#include <sys/time.h>
//#include <unistd.h>

#include "flite.h"
#include "cst_val_const.h"
#include "flite_version.h"
#include "voxdefs.h"

cst_voice *REGISTER_VOX(const char *voxdir);
cst_voice *UNREGISTER_VOX(cst_voice *vox);

static void flite_version()
{
    printf("  version: %s-%s-%s %s\n",
   FLITE_PROJECT_PREFIX,
   FLITE_PROJECT_VERSION,
   FLITE_PROJECT_STATE,
   FLITE_PROJECT_DATE);
    printf("  CMU Copyright 1999-2003, all rights reserved\n");
}

static void flite_usage()
{
    printf("flite: a small simple speech synthesizer\n");
    flite_version();
    printf("usage: flite TEXT/FILE [WAVEFILE]\n"
           "  Converts text in TEXTFILE to a waveform in WAVEFILE\n"
           "  If text contains a space the it is treated as a literal\n"
           "  textstring and spoken, and not as a file name\n"
           "  if WAVEFILE is unspecified or \"play\" the result is\n"
           "  played on the current systems audio device.  If WAVEFILE\n"
           "  is \"none\" the waveform is discarded (good for benchmarking)\n"
           "  Other options must appear before these options\n"
           "  --version   Output flite version number\n"
           "  --help      Output usage string\n"
           "  -o WAVEFILE Explicitly set output filename\n"
           "  -f TEXTFILE Explicitly set input filename\n"
           "  -t TEXT     Explicitly set input textstring\n"
           "  -p PHONES   Explicitly set input textstring and synthesize as phones\n"
           "  --set F=V   Set feature (guesses type)\n"
           "  -s F=V      Set feature (guesses type)\n"
           "  --seti F=V  Set int feature\n"
           "  --setf F=V  Set float feature\n"
           "  --sets F=V  Set string feature\n"
   "  -b          Benchmark mode\n"
   "  -l          Loop endlessly\n"
           "  -v          Verbose mode\n");
    exit(0);
}

static void ef_set(cst_features *f,const char *fv,const char *type)
{
    /* set feature from fv (F=V), guesses type if not explicit type given */
    const char *val;
    char *feat;

    if ((val = strchr(fv,'=')) == 0)
    {
fprintf(stderr,
    "flite: can't find '=' in featval \"%s\", ignoring it\n",
    fv);
    }
    else
    {
feat = cst_strdup(fv);
feat[strlen(fv)-strlen(val)] = '\0';
val = val+1;
if ((type && cst_streq("int",type)) ||
    ((type == 0) && (cst_regex_match(cst_rx_int,val))))
    feat_set_int(f,feat,atoi(val));
else if ((type && cst_streq("float",type)) ||
     ((type == 0) && (cst_regex_match(cst_rx_double,val))))
    feat_set_float(f,feat,atof(val));
else
    feat_set_string(f,feat,val);
/* I don't free feat, because feats think featnames are const */
/* which is true except in this particular case          */
    }
}

int main(int argc, char **argv)
{
    struct timeval tv;
    cst_voice *v;
    const char *filename;
    const char *outtype;
    int i;
    float durs;
    double time_start, time_end;
    int flite_verbose, flite_loop, flite_bench;
    int explicit_filename, explicit_text, explicit_phones;
#define ITER_MAX 3
    int bench_iter = 0;
    cst_features *extra_feats;

flite_init();
v=register_cmu_us_kal();
//flite_text_to_speech("hello world",v,"play"); // проверка работоспособности
//flite_file_to_speech("text.txt",v,"play");
//return 0;

    filename = 0;
    outtype = "play";   /* default is to play */
    flite_verbose = FALSE;
    flite_loop = FALSE;
    flite_bench = FALSE;
    explicit_text = explicit_filename = explicit_phones = FALSE;
    extra_feats = new_features();

    flite_init();

    for (i=1; i<argc; i++)
    {
if (cst_streq(argv[i],"--version"))
{
    flite_version();
    return 1;
}
else if (cst_streq(argv[i],"-h") ||
     cst_streq(argv[i],"--help") ||
     cst_streq(argv[i],"-?"))
    flite_usage();
else if (cst_streq(argv[i],"-v"))
    flite_verbose = TRUE;
else if (cst_streq(argv[i],"-l"))
    flite_loop = TRUE;
else if (cst_streq(argv[i],"-b"))
{
    flite_bench = TRUE;
    break; /* ignore other arguments */
}
else if ((cst_streq(argv[i],"-o")) && (i+1 < argc))
{
    outtype = argv[i+1];
    i++;
}
else if (cst_streq(argv[i],"-f") && (i+1 < argc))
{
    filename = argv[i+1];
    explicit_filename = TRUE;
    i++;
}
else if ((cst_streq(argv[i],"-set") || cst_streq(argv[i],"-s"))
     && (i+1 < argc))
{
    ef_set(extra_feats,argv[i+1],0);
    i++;
}
else if (cst_streq(argv[i],"--seti") && (i+1 < argc))
{
    ef_set(extra_feats,argv[i+1],"int");
    i++;
}
else if (cst_streq(argv[i],"--setf") && (i+1 < argc))
{
    ef_set(extra_feats,argv[i+1],"float");
    i++;
}
else if (cst_streq(argv[i],"--sets") && (i+1 < argc))
{
    ef_set(extra_feats,argv[i+1],"string");
    i++;
}
else if (cst_streq(argv[i],"-p") && (i+1 < argc))
{
    filename = argv[i+1];
    explicit_phones = TRUE;
    i++;
}
else if (cst_streq(argv[i],"-t") && (i+1 < argc))
{
    filename = argv[i+1];
    explicit_text = TRUE;
    i++;
}
else if (filename)
    outtype = argv[i];
else
    filename = argv[i];
    }

    if (filename == NULL) filename = "text.txt";//"-";  /* stdin */
   
//v = REGISTER_VOX(NULL); // it is no work
    v=register_cmu_us_kal();

feat_copy_into(extra_feats,v->features);
    durs = 0.0;

//durs = flite_file_to_speech("text.txt",v,outtype);
//flite_text_to_speech("hello world",v,"play");
//return 0;




    if (flite_bench)
    {
outtype = "none";
filename = "A whole joy was reaping, but they've gone south, you should fetch azure mike.";
explicit_text = TRUE;
    }

loop:
    //gettimeofday(&tv,NULL);
    //time_start = (double)(tv.tv_sec)+(((double)tv.tv_usec)/1000000.0);

    if (explicit_phones)
durs = flite_phones_to_speech(filename,v,outtype);
    else if ((strchr(filename,' ') && !explicit_filename) || explicit_text)
durs = flite_text_to_speech(filename,v,outtype);
    else
durs = flite_file_to_speech(filename,v,outtype);

    //gettimeofday(&tv,NULL);
    //time_end = ((double)(tv.tv_sec))+((double)tv.tv_usec/1000000.0);

    if (flite_verbose || (flite_bench && bench_iter == ITER_MAX))
printf("times faster than real-time: %f\n(%f seconds of speech synthesized in %f)\n",
       durs/(float)(time_end-time_start),
       durs,
       (float)(time_end-time_start));

    if (flite_loop || (flite_bench && bench_iter++ < ITER_MAX))
    goto loop;

    delete_features(extra_feats);

    //UNREGISTER_VOX(v); // no work
unregister_cmu_us_kal(v);

    return 0;
}

Проект голосового движка FliteCMUKalDiphone из каталога sapi также собирается без проблем в MS VC2008Exp c установленным sdk6.0. Необходимо прописать пути к каталогам установки sdk, а также добавить в подпроект flite файл au_wince.c
Для построения в vc 60 потребуется установить sdk 5.1.

0

3

//Файл ..\include\flite_version.h

#define  FLITE_PROJECT_PREFIX "1"
#define  FLITE_PROJECT_VERSION "1"
#define  FLITE_PROJECT_STATE "1"
#define  FLITE_PROJECT_DATE "30.07.2014"

0


Вы здесь » Форум ReidS Soft » Flite » Построение TTS Flite в Visual C++ 6.0