2016-06-17 8 views
0

Ich arbeite an Text-To-Speech und versuche, Audiodatei zu generieren. Ich arbeite gerade an PicoTTS auf Linux (Raspberry Pi). Der folgende Befehl:Text-To-Speech ein String oder Variablenwert (PicoTTS)

system("pico2wave -w res.wav "Hello to all of you"); 
    system("aplay res.wav"); 

Der obige Code „um alle von Ihnen Hallo“ spielt. Aber ich möchte Inhalte wiedergeben, die in string, wstring (Lesen einer Variablen) gespeichert sind.

Ich versuchte

sprintf(buf, "Hello to all of you"); 
    system("pico2wave -w res.wav buf); 
    system("aplay res.wav"); 

Es spielte buf und nicht die in buf gespeicherten Wert. Kann jemand bitte etwas Licht darauf werfen oder mir empfehlen, TTS anders als Pico zu verwenden, das Zeichenfolgenwert annimmt. Es wäre eine große Hilfe für mich, wenn es auch einen Wert haben könnte. Ich arbeite an Raspberry Pi 2 und mit C++.

Antwort

1

Sie müssen die Zeichenfolge vor dem Aufruf des Systems verketten und dann diese verkettete Zeichenfolge für den Systemaufruf verwenden. Es wäre so etwas wie

std::string command = "pico2wave -w res.wav "; 
std::string text_to_say; 
// get input from user and store it into text_to_say 
command += text_to_say; 
// now command is pico2wave -w res.wav whatever the user entered 
system(command.c_str()); 
system("aplay res.wav"); 

aussehen Wenn whatever the user entered Bedürfnisse in Anführungszeichen wie "whatever the user entered" dann

command += text_to_say; 

wird

command += "\"" + text_to_say + "\""; 
+0

Danke..das hat funktioniert – RDoonds

0

annehmen zu verpackenden ich arbeiten konnte (Vorsicht: Code nicht getestet)

// command string 
std::string cmd("pico2wave -w res.wav "); 

// create the message in some way 
std::string msg("Hello to all of you"); 

// call to system 
system((cmd+"\""+msg+"\"").c_str());