2017-12-12 43 views
1

fand ich diesen Code im Internet:Welche Zeilen sind notwendig, um espeak in unserem C/C++ Programm zu verwenden?

#include <string.h> 
#include <malloc.h> 
#include <espeak/speak_lib.h> 


espeak_POSITION_TYPE position_type; 
espeak_AUDIO_OUTPUT output; 
char *path=NULL; 
int Buflength = 1000, Options=0; 
void* user_data; 
t_espeak_callback *SynthCallback; 
espeak_PARAMETER Parm; 



char Voice[] = {"English"}; 


char text[30] = {"this is a english test"}; 
unsigned int Size,position=0, end_position=0, flags=espeakCHARS_AUTO, *unique_identifier; 




int main(int argc, char* argv[]) 
{ 
    output = AUDIO_OUTPUT_PLAYBACK; 
    int I, Run = 1, L;  
    espeak_Initialize(output, Buflength, path, Options); 
    espeak_SetVoiceByName(Voice); 
    const char *langNativeString = "en"; //Default to US English 
    espeak_VOICE voice; 
     memset(&voice, 0, sizeof(espeak_VOICE)); // Zero out the voice first 
     voice.languages = langNativeString; 
     voice.name = "US"; 
     voice.variant = 2; 
     voice.gender = 1; 
     espeak_SetVoiceByProperties(&voice); 
    Size = strlen(text)+1;  

    espeak_Synth(text, Size, position, position_type, end_position, flags, 
    unique_identifier, user_data); 
    espeak_Synchronize(); 

    return 0; 
} 

Ich möchte nur die espeak liest meine Saiten in meinem Programm, und der obige Code kann es tun, aber ich möchte wissen, sind alle diese erforderlichen Code für dieser Zweck? (Ich meine, ist es möglich, es zu vereinfachen?)

*** Auch ich möchte wissen, gibt es eine Möglichkeit, espeak als Systemfunktion zu verwenden? Ich meine system("espeak "something" ");?

+0

Scheint wie ein ziemlich geradliniges Beispiel? Sie müssen das Handbuch über das lesen, was diese Funktionen tun. Außerdem gibt es keine Headerdatei mit dem Namen malloc.h in der Sprache C. – Lundin

+0

Wie viel einfacher könnte Es sieht ziemlich minimal aus. Sie scheinen völlig falsch zu verstehen, was 'system()' tut. Wenn Sie es von der Befehlsshell ausführen können, können Sie es als 'system() 'Argument übergeben - so einfach Beispiel muss sein geändert, um die in 'argv [1]' übergebene Zeichenfolge anstelle von 'text' zu verarbeiten. – Clifford

Antwort

1

Die Verwendung von eSpeak selbst scheint ziemlich minimal - Sie müssen die Dokumentation dafür lesen. Es sind einige kleinere C-Kodierungsvereinfachungen möglich, aber vielleicht lohnt sich der Aufwand kaum:

Die memset() ist nicht notwendig. Die Struktur kann initialisiert werden somit auf Null:

espeak_VOICE voice = {0} ; 

Wenn Sie text so erklären:

char text[] = "this is a English test"; 

Dann können Sie strlen() mit vermeiden und ersetzen Size mit sizeof(text). Die Variablen I, Run und L sind nicht belegt und können entfernt werden.

Um den Text als String in der Befehlszeile übergeben, und somit in der Lage sein system("espeak \"Say Something\"") ; beispielsweise zur Ausgabe, müssen Sie einfach argv[1]-espeak_Synth() statt text passieren (aber Sie werden den strlen() Anruf wieder einzustellen brauchen um die Größe zu erhalten

Verwandte Themen