2016-08-07 62 views
2
subprocess.call(["espeak", "-s 5 -ven", "where are you", "--stdout", 'shell=True', "aplay"]) 

Die Ausgabe von diesem wird nur eine massive Ausgabe von Sonderzeichen sein, und nicht das Audio von der espeak. Wenn ich diese Art:Subprocess.call und --stdout

subprocess.call(["espeak", "-s 5 -ven", "where are you", 'shell=True', "aplay"]) 

dann wird der Ton zu hören, aber es gibt einige Probleme mit der Sprache manchmal langsam ist, zusammen mit Ausgabe von Meldungen unter:

ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.front 
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear 
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe 
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side 
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround40 
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround41 
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround50 
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround51 
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround71 
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958 
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958 
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958 
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi 
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi 
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem 
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem 
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline 
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline 
ALSA lib pcm_dmix.c:957:(snd_pcm_dmix_open) The dmix plugin supports only playback stream 
Cannot connect to server socket err = No such file or directory 
Cannot connect to server request channel 
jack server is not running or cannot be started 

Kann jemand etwas erklären - Stout bedeutet hier? Und warum verursacht es den erwähnten Fehler?

Antwort

1

Von espeak documentation:

--stdout

Schreibt die Sprachausgabe stdout wie es produziert wird, anstatt sie zu sprechen. Die Daten beginnen mit einer WAV-Dateikopfzeile, die die Abtastrate und das Format der Daten angibt. Das Längenfeld ist ist auf Null gesetzt, da die Länge der Daten unbekannt ist, wenn der Header erzeugt wird.

Für jack server is not running or cannot be started Fehlerprüfung this link für Lösung:

Haben Sie das ALSA-Paket installiert (Typ ‚alsa‘ und die Tabulatortaste zweimal, sollten Sie einige Befehle beginnend mit ALSA sehen ..) ? Wenn es nicht installiert ist, zu tun, dass mit

sudo apt-get install alsa-tools alsa-utils 

Wie auch immer dieser Fehler nicht espeak von der Arbeit verhindern soll. Sie können ihn entfernen, indem stderr zu /dev/null Umleitung wie folgt:

FNULL = open(os.devnull, 'w') 
retcode = subprocess.call(["espeak", "-s 5", "-ven", "where are you", "aplay"], stdout=FNULL, stderr=subprocess.STDOUT) 

Bitte beachten Sie auch, dass Sie shell=True als eines der Argumente zu espeak verwenden, die sich eigentlich Argument call Methode sein sollte. Entfernen Sie es einfach.

+0

ALSA ist schon da. Das Hinzufügen von 2>/dev/null funktioniert immer noch nicht. Ist immer noch das Gleiche. – sam

+0

@sam Was meinst du immer noch gleich? Fehler "Jack Server läuft nicht oder kann nicht gestartet werden"? oder etwas anderes? – Samuel

+0

Ich tippe dies: 'subprocess.call ([" espeak "," -s 5 -ven "," wo bist du "," 2>/dev/null "," shell = True "," aplay "])' und es kommt 'Jack Server läuft nicht oder kann nicht gestartet werden ' – sam