2017-11-23 15 views
2

Ich möchte eine Zeichenfolge an espeak-ng übergeben und es liest meine Saite nach Klang!Warum sagt mein espeak-ng Programm nichts?

ich dieses Programm gesucht und gefunden und hat eine kleine Änderung es von Italienisch auf Englisch zu ändern (unter den kommentierten Zeilen), aber hat nicht funktioniert:

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



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



//char Voice[] = {"lt+klatt2"}; 
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 = "lt"; //Default to US English 
    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 = "klatt"; 
    voice.name = "US"; 
    voice.variant = 2; 
    voice.gender = 1; 
    espeak_SetVoiceByProperties(&voice); 
    Size = strlen(text)+1;  
    printf("Saying '%s'",text); 
    espeak_Synth(text, Size, position, position_type, end_position, flags, 
    unique_identifier, user_data); 
    espeak_Synchronize(); 
    printf("\n:Done\n"); 
    return 0; 
} 

Was ist das Problem?

Es kompiliert ohne Fehler und macht speaks als ausführbare Datei, aber wenn ich versuche, ./speaks das Ergebnis:

Saying 'this is a english test' 
:Done 

Ohne Stimme!

EDIT: fragte ich meine Frage in gitub und jemand sagte:

Der Pfad Parameter von espeak_Initialize zum espeak-ng-Datenverzeichnis verweisen muss, oder das übergeordnete Verzeichnis. Alternativ dazu können Sie die Umgebungsvariable ESPEAK_DATA_PATH so einstellen, dass sie auf das Verzeichnis verweist.

Also habe ich ESPEAK_DATA_PATH=/usr/local/share/espeak-ng-data-/etc/environment Datei diese Zeile hinzufügen, aber es ist nichts passiert!

Auch ich habe versucht, die Pfadvariable des Codes zu ändern (wie ich weiß, die Adresse ist wahr) char *path="/usr/local/share/espeak-ng-data" aber keine Stimme wieder!

+0

Haben Sie [pcaudiolib für Audioausgabe installieren] (https://github.com/espeak-ng/espeak-ng#building)? – sehe

+0

@sehe: Entschuldigung, ich habe keine Benachrichtigung über deine Kommentare erhalten! Nein, habe ich nicht. Ich werde es jetzt installieren. – user145959

Antwort

1

Ok, probieren Sie dies aus, müssen Sie zunächst bauen & installieren libpcaudio.

Dann konfigurieren Sie & build espeak.

Als nächstes, wenn Sie laufen, Sie könnten die Bibliothekspfade angeben müssen:

LD_LIBRARY_PATH=/tmp/espeak-ng/src/.libs/:/usr/local/lib ./sotest 

Diese benachrichtigt mich dann ein Problem:

Error processing file '/usr/local/share/espeak-ng-data/phontab': No such file or directory. 

Das sagt mir, dass libespeak-ng will installiert werden, aufgrund von hartcodierten Pfaden (natürlich kann der Pfad selbst unter Verwendung ./configure --prefix= usw. geändert werden)

Ich persönlich fand, dass ich den LD_LIBRARY_PATH-Trick du tun musste Ringbildung aller Bibliotheksartefakte, und musste mehrfach hintereinander laufen, bis es schließlich keine weiteren Fehler mehr gemeldet hat.

All dies zeigt, dass die Projektwartung nicht sehr gut ist. Ich habe sogar mehrere Fehler auf dem Weg gesehen.

Nachdem schließlich erfolgreich

sudo make install 

Ihr Testprogramm schließlich tun läuft und macht den erwarteten Sound.

+0

Sidenote: all das funktionierte bereits aus der Box heraus, indem einfach 'espeak-ng' durch' espeak' in der include-Zeile ersetzt wurde und 'sudo apt-get install libespeak {1, -dev}' verwendet wurde. Vielleicht möchten Sie aus diesem Grund bei 'libespeak' bleiben. – sehe

+0

Ich habe 'libpcaudio' installiert und' ./configure mache make install' das 'espeak-ng' nochmal und kompiliere meinen Code nochmal ohne Fehler, aber mein Programm liefert mir nur die Text Ergebnisse nicht Ton! – user145959

+0

Was ist die Bedeutung dieser Zeile? LD_LIBRARY_PATH =/tmp/espeak-ng/src/.libs /:/usr/lokal/lib ./sotest '? Was ist './sotest'? ist es der Name Ihres Programms? Hast du es in '/ etc/environment' geschrieben? – user145959