Changeur de voix amplifié utilisant un Raspberry Pi Zero

Changeur de voix amplifié utilisant un Raspberry Pi Zero

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.

Costume Mandalorien

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.

Système de changeur de voix

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

MChangeur de voix - Adaptateur audio USBy 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é

Changeur de voix - 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 et redémarrez le Pi lorsque vous y êtes invité.

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 :

Sortie lusb de l'adaptateur audio USB

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 ».

Liste des périphériques de lecture de l'adaptateur audio USB

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 ».

Adaptateur USB Aduio sortie alsamixer

À 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.

Changement de voix de l'adaptateur audio USB avec Play and Rec

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.