En recherchant des améliorations possibles pour le costume de chasseur de primes Star Wars de mon fils, je suis tombé sur un excellent article de blog de Dave Shevett sur Planet-Geek.com sur utiliser un Raspberry Pi pour créer un changeur de voix pour un déguisement d’halloween. Cela ressemblait à quelque chose que je pouvais intégrer dans notre casque de chasseur de primes construit avec amour.
Le système utilise SoX pour enregistrer le son via un microphone, le déformer puis l’envoyer à un haut-parleur amplifié.
J’ai récupéré le matériel et j’ai suivi les traces de Dave. Pour mon projet, j’ai décidé d’utiliser le Raspbian Lite et un Pi Zero W. Tout fonctionne donc cet article est présenté à tous ceux qui souhaitent faire quelque chose de similaire et peuvent trouver ces étapes utiles.
Matériel de changeur de voix
- Raspberry Pi Zero W
- adaptateur microUSB vers USB
- Concentrateur USB (facultatif)
- Clavier
- Adaptateur son USB
- Alimentation 5V
- Haut-parleur amplifié
Adaptateur audio USB
My Le dongle d’adaptateur audio USB était un « contrôleur audio CM108 de C-Media Electronics Inc ». Il dispose d’une prise USB standard, d’une prise microphone 3,5 mm et d’une prise casque 3,5 mm. À l’intérieur, il y a une LED rouge très brillante que j’ai apprivoisée avec du ruban électrique.
Il existe de nombreuses alternatives mais il est difficile de savoir à quel point elles sont compatibles avec le Pi. Ils sont disponibles à partir de [eBay] pour quelques $/£.
Haut-parleur amplifié
J’ai acheté un haut-parleur portable amplifié « N74 » auprès de [eBay] pour 20 £. Il dispose d’une batterie rechargeable intégrée, d’une prise d’entrée et est livré avec deux microphones. J’avais besoin de déterrer un adaptateur secteur 5V pour le recharger.
Configuration
Pour commencer, créez une nouvelle carte microSD de 4 Go en utilisant la dernière image Raspbian Lite. Le Pi Zero doit être connecté à un moniteur HDMI et à un clavier à l’aide d’adaptateurs appropriés. Lorsque le Pi démarre pour la première fois, connectez-vous avec le nom d’utilisateur et le mot de passe par défaut (pi/raspberry).
Lancez l’utilitaire de configuration :
sudo raspi-config
et effectuez les modifications de paramètres suivantes :
- Nom d’hôte > « VoiceChanger »
- Options de démarrage > Bureau/CLI > Connexion automatique à la console
- Options de démarrage > Attendre le réseau au démarrage > Non
- Options d’interfaçage > SSH > Oui
- Options avancées > Développer le système de fichiers
Sélectionnez
Configurer le Wi-Fi (facultatif)
Connecter le Pi à un réseau vous permet de faire le reste de la configuration en utilisant SSH sur un PC. Cela économise un peu de frappe car vous pouvez couper-coller du texte et transférer des fichiers.
Pour configurer le WiFi éditez le fichier wpa_supplicant.conf :
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
Il doit déjà contenir :
ctrl_interface=/var/run/wpa_supplicant update_config=1
puis insérez :
network={ scan_ssid=1 key_mgmt=WPA-PSK WPA-EAP psk="1234567890" ssid="MyWIFISSID" }
Utilisez votre propre mot de passe et SSID. Vérifiez les valeurs, enregistrez (CTRL-X, Y) et revenez à la ligne de commande.
Connecter un périphérique audio USB
Arrêtez le Pi en utilisant :
sudo halt
et débranchez l’alimentation.
Si vous disposez d’un concentrateur USB, vous pouvez connecter à la fois le clavier et le dongle audio USB en même temps. Si vous envisagez de vous connecter au Pi à l’aide de SSH, vous n’avez pas besoin du concentrateur et remplacez le clavier par le dongle audio USB.
Rebranchez l’alimentation et laissez le Pi démarrer. Avec un peu de chance, votre Pi sera connecté au WiFi et SSH sera activé.
Vérifier le périphérique audio USB
Une fois démarré, connectez-vous au Pi à l’aide de n’importe quel utilitaire de terminal SSH (tel que Putty ou MobaXterm). Ou utilisez le clavier si vous l’avez toujours attaché.
Vérifiez maintenant que le périphérique audio USB a été détecté :
lsusb
Vous devriez voir le périphérique audio répertorié avec tous les autres périphériques USB connectés :
Plus d’informations sur l’adaptateur peuvent être consultées en utilisant :
dmesg | grep C-Media
Pour connaître le numéro de carte de l’appareil, utilisez :
aplay -l
L’appareil doit être répertorié comme « carte 1 ».
Créez le fichier « asoundrc » en utilisant :
sudo nano .asoundrc
et ajoutez le texte suivant :
pcm.!default { type hw card 1 } ctl.!default { type hw card 1 }
Cela indique au système d’utiliser la carte 1 comme entrée et sortie audio par défaut.
Une fois le fichier sauvegardé (CTRL-X, Y) vous pouvez à tout moment en vérifier le contenu en utilisant :
cat .asoundrc
Installer SoX
Afin d’utiliser l’utilitaire « play », nous devons installer « SoX » :
sudo apt-get install sox
Installer mpg123 (facultatif)
Pour permettre au système de lire les fichiers MP3, j’ai également installé mp123 mais c’est facultatif.
sudo apt-get install mpg123
Vous pouvez lire des fichiers MP3 en utilisant :
mpg123 mysong.mp3
Alsamix
Pour vérifier que le haut-parleur et le microphone ne sont pas coupés, vous pouvez exécuter Alsamixer en utilisant :
alsamixer
Cela devrait vous montrer une jauge pour « Speaker », « Mic » et « Auto Gain Control ».
À l’aide des touches fléchées, vous pouvez régler le gain des deux canaux et activer ou désactiver le gain automatique. Un canal peut être mis en sourdine à l’aide de la touche M. « MM » apparaît si le canal est coupé. Appuyez sur « Echap » pour revenir à la ligne de commande.
Test du haut-parleur
Avec un casque ou un haut-parleur attaché au dongle, vous pouvez utiliser l’utilitaire de test de haut-parleur simple :
speaker-test -c2
ou alors
speaker-test -c2 -t sine -f 500
Vous devriez entendre un bruit blanc ou une tonalité de 500 Hz à travers votre haut-parleur. Appuyez sur CTRL-Z pour quitter le test.
Redémarrer
Comme vous avez installé certains packages et modifié le fichier .asoundrc, redémarrez pour vous assurer que toutes les modifications sont actives. La commande speaker-test peut parfois entraîner des erreurs « Device or reource busy » donc un redémarrage utile à ce stade :
sudo reboot
Lecture de fichiers WAV (facultatif)
Presque là! Si vous souhaitez lire un fichier WAV de test, vous pouvez télécharger un fichier de test en utilisant :
wget http://www.kozco.com/tech/piano2.wav
puis jouez avec :
play piano2.wav
Changement de voix à l’aide de SoX
En utilisant la méthode de Dave Shevett, vous pouvez changer dynamiquement votre voix en utilisant :
play "|rec --buffer 2048 -d pitch -300 echos 0.8 0.88 100 0.6 150 .5 band 1.2k 1.5k"
Cela traite les données du canal du microphone à l’aide de « rec » et les transmet à « play » qui envoie le résultat au haut-parleur.
- amortir permet au flux de collecter les données du microphone à traiter avant de les envoyer au haut-parleur. Cela ajoutera un peu de retard. Vous pouvez réduire le nombre mais le tampon peut déborder s’il ne peut pas suivre.
- terrain réduit la hauteur de la voix
- échos ajouter des échos (vous l’avez déjà deviné, non ?)
- bande ajoute un filtre centré sur 1,2 kHz avec une pente de 1,5 Hz de chaque côté.
Toutes les options SoX sont détaillées sur la page des options SoX.
Vous pouvez jouer avec les options et les valeurs pour obtenir différents effets.
Démarrage automatique au démarrage
Si vous souhaitez que le changeur de voix soit portable, vous pouvez configurer un script pour exécuter automatiquement la commande de lecture lorsque le Pi démarre. Cela peut être fait en configurant une tâche cron.
Nous devons d’abord créer un script :
nano voicechanger.sh
puis collez la commande play :
play "|rec --buffer 2048 -d pitch -300 echos 0.8 0.88 100 0.6 150 .5 band 1.2k 1.5k"
Accédez aux paramètres de cron pour l’utilisateur Pi en utilisant :
crontab -e
Sélectionnez « nano » s’il demande un éditeur de texte. Ajoutez ensuite la ligne suivante :
@reboot sh /home/pi/voicechanger.sh > /home/pi/voicechanger.log 2>&1
Enregistrez et quittez en utilisant CTRL-X, Y.
Lors du prochain redémarrage, la commande de lecture devrait être exécutée automatiquement.
Dernières pensées
Une chose sur laquelle j’ai perdu beaucoup de temps était la connexion du microphone au périphérique audio USB. Si la prise jack 3,5 mm était enfoncée à fond dans la prise, le microphone ne fonctionnait pas. J’ai passé des siècles à me demander pourquoi cela ne fonctionnait pas jusqu’à ce que je le retire légèrement, que la connexion soit établie et que le microphone fonctionne comme prévu.
À certains égards, le changeur de voix a très bien fonctionné, mais ne sonnait pas tout à fait comme je m’y attendais. J’ai finalement décidé de ne pas utiliser le changeur de voix parce que la vraie voix de mon fils était tout simplement trop évidente en arrière-plan. J’avais parcouru beaucoup de terrain à ce stade, alors j’ai décidé de l’écrire quand même au cas où quelqu’un d’autre le trouverait utile.