🛠 Audio Shield SGTL5000 : boucle stéréo 44,1 kHz et outil de conception graphique
Objectifs
Entrer dans le monde pour lequel la Teensy 3.2 est célèbre : la Teensy Audio Library, qui fait du streaming stéréo 16 bits / 44,1 kHz (lecture polyphonique, synthèse, effets, analyse FFT, routage flexible) en exploitant les instructions DSP du Cortex-M4. Vous monterez l'Audio Adapter (ou « Audio Shield ») PJRC avec son codeur SGTL5000, ferez une boucle stéréo entrée → sortie, puis découvrirez l'Audio System Design Tool graphique qui exporte le code C++ à votre place.
Matériel
- 1 Teensy 3.2 + 1 Audio Adapter PJRC (kit à souder, codeur SGTL5000, prises casque/ligne-in/mic, emplacements carte SD et SPI-flash)
- 1 source audio (sortie casque d'un téléphone sur la prise line-in) + 1 casque ou des enceintes amplifiées
- Câbles courts entre shield et carte — le shield empilé règle le problème ; en câblage volant, les fils MCLK/BCLK/LRCLK/TX/RX « doivent être courts pour éviter les problèmes » : les longueurs produisent du bruit audible (forum PJRC)
- Éventuellement une carte SD ≤ 32 Go (le support des cartes > 32 Go n'arrive que depuis Teensyduino 1.54)
Brochage I2S (Teensy 3.x)
Le shield utilise les broches : 11 (MCLK), 9 (BCLK), 23 (LRCLK), 22 (DOUT → shield), 13 (DIN ← shield), 18/19 (SDA/SCL pour configurer le SGTL5000 en I2C). La Teensy 3.2 possède aussi son propre DAC 12 bits (A14, mono) et ses entrées ADC pour travailler sans shield.
Code complet
Structure identique à celle générée par l'outil de conception (objets documentés sur la page de la bibliothèque Audio) :
#include <Audio.h>
#include <Wire.h> // SGTL5000 configure en I2C (broches 18/19)
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>
AudioInputI2S i2sIn; // entrée stereo (line-in ou mic du shield)
AudioOutputI2S i2sOut; // sortie stereo (casque / line-out)
AudioConnection patchCord1(i2sIn, 0, i2sOut, 0); // gauche -> gauche
AudioConnection patchCord2(i2sIn, 1, i2sOut, 1); // droite -> droite
AudioControlSGTL5000 sgtl5000;
void setup {
Audio.memory(16); // 16 blocs memoire audio (~16 ko)
sgtl5000.enable; // alimente le codeur
sgtl5000.volume(0.5); // niveau de sortie casque
// Le flux audio tourne en 44,1 kHz / 16 bits pendant que votre code tourne
}
void loop {
// Des objets DSP (effets, mixeurs, FFT...) s'insèrent entre i2sIn et
// i2sOut sans toucher au matériel I2S.
}
L'outil de conception graphique
<https://www.pjrc.com/teensy/gui/> : vous reliez des boîtes (entrées, sorties, délais, réverb, mixeurs, analyseurs FFT…) comme sur une patchbay, et l'outil exporte le code C++ complet à coller dans l'IDE. La série de tutoriels vidéo officielle est livrée en exemples : File > Examples > Audio > Tutorial. Deux Audio Shields sur une même Teensy 3.x donnent du 4 entrées / 4 sorties (quad), avec le câblage publié par SparkFun.
Vérification attendue
Casque sur le shield, source sur line-in : le son sort en stéréo, sans latence perceptible, pendant que loop ne fait rien — le flux est piloté par les interruptions et le DMA. Montez le volume progressivement (0.5 = moitié) pour ne pas agresser vos oreilles. Coupez l'entrée : le silence doit être propre ; un ronflement/bruit de fond signale des fils I2S trop longs ou une masse bâclée.
Erreurs fréquentes
- Fils I2S trop longs en montage « volant » : bruit audible garanti — empilez le shield ou gardez des câbles très courts.
- Oublier Audio.memory : sans blocs mémoire alloués, aucune connexion audio ne fonctionne.
- Carte SD > 32 Go avec un vieux Teensyduino : la bibliothèque SD ne la voit pas — mettez à jour (≥ 1.54) ou reformatez en 32 Go max.
- Mauvais volume d'entrée micro : le SGTL5000 a des réglages gain mic distincts du line-in — consultez les exemples de la bibliothèque.
- Soudure du kit ratée sur la nappe de broches : le symptôme classique est une sortie muette sur un canal — vérifiez DIN/DOUT (broches 13/22) à la continuité.
- Confondre le DAC 12 bits intégré (A14, mono) et le codeur du shield (stéréo 16 bits) : les deux coexistent mais ne servent aux mêmes usages.
Autres tutoriels pour cette carte
- Premiers pas sur la Teensy 3.2 : Teensyduino, HalfKay et premier Blink
- Broches, ADC 13 bits, DAC 12 bits et PWM : dompter les E/S de la Teensy 3.2
- Un instrument MIDI USB en 10 minutes : Bounce, boutons et règle d'or du drain
- OctoWS2811 : piloter 8 rubans WS2812 en parallèle par DMA (presque zéro CPU)
- Timers matériels, interruptions imbriquées et FASTRUN : la vitesse Cortex-M4
- Intégration produit : alimentation VIN/VUSB, régulateur 250 mA, RTC à quartz et EEPROM
Exemples de code pour cette carte
clignotante.inoArduinotouche-capacitive.inoArduinoanalogique-12-bits.inoArduinomidi-piano.inoArduinopwm-respiration.inoArduinoservo-angle.inoArduino