alexylem / jarvis

Jarvis.sh is a simple configurable multi-lang assistant.
http://openjarvis.com
MIT License
800 stars 198 forks source link

Je cherche à arrêter une musique lancée avec JARVIS par la voix + comment fonctionne les hooks? #767

Open Astryder opened 6 years ago

Astryder commented 6 years ago

Bonjour à tous,

Tout d'abord je remercie la communauté et le créateur de JARVIS sans qui je n'aurai pu découvrir les joies de la reconnaissance vocale via le Rpi.

Je suis aujourd'hui confronté à une difficulté qui tourne autour de plusieurs topics (#80 pour ne citer que lui) mais sans que celle-ci ne semble avoir trouver une réponse explicite pour un débutant, sauf erreur de ma part.

Je cherche uniquement à arrêter une musique lancée avec JARVIS.

J'ai bien lu comment lancer une musique et tout se passe bien. Toutefois, une fois lancée, plus rien ne peut arrêter cette musique jusqu'à ce qu'elle ne soit terminée. La musique semble prioritaire par rapport à JARVIS.

J'ai donc eu l'idée de la lancer en tant que tâche de fond au moyen de la fonction screen.

Néanmoins, rien ne va plus lorsque je cherche à arrêter le processus aplay via un "kill" par exemple commandé par la voix.

En effet, dès que je demande à JARVIS d'arrêter la musique, au moment de sa réponse, il m'indique que le matériel est déjà utilisé et me renvoie une erreur : play FAIL formats: can't open output file `default': snd_pcm_open error: Device or resource busy

Je crois que les hooks peuvent être utilisés pour palier ce problème mais je ne sais pas du tout comment cela fonctionne...

j'ai tenté de lancé jarvis.sh -km comme préconisé dans le topic #80 mais maintenant JARVIS refuse de me répondre...

Le plugin youtube est confronté au même problème...

Avez-vous une solution à m'apporter, je suis perdu...

Merci d'avance

Astryder

Sh1n1x commented 6 years ago

Salut, J'avais le même soucis tous les plugins ont le même soucis et on peut dire que tu as du bol ^^ je viens d'ajouter mon plugin youtube sur le site qui n'a pas se bug.

Pour faire simple la musique se lance en tâche de fond grâce à un fichier shell. C'est le seul moyen que j'ai trouvé...

Astryder commented 6 years ago

Merci beaucoup ! Il va falloir que je teste ça !

Par contre, du coup, est-ce que tu as une idée pour lancer une musique et l'arrêter outre ton plugin youtube corrigé?

Et sais-tu comment fonctionne les hooked? Ca semble être la clef pour pas mal de problème :)

Oliv4945 commented 6 years ago

Salut,

Une autre solution consiste à utiliser Pulse Audio, j'ai fait une branche ici si tu veux tester.

@Sh1n1x : Le fond du problème est qu'Alsa n'est pas capable de gérer deux sources audio, Pulse Audio est une des solutions capable de se placer avant pour faire le mixer. Sais-tu commence fait cvlc ?

Astryder commented 6 years ago

Je viens de tester le nouveau plugin et après avoir ajouté la clé API et m'être enregistré sur google plaform (+ inscription de ma carte bleue), mon Rpi reste malgré tout muet...

Il dit bien, je lance "le titre de la chanson" mais c'est tout...

Pourtant, mon projet est bien activé...

Sh1n1x commented 6 years ago

@Oliv4945 Pour VLC je ne sais pas du tout comment il fonctionne, mais du coup j'arrive sans problème à balancer plusieurs sources audio, alors ça me va ^^

@Astryder difficle comme ça, démarre Jarvis en mode Debug et colle les messages d'erreur :)

Astryder commented 6 years ago

@Sh1n1x , merci encore pour ton aide. Je te colle donc le code que me donne JARVIS, juste après avoir donné ma phrase. lance petit papa noel

nicolas: (listening...) DEBUG: start_speaking hook "" utils/timeout.sh 10 rec -V1 -q -r 16000 -c 1 -b 16 -e signed-integer --endian little /dev/shm/jarvis-record.wav gain 7 silence 1 0.1 4.1% 1 0.5 4.1% pad 0.5 0.5 trim 0 5 DEBUG: speech duration was 30 (10 = 1 sec) DEBUG: stop_listening hook DEBUG: curl https://speech.platform.bing.com/recognize/query?version=3.0&requestid=6c9ea584-77a0-4550-8d58-c1a7feffa2e8&appid=D4D52672-91D7-4C74-8AD8-42B1D98141A5&format=json&locale=fr-FR&device.os=linux&scenarios=ulm&instanceid=E043E4FE-51EF-4B74-8133-B728C4FEA8AA&result.profanitymarkup=0 DEBUG: json={"version":"3.0","header":{"status":"success","scenario":"ulm","name":"lance la musique petit papa noël","lexical":"lance la musique petit papa noël","properties":{"requestid":"c1cb2804-88e9-43f2-8648-5581d03c72b7","HIGHCONF":"1"}},"results":[{"scenario":"ulm","name":"lance la musique petit papa noël","lexical":"lance la musique petit papa noël","confidence":"0.9509749","properties":{"HIGHCONF":"1"}}]} lance la musique petit papa noël $> echo "$(jv_pg_yt_ms_pl_search "${BASH_REMATCH[1]}")"

Je pense qu'il n'y a que la dernière ligne qui t'intéressera.

Néanmoins, je ne vois pas d'erreur apparente.....

Pourtant, Jarvis me répond bien.

Il me dit: je lance la musique petit papa noel, musique pour enfant.

Il doit donc bien se rendre sur Youtube pour cela mais après avoir fait plein de tests, JARVIS reste muet.

J'ai pourtant mis la clef API et activé le projet dans le google développement.

Après, cela n'a pas été très facile de le faire mais je ne pense pas avoir fait d'erreur.

Tu remarqueras sur l'image ci-dessous que j'ai envoyé quelques requêtes mais cela n'a pas fonctionné...

api

Sh1n1x commented 6 years ago

@Astryder effectivement l'api fonctionne bien puisqu'il te retrouve le nom de la musique. Il dois y avoir une dépendance qui n'est pas installée sur ton rasp,

Essaie cette commande : cvlc --no-video https://www.youtube.com/watch?v=p41FBlsE2KA

Normalement la musique ne va pas se lancer chez toi (juste pour être sûr que le soucis vient bien du player).

EDIT: Ah mais attend, jarvis ne te réponds pas ? Je ne vois pas sa phrase.

Astryder commented 6 years ago

Si si, il me répondait via le haut parleur.

Par contre effectivement rien n'apparaissait dans le cmd...

cvlc semble être une dépendance de vlc.

Je l'installe et je te redis ça :)

Astryder commented 6 years ago

alors la commande marche mais j'ai plein d'erreur, c'est normal?

Je teste avec le plugin ce soir ou demain :)

et c'est pas mal saccadé, la connexion internet? je suis pourtant à la fibre...

pi@raspberrypi:~$ cvlc --no-video https://www.youtube.com/watch?v=p41FBlsE2KA VLC media player 2.2.6 Umbrella (revision 2.2.6-0-g1aae78981c) [02021948] pulse audio output error: PulseAudio server connection failure: Connection refused [0203fc18] dummy interface: using the dummy interface module... [02025a80] core playlist: stopping playback [75304300] core input error: ES_OUTSET(GROUP_)PCR is called too late (pts_delay increased to 1000 ms) [75304300] core input error: ES_OUT_RESET_PCR called [75304300] core input error: ES_OUTSET(GROUP_)PCR is called too late (pts_delay increased to 4730 ms) [75304300] core input error: ES_OUT_RESET_PCR called [75304300] core input error: ES_OUTSET(GROUP_)PCR is called too late (jitter of 11574 ms ignored) [02021948] alsa audio output error: cannot estimate delay: Relais brisé (pipe) [75304300] core input error: ES_OUTSET(GROUP_)PCR is called too late (pts_delay increased to 5456 ms) [75304300] core input error: ES_OUT_RESET_PCR called

Sh1n1x commented 6 years ago

Étonnant sur mes deux raspberry tout fonctionne nickel c'est fou. Apparemment raspberry et vlc n'aime pas pulse audio je crois que moi je l'ai pas installé. Check les solutions ici : https://www.raspberrypi.org/forums/viewtopic.php?t=29403

Astryder commented 6 years ago

on avance !

alors en suivant tes conseils, je me suis reporté sur le site que tu m'as proposé.

J'ai donc modifié la 6ème ligne de ton fichier function.sh par la ligne suivante

nohup youtube-dl --max-downloads 1 --format mp4 --output "/tmp/$1_audio.mp4" "gvsearch1:$1" --exec "cvlc -A alsa,none --alsa-audio-device default=hw=$var_jv_pg_yp_audio_card.$var_jv_pg_yp_audio_peripheral \"/tmp/$1_audio.mp4\"; rm \"/tmp/$1_audio.mp4\"" >/dev/null 2>/dev/stdout & disown

le mplayer est donc remplacé par cvlc etc...

la musique se lance super bien, rien de saccadé.

Toutefois, j'ai à nouveau le problème du début, à savoir que Jarvis ne semble pas en mode écoute une fois la musique en route... j'ai rajouté un pkill vlc à la liste dans ton fichier function.sh mais rien n'y fait...

Jarvis ne me donne rien en Troublemode

Toutefois, lorsque je mets la ligne directement dans le cmd, il m'indique ceci.

cvlc -A alsa,none --alsa-audio-device default https://www.youtube.com/watch?v=1SCoZBgysUQ VLC media player 2.2.6 Umbrella (revision 2.2.6-0-g1aae78981c) [004facc0] dummy interface: using the dummy interface module... [004d9a90] core playlist: stopping playback Failed to open VDPAU backend libvdpau_nvidia.so: Ne peut ouvrir le fichier d'objet partagé: Aucun fichier ou dossier de ce type Failed to open VDPAU backend libvdpau_nvidia.so: Ne peut ouvrir le fichier d'objet partagé: Aucun fichier ou dossier de ce type [6c900c80] xcb_xv vout display error: no available XVideo adaptor [71c058c8] avcodec decoder error: more than 5 seconds of late video -> dropping frame (computer too slow ?)

Il y a peut-être un rapport?

Pour ce qui est du "too slow", c'est pas trop grave, il s'agit de la vidéo qui rame mais l'audio ne rame pas du tout :)

Merci par avance

Sh1n1x commented 6 years ago

Oula ça c'est de la commande de compète xD.

Je pense que jarvis n'est pas en écoute parce que il reste croché sur la commande que tu as changé essaie en ajoutant "--play-and-exit" logiquement ça devrait fonctionner.

Le 20 déc. 2017 21:28, "Astryder" notifications@github.com a écrit :

on avance !

alors en suivant tes conseils, je me suis reporté sur le site que tu m'as proposé.

J'ai donc modifié la 6ème ligne de ton fichier function.sh par la ligne suivante

nohup youtube-dl --max-downloads 1 --format mp4 --output "/tmp/$1_audio.mp4" "gvsearch1:$1" --exec "cvlc -A alsa,none --alsa-audio-device default=hw=$var_jv_pg_yp_audio_card.$var_jv_pg_yp_audio_peripheral "/tmp/$1_audio.mp4"; rm "/tmp/$1_audio.mp4"" >/dev/null 2>/dev/stdout & disown

le mplayer est donc remplacé par cvlc etc...

la musique se lance super bien, rien de saccadé.

Toutefois, j'ai à nouveau le problème du début, à savoir que Jarvis ne semble pas en mode écoute une fois la musique en route... j'ai rajouté un pkill vlc à la liste dans ton fichier function.sh mais rien n'y fait...

Jarvis ne me donne rien en Troublemode

Toutefois, lorsque je mets la ligne directement dans le cmd, il m'indique ceci.

cvlc -A alsa,none --alsa-audio-device default https://www.youtube.com/watch?v=1SCoZBgysUQ VLC media player 2.2.6 Umbrella (revision 2.2.6-0-g1aae78981c) [004facc0] dummy interface: using the dummy interface module... [004d9a90] core playlist: stopping playback Failed to open VDPAU backend libvdpau_nvidia.so: Ne peut ouvrir le fichier d'objet partagé: Aucun fichier ou dossier de ce type Failed to open VDPAU backend libvdpau_nvidia.so: Ne peut ouvrir le fichier d'objet partagé: Aucun fichier ou dossier de ce type [6c900c80] xcb_xv vout display error: no available XVideo adaptor [71c058c8] avcodec decoder error: more than 5 seconds of late video -> dropping frame (computer too slow ?)

Il y a peut-être un rapport?

Pour ce qui est du "too slow", c'est pas trop grave, il s'agit de la vidéo qui rame mais l'audio ne rame pas du tout :)

Merci par avance

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/alexylem/jarvis/issues/767#issuecomment-353173978, or mute the thread https://github.com/notifications/unsubscribe-auth/ABkjmMM8oHbGTT5Mvre5q4hBxDjGdK4Cks5tCW39gaJpZM4REccE .

Astryder commented 6 years ago

malheureusement en faisant exactement ça:

cvlc -A alsa,none --play-and-exit --alsa-audio-device default =hw=$var_jv_pg_yp_audio_card.$var_jv_pg_yp_audio_peripheral \"/tmp/$1_audio.mp4\"; rm \"/tmp/$1_audio.mp4\"" >/dev/null 2>/dev/stdout & disown }

cela n'a malheureusement rien changé...

Et avec les hooks (que je ne sais pas du tout m'en servir), on n'y arriverait pas? D'après les instructions du site, cela servirait à ça.

Astryder commented 6 years ago

mais toi, du coup, tu utilises mplayer et non vlc?

et tu m'as dit que tu n'avais pas pulse audio (c'est un driver audio?), tu as quoi à la place?

enfin, j'ai remarqué que le plugin ramait pas mal suivant la musique sur Youtube. IL n'y a pas moyen de régler la qualité au minimum de la vidéo ou/et du son rendu?

ingénieur informaticien de Michel passe niquel mais bon appétit de katy perry beaucoup moins (ça lag beaucoup :)

Sh1n1x commented 6 years ago

Non c'est alsa le driver PulseAudio permet juste de gérer le son entre le driver et le logiciel (ici cvlc) et non je ne l'ai pas installé sur mon raspberry car je n'en ai pas l'utilité.

Non j'avais essayé de faire le plugin avec mplayer mais j'ai jamais réussi. Vlc m'a permis de le faire fonctionner sans soucis grâce aux commande no-video et play exit.

Peut être qu'avec des hooks on pourrait le faire mais je connais pas du tout donc je l'ai fait avec nohup (qui te permet de lancer un processus en tâche de fond).

Ce qui est étrange c'est que je viens dinstaller pulse audio et même avec tout fonctionne correctement. J'ai testé sur mon deuxième raspberry et ça fonctionne aussi. Tu dois avoir quelque chose qui interfère avec mais je vois pas quoi.

As tu essayé de lancer juste cette commande : nohup cvlc --play-and-exit --no-video https://www.youtube.com/watch?v=LU55Flooj3Y

Ps: ton soucis de musique qui ram c'est parce que tu n'as pas mis l'option no-video du coup ça fait ramer le pauvre petit raspberry. Chez moi avec cette option j'ai rien qui rame.

Sh1n1x commented 6 years ago

Euh attends je viens de check ta commande de plugin mais tu utilise quel plugin Youtube ? Parce que j'ai l'impression que tu utilise l'autre pas le miens ^^.

Astryder commented 6 years ago

Alors, je reviens avec une bonne et une mauvaise nouvelle.

La bonne est que tu avais raison.... je n'avais pas remarqué que j'étais sur le mauvais plugin mais après fait ce qui étaient préconisés sur le site que tu m'as communiqué, j'ai dû me rendre à l'évidence qu'il fallait que je formate ma Rpi...

Il y avait toujours une erreur et je ne voyais pas d'où elle pouvait provenir.

Ainsi, après avoir reformaté ma carte et mis l'essentiel à savoir: Jarvis, vlc et ton plugin tout fonctionne.

Je peux donc lui dire "arrête la la musique" et le processus de vlc cesse de fonctionner.

La mauvaise est que je reste néanmoins confronté à une difficulté: la musique est saccadée lorsque je lance la musique SANS la vidéo.

Lorsque j'efface de la ligne de commande dans le fichier "launch_music.sh le "no video", la musique n'est plus du tout saccadée mais la vidéo est lancée (saccadée) et pousse le CPU à 100%. CE qui est normal car le Rpi n'est pas assez puissant.

Ce fut le cas avec : lance la musique: "petit papa noel" ou "vive le vent"

J'ai le même résultat avec la commande suivante: cvlc --no-video https://www.youtube.com/watch?v=p41FBlsE2KA

et voici ce qui en ressort VLC media player 2.2.6 Umbrella (revision 2.2.6-0-g1aae78981c) [005b5710] pulse audio output error: PulseAudio server connection failure: Connection refused [005c6070] dummy interface: using the dummy interface module... [0059da80] core playlist: stopping playback [73a04020] core input error: ES_OUTSET(GROUP_)PCR is called too late (pts_delay increased to 1000 ms) [73a04020] core input error: ES_OUT_RESET_PCR called

Mais lorsque je lui demande des musiques dont la vidéo à la base est de mauvaise qualité du type "ingénieur informaticien" ou "tu pues le chat", le plugin non modifié fonctionne à merveille.

Ainsi, bénéficies-tu d'une optimisation particulière pour vlc pour que toutes les musiques que tu lui demandes se lancent sans saccade? Il faudrait voir s'il est possible de lancer toutes les vidéos en mauvaise qualité, non? J'ai vu sur des forums qu'il suffirait d'ajouter vq=small à la suite du lien youtube.

j'ai tenté de mettre cette ligne:nohup cvlc --play-and-exit https://www.youtube.com/watch?v=$1&vq=small

mais rien n'y fait...

Sh1n1x commented 6 years ago

OK bonne nouvelle ça avance ! Du coup petite question. Est ce que ton raspberry est lancé en mode screen ? Car c'est à mon avis ça le soucis. Moi je le lance sans écran donc uniquement en ligne de commande la vidéo ne peut du coup pas se lancer.

Le 22 déc. 2017 18:16, "Astryder" notifications@github.com a écrit :

Alors, je reviens avec une bonne et une mauvaise nouvelle.

La bonne est que tu avais raison.... je n'avais pas remarqué que j'étais sur le mauvais plugin mais après fait ce qui étaient préconisés sur le site que tu m'as communiqué, j'ai dû me rendre à l'évidence qu'il fallait que je formate ma Rpi...

Il y avait toujours une erreur et je ne voyais pas d'où elle pouvait provenir.

Ainsi, après avoir reformaté ma carte et mis l'essentiel à savoir: Jarvis, vlc et ton plugin tout fonctionne.

Je peux donc lui dire "arrête la la musique" et le processus de vlc cesse de fonctionner.

La mauvaise est que je reste néanmoins confronté à une difficulté: la musique est saccadée lorsque je lance la musique SANS la vidéo.

Lorsque j'efface de la ligne de commande dans le fichier "launch_music.sh le "no video", la musique n'est plus du tout saccadée mais la vidéo est lancée (saccadée) et pousse le CPU à 100%. CE qui est normal car le Rpi n'est pas assez puissant.

Ce fut le cas avec : lance la musique: "petit papa noel" ou "vive le vent"

J'ai le même résultat avec la commande suivante: cvlc --no-video https://www.youtube.com/watch?v=p41FBlsE2KA

et voici ce qui en ressort VLC media player 2.2.6 Umbrella (revision 2.2.6-0-g1aae78981c) [005b5710] pulse audio output error: PulseAudio server connection failure: Connection refused [005c6070] dummy interface: using the dummy interface module... [0059da80] core playlist: stopping playback [73a04020] core input error: ES_OUTSET(GROUP_)PCR is called too late (pts_delay increased to 1000 ms) [73a04020] core input error: ES_OUT_RESET_PCR called

Mais lorsque je lui demande des musiques dont la vidéo à la base est de mauvaise qualité du type "ingénieur informaticien" ou "tu pues le chat", le plugin non modifié fonctionne à merveille.

Ainsi, bénéficies-tu d'une optimisation particulière pour vlc pour que toutes les musiques que tu lui demandes se lancent sans saccade? Il faudrait voir s'il est possible de lancer toutes les vidéos en mauvaise qualité, non? J'ai vu sur des forums qu'il suffirait d'ajouter vq=small à la suite du lien youtube.

j'ai tenté de mettre cette ligne:nohup cvlc --play-and-exit https://www.youtube.com/watch?v=$1&vq=small

mais rien n'y fait...

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/alexylem/jarvis/issues/767#issuecomment-353640110, or mute the thread https://github.com/notifications/unsubscribe-auth/ABkjmHPN3AA5OMTXLomLjyV7iMni_l1vks5tC-PlgaJpZM4REccE .

Astryder commented 6 years ago

je viens de tester avec ton plugin originel: cvlc --no-video mais même en mode ligne de commande, la musique est saccadée.

As-tu testé les musiques que je t'ai proposé? Cela ne rame pas du tout?

Sh1n1x commented 6 years ago

Je viens de tester mais non ça rame pas du tout. Tu as un raspberry pi 3?

Astryder commented 6 years ago

oui oui bien sûr !

Astryder commented 6 years ago

mais bizarrement lorsque j enlève --no-video, cela ne rame plus du tout...

Oliv4945 commented 6 years ago

@Sh1n1x: Pourrais-tu vérifier que PulseAudio n'est pas installé sur ta machine ? sudo dpkg-query -l 'pulseaudio*' sudo dpkg-query -l 'libpulse0

Ce sujet est récurent depuis #80, et ça nous ferait tous plaisir que ça avance du coup je cherche à comprendre pourquoi ça fonctionnerai avec vlc sur ton rPi. :) Le top serait de pouvoir se passer d'un mixer tel que Jack ou PulseAudio mais Alsa n'accepte qu'une connexion en même temps, donc je ne suis pas sur que ce soit possible. Pour info j'ai modifié Jarvis pour utiliser PulseAudio et ça marche bien, en effet de bord on peut déporter le son/micro sur un autre PC mais je n'ai pas tenté sous rPi.

EDIT: Chez moi installer VLC installe aussi PulseAudio. Mystère résolu :)

Sh1n1x commented 6 years ago

@Oliv4945 Je l'avais effectivement réinstallé la dernière fois pour tester et tout fonctionnait, mais la semaine dernière j'avais la musique qui laggait/buggait et du coup je l'ai désinstallé et tout refonctionne parfaitement. A mon sens c'est bien PulseAudio le soucis.

J'ai bien pulseaudio désinstallé mais pas libpulse0

Sh1n1x commented 6 years ago

@Oliv4945 as-tu testé mon plugin ? parce que chez moi du coup je lance une musique et je continue à utiliser jarvis simultanément.

Oliv4945 commented 6 years ago

@Sh1n1x : non pas encore, mon Jarvis est off depuis mon déménagement, j'utilise un autre en ligne avec mon appli pour l'instant.

Il semblerait qu'il soit possible d'utiliser le plugin dmix d'Alsa, à voir si ça fonctionne aussi pour record & play