1. Introduction

Depuis bien des années, mon entourage a toujours trouvé très amusant la manière avec laquelle je suis capable de parler, presque tenir une discussion lors de mon sommeil. Mon frère peut citer un grand nombre de répliques sorties en plein sommeil, toutes aussi insolites les unes que les autres. Je me suis donc souvent posé des questions sur la possibilité d’enregistrer ma somniloquie sans pour autant avoir à analyser un enregistrement d’une nuit complète le matin, ce projet d’informatique est donc pour moi l’occasion idéale de tenter de créer un artéfact me permettant de comprendre ce qui fait tant rire ma famille et mes amis.

Le système que je cherche à créer se rapproche fortement des outils qui captent les ronflements d'un individu, lui envoyant au passage une petite décharge électrique, seulement ici au lieu des ronflements, on cherche à capter la parole et au lieu d'envoyer une charge à l'utilisateur on lance un programme qui enregistre tout ce qu'il dit.

Étant donné que c’est ma première expérience de ce genre, je peux me permettre de prédire qu’un tel sujet me sera compliqué à réaliser, surtout en matière de code.

2. Matériel et méthodes

2.1 Matériel

  • 1x Raspberry Pi 3 (Modèle B)
  • 1x Breadboard
  • 1x Micro à électrets (amplifié)
  • 1x Micro USB Samson Meteorite (http://www.audiosource.ch/micros/micros-usb/meteorite.html)
  • 1x MCP3008 8-Channel 10-Bit ADC With SPI Interface
  • 13x Cables

2.2 Méthode

Tout d'abord il faut commencer par configurer le son du Pi:

1. Installer des libraries (Also, mpg321 et lame)

   $ sudo apt-get install alsa-utils
   $ sudo apt-get install mpg321
   $ sudo apt-get install lame

2. Charger le driver

   $ sudo moi-robe snd_bcm2835

3. S’assurer de pouvoir trouver le bon driver

   $ sudo lsmod | grep 2835

4. Pour cette partie, pour choisir la sortie analog (jack) utiliser un 1 , pour la sortie HDMI utiliser un 2. Pour que le choix soit fait automatiquement utiliser 0

   $ sudo amixer cset numid=3 1

5. Il est temps de tester le son. Pour cela télécharger un fichier mp3

   $ wget https://goo.gl/XJuOUW -O example.mp3 --no-check-certificate

Puis le jouer:

   $ aplay example.mp3

2.2.1 Microphone USB

La solution du microphone USB semble être la plus simple sachant qu'elle nous permet de sauter tout la partie de code pour l'acquisition qui est gérée par le micro, ce qui n'est pas le cas avec le micro à électrets.

Etape 1: Vérifier si le micro est détecté

   $ cat /proc/bus/input/devices

Puis rechercher votre micro dans la liste de:

   $ lsusb —verbose | less

Etape 2: S’assurer que ALSA détecte le micro Pour voir si le microphone USB est détecté et installé, essayer:

   $ cat /proc/asound/cards

puis

   $ cat /proc/asound/pcm

OU

   $ arecord —list-devices

Etape 3: Régler le volume et d’autres contrôles pour votre micro USB

   $ alsamixer -c #si votre micro a le numéro de carte 1 dans « arecord —list-devices »

Etape 4: Enregistrer avec ALSA

Entrer:

   $ arecord /home/pi/Desktop/a.wav -D sysdefault:CARD=1

Parler dans le micro

Attendre ~6 secondes avant d’interrompre l’enregistrement (CTRL+C)

Pour écouter l’enregistrement:

   $ aplay /home/pi/Desktop/a.wav

2.2.2 Microphone à électrets

Voici le schéma du branchement pour le micro à électrets et le ADC:

J'ai décidé de laisser cette partie du projet de coter le temps de gérer la partie du code concernant le traitement des données. J'espère tout de même pouvoir revenir sur cette partie afin de traiter l'acquisition une fois le reste terminé.

3. Résultats

Après l'achat du micro Samson Meteorite, j'ai tout de suite pu m'enregistrer et écouter mes enregistrements à l'aide des commandes "arecord" et "aplay" qui sont reliées au programme ALSA (Advanced Linux Sound Architecture). J'ai ensuite entrepris de rechercher un moyen de faire en sorte que le Pi puisse analyser le son en continu afin de déterminer si il entend une voix ou nom et donc de lancer un enregistrement automatique. J'ai trouvé un code sur github qui semble avoir été écrit à cet effet, il permet aussi de transférer les enregistrements sur Google Speech mais j'ai décidé de laisser cette option de coter en attendant de réussir à faire une analyse, j'ai donc supprimé les lignes du code concernant ce transfert. Voici le code en question: http://pastebin.com/kiQQ14S8 Malheureusement lorsque j'exécute le code il semble y avoir un problème avec la librairie ALSA car je reçois ces messages d'erreur: http://pastebin.com/eTdEP0EX

4. Discussion

La solution du micro à électret serait la plus efficace voyant la différence de qualité de l'ampli entre ce dernier et le micro USB. Malheureusement l'utilisation d'un micro à électret nécessite plus de code sachant qu'il faut pouvoir coder toute la partie concernant l'acquisition; c'est pourquoi il est plus simple de commencer par utiliser le micro USB qui supprime cette partie de l'acquisition pour mieux se centrer sur la partie du code concernant le traitement. Cela n'empêche néanmoins pas de retourner sur l'option du micro à électrets après avoir terminé le projet avec un micro USB.

Avec du recul, je peux affirmer que mon idée était trop ambitieuse pour un premier projet. Le problème principal est que la difficulté n'était pas vraiment dans le Hardware, contrairement à ce qui était demandé, mais plutôt dans le code à réaliser qui nécessite des connaissances que je n'ai pas réussi à atteindre. En effet mon projet aurait demandé l'utilisation de Fast Fourier Transfer afin d'atteindre ce que j'avais initialement prévu. Malgré mes intentions je n'ai pas même réussi à lancer des enregistrements automatiques.

Un autre problème, tout aussi important, est le fait que je n'ai pas du tout su gérer mon temps. J'assume entièrement le fait que j'ai procrastiné pendant les premières semaines du projet ce qui m'a fait prendre un retard considérable, m'empêchant donc de rechercher plus de manières d'enregistrer automatiquement les voix.

Finalement, je pense que j'ai trop vite paniqué face aux difficultés des manoeuvres à entreprendre et que je suis resté bloqué trop simplement sur des problèmes au lieu de les contourner, c'est pourquoi j'ai commencé les essais avec le microphone USB trop tard, ce qui fait que je n'ai pas pu avancer que ce soit avec le micro à électrets ou avec celui USB

5. Conclusion

Malgré l'échec de mon projet, je pense que les erreurs que j'ai commises et toutes les recherches que j'ai dû faire pour avancer dans mon travail m'ont permis d'apprendre énormément sur le fonctionnement du Raspberry Pi et sur le langage de code Python. Je suis déçu de ne pas avoir eu le temps de terminer ce que j'avais commencé car je suis persuadé que j'aurais été capable de trouver des solutions à mes problèmes si j'avais pris plus de temps.