alexylem / jarvis

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

Autolevel et détection avec Matrix Voice #808

Open Knoppix1 opened 6 years ago

Knoppix1 commented 6 years ago

Bonjour,

Tout d’abord félicitation pour tout ce travail abattu sur Jarvis c'est un bel outils que j'ai pu découvrir avec l'arrivée (Enfin) de la Matrix Voice (un microarray de 8mic à 60$).

Après des déboires de lancement le produit est fonctionnel et fonctionne bien de loin ! Néanmoins nous sommes confronté a un soucis d'autolvel avec Jarvis et ce produit. Qui rend la détection désastreuse. Nous en parlons sur le ticket du MicArray a partir d'ici : https://github.com/alexylem/jarvis/issues/103#issuecomment-366470681

Ça viens peut être du produit mais avant j'ai une question, je vois que l'autolevel s'effectue à 48000hz alors que les enregistrements se font à 16000hz, y a t'il une raison à ça ? Car quand j'enregistre avec un arecord --device=mic_channel1 -r 48000 -c 1 -f S16_LE test.wav L'enregistrement est inaudible et métallique.

Je vous remercie d'avance pour vos réponses. Et de notre côté nous continuons nos investigations pour arrivé a faire fonctionner ce produit

Knoppix1 commented 6 years ago

Pour réglé mon pb d'autolevel j'ai du modifier le fichier /jarvis/utils/audio.sh Pour qu'au niveau du rec la fréquence soit 16k et le Chanel sur 1 (mono) rec -r 16k -c 1 $audiofile gain $gain trim 0.5 $duration # skip first 0.5 secs due to mic activation noise

J'ai pu ensuite faire un autolevel assez correct. est-ce viable comme solution, peut-elle etre intégré dans une futur mise a jour pour tout le monde ?

Par contre @mikevador02 remonte dans bizarrie dans ce script qui ont l'air de coincidé avec nos pb de détection lors de l'enregistrement je cite :

En fait lors de la vérification de la longueur du fichier la commande qui se trouve dans /jarvis/utils/audio.sh retourne une valeur qui n'est pas la bonne.

Chez moi il semble que lorsqu'il écoute et enregistre il fait un fichier au moins de 5 secondes. Lors du test de la commande qui se trouve ici: duration=$(sox $audiofile -n stat 2>&1 | sed -n 's#^Length^0-9.([0-9])*$#\1\2#p') il retourne au lieu de 5 une valeur de 50 qu'il extrait dans les metas du fichier audio (lenght 5.0000). La limite indiquée est de 40. (que j'ai augmentée pour tester) et là ça passe super.

J'ai voulu chercher plus loin j'ai retiré un point à la fin de la commande entre le \1.\2 (ligne 'duration=') chez moi ligne 133 duration=$(sox $audiofile -n stat 2>&1 | sed -n 's#^Length^0-9.([0-9])*$#\1.\2#p') Là il considère mon 5 secondes en float 5.0 et plus en 50.

Il y a beaucoup d'autres lignes avec la même commande dont je n'ai pas fait cette modif pour le moment.

Voilà je sais pas si c'est valable comme solution pour les autres cas d'utilisation mais je suppose que c'est un bug du à une mise à jour où autre qui fait que cette commande ne retourne pas la bonne valeur qui est sensée être des secondes et non le multiple de 10.

J'ai oublié de dire que j'ai un petit message : utils/audio.sh: line 135: [: 5.0: integer expression expected Il faudra adapter le retour de duration en integer :) J'ai ré adapté duration=$(sox $audiofile -n stat 2>&1 | sed -n 's#^Length^0-9.([0-9])*$#\1#p') en retirant le 2ieme paramètre pour éviter ce message.

Par contre j'ai l'impression qu'il envoi tout de même chaque fois l'audio même si on ne dis rien après avoir passé le magic_word. Peut être la reverb du son qui dis qu'il est en écoute qui reviens dans l'enregistrement je pense avoir vu un sleep 1 pour ce problème je verrai plutard.

Oliv4945 commented 6 years ago

@alexylem, si tu passes par là ?

wikijm commented 6 years ago

Bonjour @Knoppix1,

Le problème est-il toujours d'actualité ?