Avec ce dossier, on va fabriquer un enregistreur audio basĂ© sur Raspberry Pi, en Python 3, avec une carte son USB (un Raspberry Pi nâa pas dâentrĂ©e micro).
Dans le mĂȘme style, je vous ai dĂ©jĂ proposĂ© diffĂ©rents dossiers plus simples pour rĂ©aliser des boĂźtes Ă sons avec un âDF Playerâ, avec un âArduinoâ + âDF Playerâ, et avec un Raspberry Pi.
Comme toujours, si vous avez la moindre question, nâhĂ©sitez pas Ă me contacter !
Présentation
Le Raspberry Pi est un micro-ordinateur bon marchĂ© et trĂšs pratique pour lâaudio. Mais il y a un point Ă comprendre dĂšs le dĂ©part : le Raspberry Pi nâa pas dâentrĂ©e audio analogique. Il sait sortir du son, mais pas enregistrer un micro âen jackâ tout seul. Donc, pour enregistrer, il vous faut soit :
- un micro USB (le plus simple),
- ou une carte son USB avec entrée micro/line (souvent plus robuste et plus qualitative).
Lâavantage dâune carte son USB, câest que ça se branche, ça se remplace facilement, et ça vous laisse la libertĂ© de choisir le micro. Nâimporte quelle interface audio USB peut convenir, du petit dongle Ă 10⏠jusquâĂ une vraie interface studio.
Cependant, les mini âcartes son USBâ trĂšs basiques (les dongles Ă 2⏠à 10âŹ) fonctionnent, mais sont parfois bruitĂ©es, avec un gain micro mĂ©diocre. Si votre projet doit ĂȘtre propre, prĂ©voyez une interface correcte ou un micro USB de qualitĂ©.
CĂŽtĂ© logiciel, on va sâappuyer sur ALSA (le systĂšme audio Linux) et un script Python qui enregistre en WAV, avec un nom de fichier automatique (date/heure). On verra aussi comment lancer le script au dĂ©marrage, et comment dĂ©clencher lâenregistrement avec un bouton sur le GPIO.
Votre projet
Une idée d'installation : mon Sonomaton
Dâailleurs, fabriquer un enregistreur audio avec un Raspberry Pi est la base technique de mon installation sonore "Sonomaton" : Comme un traditionnel photomaton, le "Sonomaton" offre un espace d'expression libre, mais sonore. Car, au lieu de capturer les trombines, il enregistre les voix. Il fait partie de mes nombreuses installations sonores.
ConcrĂštement, il sâagit dâun combinĂ© tĂ©lĂ©phonique dont le haut-parleur et le micro sont reliĂ©s Ă une carte son, elle-mĂȘme reliĂ©e en USB Ă un Raspberry Pi. Le choix du combinĂ© tĂ©lĂ©phonique est pratique dans mon cas : il oblige les gens Ă Ă©couter les consignes et impose une distance constante vis-Ă -vis du microphone. Câest plus difficile Ă garantir avec un micro + casque âlibresâ.
Les gens dĂ©crochent et entendent un fichier dâintro leur proposant de rĂ©agir Ă lâun des trois thĂšmes (A, B ou C). Ils appuient sur lâun des trois boutons : le bouton sâillumine en rouge pour signifier que lâenregistrement a dĂ©marrĂ©. Une voix dĂ©crit ensuite la question en dĂ©tail et invite Ă parler. Ils peuvent changer de bouton/thĂšme ou raccrocher. Au raccrochage du combinĂ©, lâenregistrement sâarrĂȘte. Jâai poussĂ© les dĂ©tails assez loin, dont lâajout dâun voyant âON AIRâ qui sâallume au dĂ©crochage du combinĂ©, Ă lâextĂ©rieur de la cabine, pour indiquer quâelle est occupĂ©e.
Une fois le Sonomaton utilisĂ©, il ne me reste plus quâĂ rĂ©cupĂ©rer les fichiers dans les dossiers /A/, /B/ et /C/.
Ătape par Ă©tape
1. Préparation
Installez Raspberry Pi OS avec âRaspberry Pi Imagerâ (Windows, Mac, Linux) : page officielle.
Si vous débutez, installez une version avec interface graphique. Vous gagnerez du temps (et vous éviterez 90% des galÚres liées à une configuration au clavier).
2. Branchement et vérification de la carte son USB
Branchez votre micro USB ou votre carte son USB, puis ouvrez un terminal. Listez les pĂ©riphĂ©riques dâenregistrement :
arecord -l
arecord --list-pcms
Ces commandes permettent dâidentifier la carte et le pĂ©riphĂ©rique utilisĂ©s par ALSA.
3. Installation des outils (et la question âpipâ sur Raspberry Pi OS)
Mettez le systĂšme Ă jour :
sudo apt update
sudo apt full-upgrade -y
Installez ce quâil faut pour enregistrer en Python (dont PortAudio) :
sudo apt install -y python3-venv python3-pip portaudio19-dev libsndfile1
Le paquet portaudio19-dev est une dépendance classique pour les bibliothÚques audio Python (sounddevice, pyaudio, etc.).
Important : depuis Raspberry Pi OS âBookwormâ, Ă©vitez dâinstaller des bibliothĂšques avec pip dans le Python systĂšme. Utilisez un environnement virtuel (venv).
Créez un dossier de projet, puis un venv :
mkdir -p /home/LOGIN/sonomaton-rec
cd /home/LOGIN/sonomaton-rec
python3 -m venv .venv
source .venv/bin/activate
Installez les bibliothĂšques Python :
pip install sounddevice soundfile
4. Test rapide en ligne de commande (avant Python)
Avant dâaccuser Python, testez dĂ©jĂ que lâenregistrement fonctionne au niveau Linux. Exemple, 10 secondes en WAV stĂ©rĂ©o :
arecord -d 10 -c 2 -r 48000 -f S16_LE test.wav
Câest volontairement simple : si ça Ă©choue ici, votre problĂšme est la carte son, le micro, ou ALSA.
5. Programmation : un enregistreur WAV en Python
Ouvrez Thonny (ou un éditeur), et créez rec.py dans /home/LOGIN/sonomaton-rec.
import os
from datetime import datetime
import sounddevice as sd
import soundfile as sf
# Dossier de sortie
OUT_DIR = "/home/LOGIN/sonomaton-rec/records"
# Réglages audio (à adapter)
SAMPLE_RATE = 48000
CHANNELS = 1 # 1 = mono, 2 = stéréo
DURATION_S = 10 # durĂ©e dâenregistrement en secondes
# Optionnel : choisir un device précis
# Laissez à None pour le device par défaut ALSA
INPUT_DEVICE = None # exemple: 2 (index sounddevice)
def ensure_out_dir():
os.makedirs(OUT_DIR, exist_ok=True)
def filename():
ts = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
return os.path.join(OUT_DIR, f"rec_{ts}.wav")
def record_once():
ensure_out_dir()
path = filename()
print("Périphériques audio disponibles :")
print(sd.query_devices())
print(f"Enregistrement {DURATION_S}s -> {path}")
audio = sd.rec(
int(DURATION_S * SAMPLE_RATE),
samplerate=SAMPLE_RATE,
channels=CHANNELS,
device=INPUT_DEVICE,
dtype="int16",
)
sd.wait()
sf.write(path, audio, SAMPLE_RATE, subtype="PCM_16")
print("Terminé.")
if __name__ == "__main__":
record_once()
Ce script fait exactement ce quâon veut : un enregistrement WAV propre, horodatĂ©, dans un dossier dĂ©diĂ©.
Nâoubliez pas de remplacer LOGIN par votre nom dâutilisateur Raspberry.
6. Déclenchement avec un bouton GPIO (optionnel, mais trÚs utile)
Si vous voulez une logique âinstallationâ (un bouton, un enregistrement), le GPIO est parfait. Voici une version simple : un appui lance un enregistrement (et ignore les appuis pendant lâenregistrement).
import os
from datetime import datetime
import threading
import sounddevice as sd
import soundfile as sf
from gpiozero import Button, LED
OUT_DIR = "/home/LOGIN/sonomaton-rec/records"
SAMPLE_RATE = 48000
CHANNELS = 1
DURATION_S = 10
INPUT_DEVICE = None
btn = Button(17, pull_up=True) # bouton entre GPIO17 et GND
led = LED(27) # LED sur GPIO27 (avec résistance)
busy = False
def ensure_out_dir():
os.makedirs(OUT_DIR, exist_ok=True)
def filename():
ts = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
return os.path.join(OUT_DIR, f"rec_{ts}.wav")
def do_record():
global busy
if busy:
return
busy = True
led.on()
ensure_out_dir()
path = filename()
audio = sd.rec(
int(DURATION_S * SAMPLE_RATE),
samplerate=SAMPLE_RATE,
channels=CHANNELS,
device=INPUT_DEVICE,
dtype="int16",
)
sd.wait()
sf.write(path, audio, SAMPLE_RATE, subtype="PCM_16")
led.off()
busy = False
print(f"OK: {path}")
def on_press():
threading.Thread(target=do_record, daemon=True).start()
btn.when_pressed = on_press
print("PrĂȘt. Appuyez sur le bouton pour enregistrer.")
while True:
pass
Vous avez maintenant un âmagnĂ©tophoneâ minimal : bouton, LED, fichiers WAV horodatĂ©s. Câest typiquement le genre de base qui sert ensuite Ă construire une installation comme Sonomaton.
7. Autostart propre au démarrage (recommandé : systemd)
Pour une installation, vous ne voulez pas âouvrir Thonny et cliquer Runâ. Utilisez un service systemd, câest fait pour ça.
Créez un fichier de service :
sudo nano /etc/systemd/system/sonomaton-rec.service
Collez (en adaptant LOGIN et le nom du script) :
[Unit]
Description=Sonomaton Recorder
After=network.target sound.target
[Service]
Type=simple
User=LOGIN
WorkingDirectory=/home/LOGIN/sonomaton-rec
ExecStart=/home/LOGIN/sonomaton-rec/.venv/bin/python /home/LOGIN/sonomaton-rec/rec_gpio.py
Restart=on-failure
[Install]
WantedBy=multi-user.target
Activez et démarrez :
sudo systemctl daemon-reload
sudo systemctl enable sonomaton-rec.service
sudo systemctl start sonomaton-rec.service
Idées supplémentaires
- durĂ©e variable : enregistrer tant que le bouton est appuyĂ© (start/stop) au lieu dâune durĂ©e fixe.
- détection de niveau : déclencher automatiquement si le son dépasse un seuil (pratique en ambiance).
- compression mp3 : enregistrer en WAV, puis convertir en MP3 avec ffmpeg (plus lĂ©ger, mais ce nâest plus âbrutâ).
- nommage mĂ©tier : plutĂŽt quâune date, un compteur de prise, un nom de visiteur, un identifiant de session, etc.
- double flux : enregistrer, puis jouer immédiatement (ou envoyer vers un serveur) selon le principe de votre installation.
Conclusion
Vous avez maintenant un enregistreur audio autonome basĂ© sur Raspberry Pi : une entrĂ©e micro via USB, un script Python, des fichiers WAV propres, et une option bouton/LED + lancement automatique au dĂ©marrage. Câest le socle technique qui permet ensuite de monter une installation comme Sonomaton.
Si vous voulez rester sur des systÚmes plus simples orientés lecture (et non enregistrement), relisez aussi mes dossiers : DF Player, Arduino + DF Player, et Raspberry Pi.
Et si ça coince (son absent, mauvais périphérique, volume trop faible, souffle), ne perdez pas une journée à bricoler au hasard : commencez par valider arecord, puis seulement aprÚs Python. Si vous avez la moindre question, contactez-moi.