Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#76 Le 10/02/2008, à 16:27

Skippy le Grand Gourou

Re : faire parler son PC

N'hésite pas à  les rajouter dans le wiki, peut-être dans la section "intégration à  KDE" puisqu'il s'agit vraisemblablement d'applis KDE. wink

Hors ligne

#77 Le 10/02/2008, à 16:31

Delphoune

Re : faire parler son PC

Le problème je n'arrive même pas à  faire marcher mbrola, donc difficile d'aller plus loin.

"aplay" ? c'est quoi ce truc ? J'ai pas ça. Pas trouvé ce paquet.
J'ai artsplay qui marche très bien, mais pas "aplay".

#78 Le 10/02/2008, à 16:39

Skippy le Grand Gourou

Re : faire parler son PC

aplay est fourni avec le paquet alsa-utils, je crois. Mais c'est un équivalent d'artsplay, tu peux utiliser artsplay si tu veux (fourni par défaut sous KDE je crois).

Hors ligne

#79 Le 10/02/2008, à 16:44

Delphoune

Re : faire parler son PC

J'ai essayé aplay, artsplay, avec mbrola mais sans résultat.

J'attends qu'un expert KDE trouve la solution car j'ai l'impression que les tutos sont plutà´t pour gnome on dirait, et pas trop testé dans KDE, ce qui est un peu dommage quand-même...................

Autant éviter aplay dans KDE, puisque artsplay est forcément installé, sans se poser de questions tordues sur aplay, et o๠trouver ce truc.

#80 Le 10/02/2008, à 16:46

Skippy le Grand Gourou

Re : faire parler son PC

Ben c'est en grande partie moi qui ai fait la page du wiki correspondante, et j'ai pas  KDE, alors... neutral

Hors ligne

#81 Le 10/02/2008, à 16:48

Delphoune

Re : faire parler son PC

Ok, je vais regarder chez Mandriva si ya pas un truc la-dessus.
Mandriva connait bien KDE.

#82 Le 10/02/2008, à 19:27

Dud

Re : faire parler son PC

Merci pour vos contributions sur Mbrola, le rendu est en effet bien meilleur.
Cela dit, espeak reste toujours aussi manchot, il est donc toujours nécessaire de rajouter tous les sed du script initial de Ghost33 pour que certains mots soient correctement prononcés.

Ensuite j'ai été surpris par une chose : Mbrola est incapable contrairement à  Espeak de prononcer le mot aujourd'hui! Il y a également un problème avec le chiffre huit mad
Si quelqu'un veut bien répondre à  ce problème de débutant, j'aimerais savoir pourquoi

... | sed 's/aujourd\'hui/aujourduy/g' | espeak ...

me renvoie :
espeak.sh: 19: Syntax error: Unterminated quoted string

Sinon Mbrola peut jouer plusieurs sons en même temps, ce qui rend l'utilisation de aoss inutile.

Par contre il y a une petite erreur dans les scripts du wiki : il faut enlever le done tout à  la fin. Je suggère également de rajouter rm ${TEMP}.

Et pour finir, j'ai encore une petite question de débutant big_smile : je me demandais pourquoi ${VARIABLE} était utilisé dans le script et non $VARIABLE tout court? Quelle est la différence entre les 2?


Pour l'amélioration du script servant à  lire le contenu d'un dossier, je propose ceci (je ne connais presque pas la commande sed, il y a très certainement une autre solution plus efficace) :

	# On liste le contenu du dossier, et on inscrit cette liste dans un fichier texte temporaire
	ls > ${TEXTE}
	cat ${TEXTE} | tr '\n' '#' | sed 's/#/ ; /g' > ${TEXTE}

Au moins ça a le mérite de marcher tongue

Dernière modification par Dud (Le 10/02/2008, à 20:22)

Hors ligne

#83 Le 10/02/2008, à 20:23

Skippy le Grand Gourou

Re : faire parler son PC

Dud a écrit :

Ensuite j'ai été surpris par une chose : Mbrola est incapable contrairement à  Espeak de prononcer le mot aujourd'hui!

Comment ça ? mbrola ne lit pas du texte, mais des phonèmes, non ?

Dud a écrit :

Si quelqu'un veut bien répondre à  ce problème de débutant, j'aimerais savoir pourquoi

... | sed 's/aujourd\'hui/aujourduy/g' | espeak ...

me renvoie :
espeak.sh: 19: Syntax error: Unterminated quoted string

Essaie :

... | sed 's/aujourd\\\'hui/aujourduy/g' | espeak ...
Dud a écrit :

Et pour finir, j'ai encore une petite question de débutant big_smile : je me demandais pourquoi ${VARIABLE} était utilisé dans le script et non $VARIABLE tout court? Quelle est la différence entre les 2?

à‡a n'a pas grande différence, tu peux même remplacer les accolades par des parenthèses. C'est surtout une question de "coding style". Perso j'essaie de mettre des accolades, je trouve ça plus sûr, notamment si tu veux coller le contenu d'une variable à  du texte sans espace : $VARIABLEtexte ne donnera rien parce qu'il n'y a pas de variable nommée VARIABLEtexte, $VARIABLE texte mettra un espace entre les deux, et ${VARIABLE}texte collera tout correctement. smile


Dud a écrit :

Pour l'amélioration du script servant à  lire le contenu d'un dossier, je propose ceci (je ne connais presque pas la commande sed, il y a très certainement une autre solution plus efficace) :

	# On liste le contenu du dossier, et on inscrit cette liste dans un fichier texte temporaire
	ls > ${TEXTE}
	cat ${TEXTE} | tr '\n' '#' | sed 's/#/ ; /g' > ${TEXTE}

Au moins ça a le mérite de marcher tongue

J'ai pas regardé le script, mais pourquoi ne pas faire tout simplement une boucle for :

for TEXTE in `ls`
do
   ...
done

?

Hors ligne

#84 Le 10/02/2008, à 21:08

Dud

Re : faire parler son PC

Skippy le grand gourou a écrit :

Comment ça ? mbrola ne lit pas du texte, mais des phonèmes, non ?

ah ok.... neutral

... | sed 's/aujourd\\\'hui/aujourduy/g' | espeak ...

me renvoie toujours la même erreur (pareil en ne mettant que 2 backslashes).

Skippy le grand gourou a écrit :

J'ai pas regardé le script, mais pourquoi ne pas faire tout simplement une boucle for

J'y avais pensé au début. Et en effet, le rendu est bien meilleur que le code que j'ai proposé.

else

   for TEXTE in `ls`
   do

   	# On traduit le fichier texte temporaire en phonèmes grà¢ce à  espeak, et on l'envoie vers l'autre fichier temporaire
   	espeak -v ${TYPE} -s 140 -p 40 ${TEXTE} > ${TEMP}
	
	   # on lit le fichier temporaire de phonèmes
   	mbrola ${VOIX} ${TEMP} -.au | aplay

   done	

fi

Par contre c'est le bordel une fois ce script lancé, impossible de l'arrêter!

Hors ligne

#85 Le 10/02/2008, à 21:45

Skippy le Grand Gourou

Re : faire parler son PC

Dud a écrit :

me renvoie toujours la même erreur (pareil en ne mettant que 2 backslashes).

... | sed "s/aujourd\'hui/aujourduy/g" | espeak ...

alors.

Dud a écrit :

Par contre c'est le bordel une fois ce script lancé, impossible de l'arrêter!

Et en insérant sleep 0.2 dans la boucle ?

Hors ligne

#86 Le 10/02/2008, à 21:47

i M@N

Re : faire parler son PC

Hello.

Excellent ce topic ...

espeak -v mb/mb-fr4 -s 120 "ubuntu G N U `uname` `uname -r | cut -c 1-9`" > ~/.espeak-swap.pho && mbrola /usr/local/share/mbrola/fr2/fr2 ~/.espeak-swap.pho -.au | aplay 2> /dev/null

En fait ça me raconte aussi la température des disques et du processeur, mais après vous improvisez ...
[mode Laspalès]"c'est VOUS qui voyez !"[/mode Laspalès]

Tellement geek ...

@+...

Dernière modification par i M@N (Le 10/02/2008, à 21:48)


1 x Intel(R) Core i7 2600K CPU 3.4GHz Debian sid = roxX !
1 x MSi Wind U100 Debian sid = roxX !!
Read The F***in' Manual or die tryin' !
webmaster @ http://www.rastavibes.net reggae shop

Hors ligne

#87 Le 11/02/2008, à 00:15

Skippy le Grand Gourou

Re : faire parler son PC

Je viens de me rendre compte que mbrola accepte de récupérer la sortie standard en entrée, il suffit de mettre un tiret à la place du fichier .pho (je crosyais que ça marchait pas parce que j'essayait avec -.pho... roll).

Et donc, iM@N, j'ai trouvé encore plus geek que toi ! tongue

Hors ligne

#88 Le 11/02/2008, à 00:27

herberts

Re : faire parler son PC

En ce qui concerne les modifications du wiki, notamment les scripts : ceux qui ont des idées d'amélioration, n'hésitez pas à  modifier tout ça directement dans le wiki, à  partir du moment o๠vous êtes sûr de vous wink

Dernière modification par herberts (Le 11/02/2008, à 03:52)

Hors ligne

#89 Le 11/02/2008, à 03:32

Miaou86

Re : faire parler son PC

cool cette astuce MERCI


Ma Config : MSI gx600-53 / proc T8100 + 4GO Ram + geforce 8600m gt 512 mo
Ecran tactile Acer T230H et carte TV Hauppage 900H

Hors ligne

#90 Le 11/02/2008, à 20:33

Dud

Re : faire parler son PC

Skippy le Grand Gourou a écrit :
... | sed "s/aujourd\'hui/aujourduy/g" | espeak ...

alors.

Oui cette fois je ne reçois pas d'erreur à l'execution, mais il ne prend pas en compte la modification (il prononce toujours "aujourdu"). Pour que ça marche il faut enlever le backslash :

... | sed "s/aujourd'hui/aujourduy/g" | espeak ...
Skippy le Grand Gourou a écrit :
Dud a écrit :

Par contre c'est le bordel une fois ce script lancé, impossible de l'arrêter!

Et en insérant sleep 0.2 dans la boucle ?

Non ça ne change pas le problème... sad


J'ai mis à jour le wiki.

Cependant j'ai constaté un problème avec l'amélioration apporté par Skippy dans le script permettant de lire le contenu d'un dossier. Si je ne me trompe pas, lorsque je sélectionne des fichiers avec la souris, ils sont passés en paramètre au script, c'est d'ailleurs pour cela que herberts avait écrit :

# On liste le contenu du dossier, et on inscrit cette liste dans un fichier texte temporaire
    ls "$@" > ${TEXTE}

Mais avec la boucle for cela ne semble plus fonctionner. Pourtant lorsque j'étudie les différentes valeurs prises par la variable TEXTE, j'ai bien l'ensemble des fichiers sélectionnés et rien de plus!

for TEXTE in `ls $@`
   do
	# On traduit le fichier texte temporaire en phonèmes grâce à espeak, et on l'envoie à Mbrola
 
        espeak -v ${TYPE} -s 140 -p 40 ${TEXTE} | mbrola ${VOIX} - -.au | aplay
        echo ${TEXTE} >> file
   done

Hors ligne

#91 Le 11/02/2008, à 20:51

Skippy le Grand Gourou

Re : faire parler son PC

Dud a écrit :
Skippy le Grand Gourou a écrit :
Dud a écrit :

Par contre c'est le bordel une fois ce script lancé, impossible de l'arrêter!

Et en insérant sleep 0.2 dans la boucle ?

Non ça ne change pas le problème... sad

Et en rajoutant un :

trap 'trap 2; break' 2

avant la boucle ?

Dud a écrit :

Cependant j'ai constaté un problème avec l'amélioration apporté par Skippy dans le script permettant de lire le contenu d'un dossier. Si je ne me trompe pas, lorsque je sélectionne des fichiers avec la souris, ils sont passés en paramètre au script, c'est d'ailleurs pour cela que herberts avait écrit :

# On liste le contenu du dossier, et on inscrit cette liste dans un fichier texte temporaire
    ls "$@" > ${TEXTE}

Mais avec la boucle for cela ne semble plus fonctionner. Pourtant lorsque j'étudie les différentes valeurs prises par la variable TEXTE, j'ai bien l'ensemble des fichiers sélectionnés et rien de plus!

Dans "file" il y a juste ce qu'il faut, mais il lit quand même tout ??? C'est louche ça... neutral
Et en mettant $@ entre guillemets ?

Hors ligne

#92 Le 13/02/2008, à 19:51

Dud

Re : faire parler son PC

Skippy le Grand Gourou a écrit :

Et en rajoutant un :

trap 'trap 2; break' 2

avant la boucle ?

Oh la oh la oh la!! yikes yikes
J'ai essayé mais ça ne change rien du tout. Lorsque je relance le script de suite après une première execution, les fichiers de la deuxième execution sont lus en même temps que ceux de la première. J'entend donc 2 voix qui s'entrecoupent.

Skippy le Grand Gourou a écrit :

Dans "file" il y a juste ce qu'il faut, mais il lit quand même tout ???

Non en fait il lit juste le 1er fichier. Mais je viens de trouver le problème, ce n'est pas dû au script. Je reçois ce message d'erreur lorsque je le lance en ligne de commande (pourtant je n'ai rien d'autre qui utilise la carte son à  priori, mon lecteur multimédia n'est pas lancé) :

$ sh dossier 
Lecture en cours Sparc Audio 'stdin' : Signed 16 bit Big Endian, Taux 22050 Hz, Mono
ALSA lib pcm_dmix.c:864:(snd_pcm_dmix_open) unable to open slave
aplay: main:545: Erreur d'ouverture audio: Périphérique ou ressource occupé

La 1ère ligne (Lecture en cours Sparc Audio 'stdin' : Signed 16 bit Big Endian, Taux 22050 Hz, Mono) correspond à  la lecture du fichier (à  l'execution de Mbrola en fait).

Hors ligne

#93 Le 13/02/2008, à 22:54

Skippy le Grand Gourou

Re : faire parler son PC

Dud a écrit :

Oh la oh la oh la!! yikes yikes
J'ai essayé mais ça ne change rien du tout. Lorsque je relance le script de suite après une première execution, les fichiers de la deuxième execution sont lus en même temps que ceux de la première. J'entend donc 2 voix qui s'entrecoupent.

Je pige pas tout là... Ton problème initial était que tu n'arrivais pas à arrêter la boucle, non ? Dans ce cas je viens de tester, et ma réponse fonctionne parfaitement, même si en fait la moitié est inutile, il suffit de :

trap 'break' SIGINT

(le 2 est le numéro du signal de sortie SIGINT, ou Ctrl+C, la commande trap sert à le récupérer pour le remplacer ici par un "break", qui sert à quitter une boucle ; mon erreur (enfin pas vraiment, parce que ça fonctionne) était de vouloir inclure également une autre commande trap, pour rétablir le Ctrl+C, mais ça se fait automatiquement en sortant de l'exécution du script).

Maintenant si je comprends bien tu parles d'empêcher l'exécution du script s'il est déjà lancé, ou de tuer la première instance si on en lance une deuxième ? Dans les deux cas c'est un autre problème...

Pas compris la suite non plus... neutral

Hors ligne

#94 Le 13/02/2008, à 23:58

Dud

Re : faire parler son PC

Skippy le Grand Gourou a écrit :

Je pige pas tout là... Ton problème initial était que tu n'arrivais pas à arrêter la boucle, non ? Dans ce cas je viens de tester, et ma réponse fonctionne parfaitement, même si en fait la moitié est inutile, il suffit de :

trap 'break' SIGINT

(le 2 est le numéro du signal de sortie SIGINT, ou Ctrl+C, la commande trap sert à le récupérer pour le remplacer ici par un "break", qui sert à quitter une boucle ; mon erreur (enfin pas vraiment, parce que ça fonctionne) était de vouloir inclure également une autre commande trap, pour rétablir le Ctrl+C, mais ça se fait automatiquement en sortant de l'exécution du script).

Maintenant si je comprends bien tu parles d'empêcher l'exécution du script s'il est déjà lancé, ou de tuer la première instance si on en lance une deuxième ? Dans les deux cas c'est un autre problème...

Pardon je me suis mal exprimé, désolé. Il ne s'agissait pas de sortir de la boucle, l'interruption par le signal SIGINT marche. Je parlais effectivement d'arrêter le script lorsqu'un autre instance de ce même script était déjà lancée. C'est d'ailleurs ce à quoi sert ce code dans les autres scripts :

if [ ! -z $(ps -A | grep mbrola | awk '{ print $1 }' ) ]; then
     kill $(ps -A | grep mbrola | awk '{ print $1 }' )

Mais ici cela ne marche plus depuis que la boucle for a été introduite, puisque successivement de nouvelles executions de Mbrola sont lancées à chaque itération.
Pour pallier à ce problème, il faut donc arrêter les scripts en cours d'execution, j'ai alors remplacé mbrola dans le code précédent par le nom du script (grep "nom_du_script" au lieu de grep mbrola), mais cela ne fonctionne pas.
J'ai aussi pensé à pkill "nom_du_script" mais ça me parait un petit peu bourrin....

Skippy le Grand Gourou a écrit :

Pas compris la suite non plus...

Lorsque j'execute le script permettant de lire le contenu d'un dossier à l'aide du menu scripts de Nautilus, ça me lit tous les fichiers. Donc pas de problèmes.

Lorsque je sélectionne des fichiers à l'aide de la souris, ça me lit le 1er fichier et puis...ça s'arrête. D'autres fois...ça marche il me lis bien les bon fichiers et rien de plus, d'autre fois encore il m'en lit seulement 3...
Mais 90% des fois il s'arrête au 1er. Et lorsque je regarde les logs (fichier file), j'ai bien tous les fichiers sélectionnés et rien de plus.

Alors j'essaie d'éxécuter ce fichier en console et là un coup ça marche un autre coup ça marche plus il me renvoie l'erreur que j'ai donnée dans mon précédent post (sans rien lire du tout) :

$ sh dossier dossier fichier 
Lecture en cours Sparc Audio 'stdin' : Signed 16 bit Big Endian, Taux 22050 Hz, Mono
Lecture en cours Sparc Audio 'stdin' : Signed 16 bit Big Endian, Taux 22050 Hz, Mono

#il lit bien les 2 fichiers donnés en paramètres
#dans la foulée je le relance :

$ sh dossier dossier fichier 
ALSA lib pcm_dmix.c:864:(snd_pcm_dmix_open) unable to open slave
aplay: main:545: Erreur d'ouverture audio: Périphérique ou ressource occupé
ALSA lib pcm_dmix.c:864:(snd_pcm_dmix_open) unable to open slave
aplay: main:545: Erreur d'ouverture audio: Périphérique ou ressource occupé

Donc je pensais que peut être c'était à cause de cette erreur que le script s'arrêtait lorsque je sélectionnait les fichiers à la souris, mais à vrai dire j'en sais rien du tout....

A priori, la boucle for avec le : `ls $@` est correcte puisque dans file il y a bien les bon fichiers.

Voilà j'espère avoir été plus clair, désolé si j'ai été confus dans mes précédents posts.

Hors ligne

#95 Le 14/02/2008, à 02:28

herberts

Re : faire parler son PC

Si je comprends bien, tu essaye de lui faire lire le contenu de plusieurs fichiers sélectionnés les uns après les autres.

ça, j'avoue que je n'avais pas pensé à  tester...

Je sais pas trop comment marche l'histoire des paramètres avec le $@, mais peut être qu'il faudrait faire un "glissement" des paramètres, en lui faisant lire d'abord le premier fichier avec une commande du genre $1 à  la place de $@ (par contre, quelle est la syntaxe exacte et quel numéro de paramètre c'est...) puis quand la lecture du premier est fini, effectuer le glissement (pareil, je sais qu'on peut le faire pour l'avoir déjà  vu dans des scripts, mais comment...) pour que le $2 devienne le $1 et boucler pour recommencer la lecture (mais ce sera le deuxième fichier cette fois ci)

Hors ligne

#96 Le 14/02/2008, à 17:02

Dud

Re : faire parler son PC

herberts a écrit :

Si je comprends bien, tu essaye de lui faire lire le contenu de plusieurs fichiers sélectionnés les uns après les autres.

ça, j'avoue que je n'avais pas pensé à tester...

Ben si justement c'est pas à ça qu'il sert le $@ dans ton script??

# On liste le contenu du dossier, et on inscrit cette liste dans un fichier texte temporaire
    ls "$@" > ${TEXTE}

La commande pour faire glisser les paramètres est shift. Je l'ai essayé mais cela ne fonctionne pas.
Le script a vraiment un fonctionnement aléatoire : à certains moments cela marche très bien il lit bien tous les fichiers sélectionnés!
Je suis quasiment sûr que le script est bon vu que dans les logs je retrouve bien les fichiers sélectionnés.

Hors ligne

#97 Le 14/02/2008, à 19:27

herberts

Re : faire parler son PC

Le $@ permet d'envoyer tous les paramètres (donc avec plusieurs fichiers sélectionnés, tous les fichiers, mais il y a d'autres paramètres, comme le nom de l'application et d'autres trucs encore)

Effectivement, puisque tous les fichiers sont dans le log, ils sont bien vu comme des paramètres, mais je me demande si le problème ne vient pas du fait qu'il reçoit plusieurs fichiers en même temps.

Du coup ce que je proposais, c'est de décomposer les paramètres "à  la main", justement en passant par les $1, $2 etc, mais je sais pas exactement comment faire.

Dernière modification par herberts (Le 14/02/2008, à 19:28)

Hors ligne

#98 Le 14/02/2008, à 21:07

Dud

Re : faire parler son PC

herberts a écrit :

Le $@ permet d'envoyer tous les paramètres (donc avec plusieurs fichiers sélectionnés, tous les fichiers, mais il y a d'autres paramètres, comme le nom de l'application et d'autres trucs encore)

T'es sûr? D'après lea-linux.org :
"La variable @ (dont le contenu est $@) contient l'ensemble de tous les "mots" qui ont été passé au script (c'est à dire toute la ligne de commande, sans le nom du script)."
J'ai affiché la valeur de $@ lors de l'execution du script et elle ne contient bien que les fichiers passés en paramètres et rien de plus.

herberts a écrit :

Effectivement, puisque tous les fichiers sont dans le log, ils sont bien vu comme des paramètres, mais je me demande si le problème ne vient pas du fait qu'il reçoit plusieurs fichiers en même temps.

Je crois que tu as trouvé la solution. Apparemment ce script ne pose plus de problèmes :

   FICHIERS=`ls $@`
   
   for TEXTE in ${FICHIERS}
   do
        espeak -v ${TYPE} -s 140 -p 40 ${TEXTE} | mbrola ${VOIX} - -.au | aplay
   done

Hors ligne

#99 Le 15/02/2008, à 00:03

herberts

Re : faire parler son PC

Bon, nickel, si tu te sens motivé, tu peux le modifier dans le wiki smile

Dud a écrit :

Je crois que tu as trouvé la solution

: Non non, c'est toi qui viens de la trouver là, moi j'ai juste émis une hypothèse wink

Hors ligne

#100 Le 15/02/2008, à 18:25

Dud

Re : faire parler son PC

Le wiki a été mis à  jour.

Par contre, il reste une petite limitation : comme les paramètres lors de l'appel du script sont séparés par des espaces, les fichiers comportant un ou des espaces ne sont pas lus et provoquent des erreurs. En effet au moment du listage des fichiers sélectionnés (ls $@), si il y a un fichier nommé par exemple "linux ubuntu.txt", alors le script cherchera 2 fichiers un appelé linux et l'autre ubuntu.txt!
Et ça je ne pense pas que cela soit évitable...

Hors ligne