Bonjour,

Après des heures d'essais et de recherches sur le net, je me résous à vous soumettre mon problème.

Je souhaite réaliser un pipe équivalent à ce script :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
#!/bin/sh
espeak -v mb/mb-fr4 -f 'monfichier.txt' | mbrola -e /usr/share/mbrola/fr4/fr4 - -.au | paplay -n 'from script' --stream-name='espeak'
Mais avec stdin qui remplace 'monfichier.txt'.

J'ai lu dans la *Python Library Reference* http://docs.python.org/lib/node535.html

qu'il fallait utiliser le module subprocess.

Seulement cela fait plusieurs jours que je cherche mais mon programme freeze systematiquement dès que j'utilise la méthode *say* de la classe suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
import os,subprocess
from subprocess import Popen, PIPE
 
class Mbrola():
    def __init__(self):
 
        self.p1 = Popen(["espeak -v mb/mb-fr4"],
            shell=True,
            stdin=PIPE,
            stdout=PIPE)
 
        self.p2 = Popen(["mbrola -e /usr/share/mbrola/fr4/fr4 - -.au"],
            shell=True,
            stdin=self.p1.stdout,
            stdout=PIPE)
 
        self.p3 = subprocess.Popen(["paplay -n 'from script' --stream-name='espeak'"],
            shell=True,
            stdin=self.p2.stdout)
 
    def say(self, str):
        self.p1.communicate(str)
Si quelqu'un à une idée je suis preneur car je n'en ai plus

Merci,