Closed Xavier74 closed 7 years ago
J'ai fait un gros changement récemment, j'utilise sox
au lieu de mpg123
pour lire les fichiers mp3. Pas dit que ca soit lié à ca.
J'imagine que suite à cette erreur tu as essayé de voir ce qu'il y avait dans /dev/shm
. Je suis extrêmement surpris qu'il n'y ai rien...
$> ls /dev/shm
Ton fichier dimanche
s'il n'a pas d'extension doit être un vieux fichier, tu dois pouvoir le supprimer.
Essaye simplement de faire dire qqchose de long à Jarvis:
$> ./jarvis.sh -s "Partiellement nuageux. Maximales : 19 degrés. Vents soufflant de 10 à 15 Kilometre par heure ."
Jarvis: Partiellement nuageux. Maximales : 19 degrés. Vents soufflant de 10 à 15 Kilometre par heure .
Bon chez moi ca marche avec svox pico
et google
en TTS.
$> ls /dev/shm
jarvis_gmail_last_check
jarvis.lock
jarvis-order
jarvis-say
jarvis-store.json
partiellement_nuageux_maximales__19_degres_vents_soufflant_de_10_a_15_kilometre_par_heure_.mp3
Peut-être ta partition shm
est pleine?
$> df -h
Filesystem Size Used Avail Use% Mounted on
...
tmpfs 432M 292K 431M 1% /dev/shm
...
Je confirme. Utilisation de google tts, le shm est plein a 1% j'ai tout supprimé, je redémarre jarvis et je lui fais lire quelque chose de vraiment long via jarvis.sh -s. il ne lit rien et il n'y a aucun fichier mp3 généré dans le shm.
Voici le texte que j'ai écrit
./jarvis.sh -s "Bonjour. je réalise actuellement un test avec une longue chaine de caractères. Il est possible que la prononciation ne se passe pas correctement, c'est justement le but de ce test. Si tout ce passe bien, on pourra crier victoire. dans le cas contraire, ce sera ennuyeux. on rajoute encore un peu de texte pour s'assurer que tout va bien. il faut en mettre un maximum."
Le 29.04.2017 à 21:35, Alexandre Mély a écrit :
J'ai fait un gros changement récemment, j'utilise |sox| au lieu de |mpg123| pour lire les fichiers mp3. Pas dit que ca soit lié à ca. J'imagine que suite à cette erreur tu as essayé de voir ce qu'il y avait dans |/dev/shm|. Je suis extrêmement surpris qu'il n'y ai rien...
|$> ls /dev/shm |
Ton fichier |dimanche| s'il n'a pas d'extension doit être un vieux fichier, tu dois pouvoir le supprimer. Essaye simplement de faire dire qqchose de long à Jarvis:
$> ./jarvis.sh -l"Partiellement nuageux. Maximales : 19 degrés. Vents soufflant de 10 à 15 Kilometre par heure ." Jarvis: Partiellement nuageux. Maximales: 19 degrés. Vents soufflant de 10 à 15 Kilometre par heure.
Bon chez moi ca marche avec |svox pico| et |google| en TTS.
$> ls /dev/shm jarvis_gmail_last_check jarvis.lock jarvis-order jarvis-say jarvis-store.json partiellement_nuageux_maximales__19_degres_vents_soufflant_de_10_a_15_kilometre_parheure.mp3
Peut-être ta partition |shm| est pleine?
$> df -h Filesystem Size Used Avail Use% Mounted on ... tmpfs 432M 292K 431M 1% /dev/shm ...
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/alexylem/jarvis/issues/574#issuecomment-298189790, or mute the thread https://github.com/notifications/unsubscribe-auth/AaF6Pfg4BOmO1sJuBdu_cm-0wWOHAG0Cks5r05DvgaJpZM4NMWrB.
Ok je pense que c'est à cause de la longueur qui doit être bloquée par ton système de fichier. Alors on va faire plusieurs essais:
$> ./jarvis.sh -b # jarvis doit être lancé, enfin ca tu le sais
$> ./jarvis.sh -s "ceci est un test"
$> ./jarvis.sh -s "ceci est un test ceci est un test"
$> ./jarvis.sh -s "ceci est un test ceci est un test ceci est un test"
...
Merci!
En effet, la longueur de la chaîne semble être une source de problème. elle peut être de maximum 256 caractères, ce qui n'est pas très surprenant. Mais dans la commande météo de base, cette longueur n'était pas atteinte. je réessais maintenant et un problème similaire se pose:
Xavier: quelle est la météo pour demain
symba: je regarde...
symba: lundi
Averses. Maximales : 14 degrés. Vents Sud Ouest soufflant de 10 à 15
Kilometre par heure . Risque de pluie : 60 %.
play FAIL formats: can't open input file `.mp3': No such file or directory
ERROR: play command failed
HELP: Verify your speaker in Settings > Audio > Speaker
une deuxième fois droit derrière
Xavier: quelle est la météo pour demain symba: je regarde... symba: play FAIL formats: can't open input file `/dev/shm/.mp3': ERROR: play command failed HELP: Verify your speaker in Settings > Audio > Speaker
et le contenu de dev/shm
bonjour.mp3 jarvis.lock jarvis-order jarvis-record.wav jarvis-say
je_regarde.mp3 oui.mp3
le problème ne se pose par contre pas comme tu l'as suggéré avec pico.
sachant que google a une limitation du nombre de caractère, j'imagine que c'est de là que vient le problème. mais pourtant, ça a déjà eu fonctionné. ou alors est-ce qu'une précédente fonction splitait les chaînes suppérieures à 100 caractères ?
Quel est le type de votre système de fichier ? Est-ce bien ext2/3/4 ?
Bon déjà je pensais désactiver la mise en cache des phrases trop longues, car à priori très peu de chances qu'elles soient réutilisées. Mais bon ca ne réglera pas le problème de base. Tu as fais les tests que je t'ai demandé?
$> ./jarvis.sh -b # jarvis doit être lancé, enfin ca tu le sais
$> ./jarvis.sh -s "ceci est un test"
$> ./jarvis.sh -s "ceci est un test ceci est un test"
$> ./jarvis.sh -s "ceci est un test ceci est un test ceci est un test"
J'insiste parce qu'il peut y avoir une histoire de caractère spécial...
pour le système du ext4, mais là il s'agit d'écrire dans le shm, donc la ram.
Oui concernant les tests aucun problème, j'ai également essayé avec des caractères accentués, pas de soucis de ce côté. jarvis est bien lancé :) éventuellement passer sur un md5 de la phase à lire pourrait éviter le problème de longueur et permettre la réutilisation en cas de phrase identique.
@Xavier74 c'est exactement ce que je faisais au début, je ne sais pas pourquoi j'ai changé, surement pour la curiosité de voir les phrases générées...
J'ai vraiment l'intuition qu'on passe à côté du problème... je vois un retour chariot après le lundi
tout ca est bizarre.
Peux-tu faire un:
curl -s "http://api.wunderground.com/api/$weather_wunderground_key/forecast/lang:$weather_wunderground_language/q/$weather_wunderground_city.json"
en replaçant les variables? je vais voir ce que donne le parsing...
pour le système du ext4, mais là il s'agit d'écrire dans le shm, donc la ram
Oops, bien sur :/
je vois un retour chariot après le lundi tout ca est bizarre.
Si ça peut aider je me suis déjà cassé les dents sur cette partie. Le plugin revoie un retour chariot juste après le jour de la semaine lorsque l'on demande *meteo*demain*
, d'où le PR #14 de Jarvis-api.
ça vient de jq qui fait une nouvelle ligne pour chaque entrée json. Il est possible d'utiliser --join-output
mais ça ne fonctionne qu'à partir de la version 1.5 :/ Du coup pour l'enlever il faut être bourrin à coup de sed
ou tr
. Dans tous les cas il vaut mieux que Jarvis soit capable d'assainir ça tout seul.
Ok on tiens une piste... merci @Oliv4945 je vais creuser ça
Vue qu'il y a déjà pas mal de sed, le plus simple sans se prendre la tête est de rajouter un | tr '\n' ' ' sinon intégrer ça directement dans la fonction say, ce sera plus direct et ça limitera les problèmes similaires pour d'autres appels.
Bon en fait le retour chariot n'était pas lié à weather wunderground mais à jq. J'ai corrigé (et amélioré) le plugin.
@Xavier74 tu peux mettre à jour ton plugin météo et retester tel quel? A voir déjà si ca résout ton problème de fichier long...
c'est mieux pour le jour, mais même problème plus loin Xavier: quelle est la météo pour demain symba: Je regarde... symba: mardi: Pluie. Maximales : 13 degrés. Vents Sud Sud Ouest soufflant de 10 à 15 kilomètres heure. Risque de pluie : 90 pourcent s. Environ ~ 6 mm de pluie. play FAIL formats: can't open input file `mm_de_pluie.mp3': No such file or directory ERROR: play command failed HELP: Verify your speaker in Settings > Audio > Speaker
toujours fichier sans extension .mp3 dans le shm, dont voici le contenu
bonjour.mp3 jarvis-order je_regarde.mp3 oui.mp3
pulse-shm-3648842681 jarvis.lock jarvis-say
mardi_pluie_maximales__13 pulse-shm-3591033155 tts.wav
On dirait encore un pb de caractère spécial, ca a coupé à ~
... je regarde...
@Xavier74 ca marche très bien chez moi avec cette phrase exacte (TTS = google):
$> ./jarvis.sh -s "mardi: Pluie. Maximales : 13 degrés. Vents Sud Sud Ouest soufflant de 10 à 15 kilomètres heure. Risque de pluie : 90 pourcents. Environ ~ 6 mm de pluie."
Je commence à croire qu'il doit y avoir un pb de ton côté... Tu as bien la dernière version de Jarvis? non "modifiée"?
Salut,
Désolé pour le retard. La commande jarvis.sh -s que tu me donne fonctionne bien. mais que je lance en mode keyboard ou via le stt, j'obtient ceci Xavier: quelle est la météo demain symba: Je regarde... symba: vendredi: Ciel plutôt dégagé. Maximales : 20 degrés. Vents Nord Est soufflant de 10 à 15 kilomètres heure. play FAIL formats: can't open input file `degres_vents_nord_est_soufflant_de_10_a_15_kilometres_heure.mp3': No such file or director y ERROR: play command failed HELP: Verify your speaker in Settings > Audio > Speaker
et le contenu du dev/shm bonjour.mp3 jarvis.lock jarvis-order jarvis-say je_regarde.mp3 mardi_pluie_maximales__13_degres_vents_sud_sud_ouest_soufflant_de_10_a_15_kilometres_heure_risque_de_pluie90_pourcents_environ_6_m m_de_pluie.mp3 vendredi_ciel_plutot_degage_maximales20
on voit donc clairement que la commande via -s est passée, mais le reste fait planter après le nombre de degrés.
voici le echo $audio_file dans google/main.sh... je comprends pas encore pourquoi /dev/shm/vendredi_ciel_plutot_degage_maximales__20 degres_vents_nord_est_soufflant_de_10_a_15_kilometresheure.mp3 si tu as une idée de pourquoi il manque le entre 20 et degres...
ok, c'est un espace insecable #160 au lieu d'un espace #32 entre 20 et degrés. soit il faut changer la fonction jv_sanitize pour inclure le cas du
Je regarde
@Xavier74 comment tu as pu le voir? Tu peux me dire quelle caractère c'est exactement? Tu as réussi à afficher/transcoder ce caractère dans la console? Je vois plusieurs options possible j'ai je n'arrive pas à reproduire le pb chez moi donc je ne sais pas laquelle choisir: https://superuser.com/questions/517847/use-sed-to-replace-nbsp-160-hex-00a0-octal-240-non-breaking-space
Salut,
j'avoue ne pas arriver à grand chose pour le moment. j'ai testé avec sed mais en voulant tester ce matin j'ai bien un #32 dans le résultat et non plus un 160. j'ai restauré ma copie de travail et vois que tu as fais des modifications hier soir, est-ce que tu as déjà fais quelque chose de ton côté ?
Le 04.05.2017 à 21:07, Alexandre Mély a écrit :
@Xavier74 https://github.com/Xavier74 comment tu as pu le voir? Tu peux me dire quelle caractère c'est exactement? Tu as réussi à afficher/transcoder ce caractère dans la console? Je vois plusieurs options possible j'ai je n'arrive pas à reproduire le pb chez moi donc je ne sais pas laquelle choisir: https://superuser.com/questions/517847/use-sed-to-replace-nbsp-160-hex-00a0-octal-240-non-breaking-space
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/alexylem/jarvis/issues/574#issuecomment-299280330, or mute the thread https://github.com/notifications/unsubscribe-auth/AaF6PQ-3CjMSd7P1OKGX3MfQHhy6J08Qks5r2iIJgaJpZM4NMWrB.
Bonjour... je viens de regarder dans le répertoire dev/shm... en effet le fichier de météo n'a pas l'extension .mp3... l'écriture arrête à "partiellement_nuageux_maximales24"... que je peux lire avec mpg321 sans problème et avec sox qui utilise play, lui, si il manque l'extension du fichier il ne le lit pas... et affiche 'play FAIL formats: can't determine type of file `partiellement_nuageux_maximales24'
Donc dans ton prog jarvis il rajoute automatiquement .mp3 à la fin du fichier à lire... et comme il ne le trouve pas bien sûr il affiche play FAIL formats: can't open input file `degres_vents_soufflant_de_10_a_15_kilometres_heure.mp3': No such file or directory
Ce n'est donc pas un problème de longueur du texte... mais il manière de le compiler en mp3... (Je vois une mise à jour ce Vendredi matin qui n'a rien changé... je ne sais pas si ca concernait ce problème...).
@alexylem je pense avoir trouvé d'ou ca vient... si on fait une fonction qui affiche un résultat du type: resultatmath="est égale à " say "$resultatmath" tout se passe bien MAIS ! resultatmath="est égale à " say "$resultatmath " avec un espace à la fin de "est égale à " là ca plante !!!!!!!!!!!!!!! j'insiste sur une fonction car dans une commande sans transiter par une fonction ca marche très bien...
Tu n'as plus qu'a corriger ce tout petit défaut 'ESPACCCCCCCCE"...
Heu... moi j'aimerai comprendre pourquoi le fichier n'a pas son nom complet! Car s'il avait le .mp3
à la fin ca marcherait.
@Jean-Bernard-Hallez ton exemple avec l'espace à la fin fonctionne très bien sur mon raspberry pi:
pi@jarvis:~/jarvis $ ./jarvis.sh -s "est égale à " # 2 espaces
Jarvis: est égale à
pi@jarvis:~/jarvis $ ls /dev/shm/
bonjour_alex.mp3 jarvis_gmail_last_check jarvis-order jarvis-store.json
est_egale_a.mp3 jarvis.lock jarvis-say tts.wav
Je pense plus que ca viendrait d'un caractère spécial ramené par weather wunderground. Si seulement je pouvais reproduire le problème chez moi ca m'aiderait à avancer et vous donner un fix rapidement. Pour le moment j'avance en aveugle...
si il manque l'extension du fichier il ne le lit pas... et affiche 'play FAIL formats: can't determine type of file
C'est vrai et on peut y remédier avec un -t mp3
. Mais:
jv_play
est utilisé pour d'autres types de fichier y compris wav
`degres_vents_soufflant_de_10_a_15__kilometre_par_heure_.mp3': No such file or directory
Donc je suis persuadé que le problème est du à un caractère spécial dans le nom du fichier lors de sa création qui le coupe en 2. C'est ca qu'il faut résoudre.
Désolé si je te répond ainsi je ne suis pas à mon domicile mais il faut l'intégrer dans une fonction comme ça oui tu as raison ça marche.... say==fonctionXparexemplePuis dans fonction.sh faire fonctionXparexemple(){say "avec un espace "}
Envoyé depuis mon appareil Samsung
-------- Message d'origine -------- De : Alexandre Mély notifications@github.com Date : 06/05/2017 11:33 (GMT+01:00) À : alexylem/jarvis jarvis@noreply.github.com Cc : Hallez jbhallez@aol.com, Mention mention@noreply.github.com Objet : Re: [alexylem/jarvis] Problème avec les noms de fichiers trop long (#574)
Heu... moi j'aimerai comprendre pourquoi le fichier n'a pas son nom complet! Car s'il avait le .mp3 à la fin ca marcherait. @Jean-Bernard-Hallez ton exemple avec l'espace à la fin fonctionne très bien sur mon raspberry pi: pi@jarvis:~/jarvis $ ./jarvis.sh -s "est égale à " Jarvis: est égale à pi@jarvis:~/jarvis $ ls /dev/shm/ bonjour_alex.mp3 jarvis_gmail_last_check jarvis-order jarvis-store.json est_egale_a.mp3 jarvis.lock jarvis-say tts.wav Je pense plus que ca viendrait d'un caractère spécial ramené par weather wunderground.
Si seulement je pouvais reproduire le problème chez moi ca m'aiderait à avancer et vous donner un fix rapidement. Pour le moment j'avance en aveugle...
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.
{"api_version":"1.0","publisher":{"api_key":"05dde50f1d1a384dd78767c55493e4bb","name":"GitHub"},"entity":{"external_key":"github/alexylem/jarvis","title":"alexylem/jarvis","subtitle":"GitHub repository","main_image_url":"https://cloud.githubusercontent.com/assets/143418/17495839/a5054eac-5d88-11e6-95fc-7290892c7bb5.png","avatar_image_url":"https://cloud.githubusercontent.com/assets/143418/15842166/7c72db34-2c0b-11e6-9aed-b52498112777.png","action":{"name":"Open in GitHub","url":"https://github.com/alexylem/jarvis"}},"updates":{"snippets":[{"icon":"PERSON","message":"@alexylem in #574: Heu... moi j'aimerai comprendre pourquoi le fichier n'a pas son nom complet! Car s'il avait le .mp3
à la fin ca marcherait.\r\n\r\n@Jean-Bernard-Hallez ton exemple avec l'espace à la fin fonctionne très bien sur mon raspberry pi:\r\nshell\r\npi@jarvis:~/jarvis $ ./jarvis.sh -s \"est égale à \"\r\nJarvis: est égale à \r\npi@jarvis:~/jarvis $ ls /dev/shm/\r\nbonjour_alex.mp3 jarvis_gmail_last_check jarvis-order jarvis-store.json\r\nest_egale_a.mp3 jarvis.lock jarvis-say tts.wav\r\n
\r\n\r\nJe pense plus que ca viendrait d'un caractère spécial ramené par weather wunderground.\r\nSi seulement je pouvais reproduire le problème chez moi ca m'aiderait à avancer et vous donner un fix rapidement. Pour le moment j'avance en aveugle..."}],"action":{"name":"View Issue","url":"https://github.com/alexylem/jarvis/issues/574#issuecomment-299628032"}}}
Est-ce que vous utilisez tous le même encodage ?
Je crois qu'on peut le voir avec echo $LC_ALL
mais je ne peux pas vérifier d'ici
on peut voir l'encodage complet avec $ locale chez moi c'est fr_CH.UTF-8 c'est vraiment ce cractère #160 qui pose problème. en faisant un echo -e $humanized dans functions.js du plugin wunderground on peut le voir.
Ca marche très bien chez moi, fais-moi un petit asciinema stp en montrant ta fonction et le résultat merci:
pi@jarvis:~/jarvis $ cat my-functions.sh
my_test() {
say "avec un espace "
}
pi@jarvis:~/jarvis $ cat jarvis-commands
*TEST*==my_test
pi@jarvis:~/jarvis $ ./jarvis.sh -x "test"
Jarvis: avec un espace
pi@jarvis:~/jarvis $ ls /dev/shm/avec*
/dev/shm/avec_un_espace.mp3
en faisant un echo -e $humanized dans functions.js du plugin wunderground on peut le voir.
Merci, je regarde...
Perso je suis en en_GB.UTF-8
pour tout te dire, je suis non-voyant et j'utilise un logiciel de synthèse vocale. c'est pour cette raison que je peux voir (entendre) ce cractère spécial et avoir sa coorespondance ascii. visuellement je sais pas du tout ce que ça donne.
J'ai reproduis l'erreur!!!!! Enfin je vais pouvoir avancer!
@Xavier74 j'arrive pas à le croire!!!! comment peux-tu faire du développement en étant non-voyant... ne serait-ce que pour lire, appréhender, exploiter et copier ici les logs du terminal sans même voir le curseur... alors là il faut que tu nous expliques!!
C'est pas vraiment l'endroit pour en parler mais oui c'est bien vrai, la synthèse vocale, au même titre que le braille pour d'autres (moi ce n'est pas mon truc) permet d'avoir un retour de tout ce qui est textuel sur l'écran, ligne par ligne, mot par mot, caractère par caractère... et un contrôle plus précis sur tout ce qui entour le texte, sa police, sa couleur, la taille. j'ai grandi là dedans car je suis informaticien et j'adore le développement entre autres, donc ce n'est vraiment pas un problème à ce niveau. mais tout n'est pas évident, par exemple l'indentation est très difficilement gérable.
@alexylem: Super, comment la reproduis-tu ?
@Xavier74: Est-ce qu'il y a une façon d'indenter qui peur t'aider ?
Non pas vraiment. en général je n'indente pas pendant la programmation et je le fais au dernier moment, si je dois partager le code. si ça reste pour moi je ne le fais pas. sinon il faut utiliser un programme qui le fait automatiquement, c'est assez pratique quand le code est bien fait à la base, mais il peut y avoir des ratés quand même. certains indentent avec des tab, d'autres 2 espaces, d'autres trois...
@Oliv4945 J'ai réussi à reproduit avec le plugin weather_wunderground, mais le caractère ne s'affiche pas chez moi (OSX). Le problème n'est pas du tout au niveau de jv_sanitize
mais dans google_TTS
car cet espace génère plusieurs curl
(comme s'il y avait plusieurs phrases à synthétiser) et seule le premier bloc est enregistré dans le fichier (qui est aussi tronqué).
Comme je n'arrive pas à afficher ce caractère, grâce aux inputs de @Xavier74 j'ai réussi à créer ce cas pour reproduire avec un simple say
:
./jarvis.sh -vs "$(printf 'a\xC2\xA0b')"
Je travaille sur cette base pour le fix.
J'ai trouvé une solution, bientôt sur beta
pour que vous testiez...
Implémenté sur la branch beta
. Pour le tester dès à présent:
Menu Settings > General > Branch > beta
Sinon attendre la mise à jour de ce weekend.
Autre erreur pour moi
Xavier: quelle est la météo demain symba: Je regarde... sed: -e expression n°1, caractère 0: pas d'expression régulière précédente symba: play FAIL formats: can't open input file `/dev/shm/.mp3':
OK c'était de ma faute, j'avais fais des tests et il restait des traces. clean & OK maintenant.
bon travail, merci :)
@Jean-Bernard-Hallez si tu as toujours un pb sur tes plugins sur la branch beta, merci de créer un nouveau ticket avec un exemple simple pour que je puisse le reproduire de mon côté.
Je ne suis pas à mon domicile... a suivre... chapeau à vous tous en tout cas...
Bonjour,
Depuis la mise à jour que j'ai faite aujourd'hui, peut-être que ça date de plusieurs jours, impossible d'obtenir la lecture de fichiers trop long par le tts. Par exemple pour obtenir la météo symba: Waiting to hear 'symba'
Xavier: symba
symba: Oui?
Xavier: quelle est la météo pour demain
symba: je regarde...
symba: dimanche
Partiellement nuageux. Maximales : 19 degrés. Vents soufflant de 10 à 15 Kilometre par heure .
play FAIL formats: can't open input file `degres_vents_soufflant_de_10_a_15__kilometre_parheure.mp3': No such file or directory
ERROR: play command failed
HELP: Verify your speaker in Settings > Audio > Speaker
Rien dans /dev/shm hors mis dimanche, et quand je tente de faire un play /dev/shm/dimanche j'obtient play FAIL formats: can't determine type of file `/dev/shm/dimanche' et il n'a donc pas l'extension mp3.