Tutorial Arduino - Jouer un fichier audio .wav avec l’Arduino

Edité le 11.09.2016

Jouer un fichier audio .wav avec l’Arduino

Pour jouer un fichier audio sur l’Arduino je pensais à tors qu’un shield MP3 était nécéssaire.
En fait, un simple lecteur de carte SD ou Micro SD peut faire l’affaire pour jouer un fichier WAV . La qualité n’est pas au rendez-vous comparé au MP3 mais ce « système D » vaut la peine d’être parcouru.

Branchements

  1. MOSI – pin 11
  2. MISO – pin 12
  3. CLK – pin 13
  4. CS – Dépend du module (pin 10)
  5. VCC - 5V
  6. GND - GND

Dans un premier temps connectez le lecteur de carte SD à l’arduino

Connectez ensuite votre speaker à la pin 9 de l’Arduino et au GND.

Niveau branchement c’est terminé on va maintenant convertir nos fichiers .WAV pour qu’ils soient lisible par l’Arduino.

 

 

Convertir les fichiers WAV

Tout d’abord j’ai téléchargé quelques effets audio sur le site: Soundbibble.com
Ensuite téléchargé et installé le logiciel: R8Brain

Une fois le logiciel installé il faut convertir les fichiers en 32Mhz, 8 bits. Il semblerait néanmoins que 16Mhz soit préconisé.

Dans la vidéo ci-dessous je converti en 32Mhz. Essayez le aussi en 16Mhz.

Pour terminer la partie SD, j’ai déposé ce fichier son sur ma carte SD dans un dossier nommé « sounds ». Et replacé la carte SD dans le module connecté à l’Arduino.

Le code Arduino

Télécharger la librairie TMRpcm

Copiez et téléversez le code dans l’Arduino


//www.idehack.com
#include <SPI.h>
#include <SD.h> // Inclure la librairie SD
#define SDPIN 10 // Chip Select du lecteur SD
#include <TMRpcm.h> 
File myFile;
TMRpcm tmrpcm;
char caractere; // Définition du caractère pour la gestion dans le moniteur série
void setup(){
  Serial.begin(9600); // début de la communication série
  tmrpcm.speakerPin = 9; // Speaker sur la pin 9
  tmrpcm.setVolume(4); // gestion du volume de 0 à 7
  tmrpcm.quality(1); // qualitée audio 0 ou 1
  // Initialisation de la carte SD
  if (!SD.begin(SDPIN)) { 
    Serial.println("initialization failed!"); //  S'il y a un soucis "initialization failed!" s'affichera au moniteur
    return;
  }
  Serial.println("tapez un caractere -> a");
}
void loop(){
    if(Serial.available()){
      caractere = Serial.read();
      if(caractere == 'a'){ // Si le caractère recu dans le moniteur série est "a"
      Serial.println("Lecture"); // Ecrit dans le moniteur série 
        tmrpcm.play("sounds/son8bit.wav"); // Joue le son "son8bit.wav"
      }
    }
}
void playSound(char *file){
 tmrpcm.play(file);
 return; 
}

 

Une fois le code téléversé sur l’Arduino, lancez le moniteur série et envoyez le caractère « a ».

Résultat (audio)

Source: Instructable | Youtube | Blog

← Previous post

Next post →

10 Comments

  1. Je ne pas bien compris pouvez vous m’expliquer en bref

    • leroyd

      Bonjour Jean,

      Je me ferais un plaisir de vous expliquer en bref mais que n’avez vous pas compris ?

      Le but ici est de jouer un son via l’Arduino et sans shield MP3.

      De fais l’Arduino étant capable de lire un .WAV 32Mhz en 8 bits il suffit d’un lecteur de carte SD pour y stoquer le fichier (pas très volumineux).

      Enfin le code Arduino a l’aide de la librairie TMRpcm.h va nous permettre de lire le fichier.

      Voilà une brève explication ^^

      à bientôt

  2. Bonjour,
    c’est très intéressant et je me suis lancé. Et pour l’instant, cela ne fonctionne pas.
    -Je n’ai pas de NANO, j’ai pris une UNO.
    -Je ne suis pas certzin du bon codage de mes fichier wav: Peux-tu m’en envoyer un qui fonctionne et me repréciser son encodage (mono ou stéréo - nombre de bits - fréquence d’échantillonage (il doit y avoir une petite erreur dans ton texte)

    Merci d’avance

    • Bonjour Gilles,

      Je te ré-encode un fichier .wav ce soir et je le testerais avant pour être sûr que tout est ok. (je t’envoie tout çà dimanche boulot oblige). Ce sera l’occasion de vérifier et de raffraîchir le tutoriel 🙂

      Bien à toi,

      Lee

      • Hmimidi

        Arduino : 1.6.12 (Windows 10), Carte : « Arduino/Genuino Uno »

        C:\Users\RADIO-~1\AppData\Local\Temp\arduino_modified_sketch_170966\sketch_oct12a.ino:4:79: fatal error: TMRpcm.h: No such file or directory

        #include // Inclure la librairie tmrpcm (gestion de fichiers .wav).

        ^

        compilation terminated.

        exit status 1
        Erreur de compilation pour la carte Arduino/Genuino Uno

        Je trouve cette erreur la y’a t’il une solution ?

        • Hello,

          j’ai refais ce tutoriel il y a peu sans erreur ici par contre dans ta derniere ligne: #include // Inclure la librairie tmrpcm (gestion de fichiers .wav).

          bien tu inclus rien. Tu peux copie/colle ton code ?

          bàt,

          Lee

          • J’ai le même soucis que Hmimidi

            C:\Users\Henri\Documents\Arduino\testwavarduino\testwavarduino.ino:4:79: fatal error: TMRpcm.h: No such file or directory

            #include // Inclure la librairie tmrpcm (gestion de fichiers .wav).

            ^

            compilation terminated.

            exit status 1
            Error compiling for board Arduino/Genuino Uno.

            Voici mon code :

            #include
            #include // Inclure la librairie SD
            #define SDPIN 4 // Chip Select du lecteur SD
            #include // Inclure la librairie tmrpcm (gestion de fichiers .wav).

            File myFile;
            TMRpcm tmrpcm;

            char caractere; // Définition du caractère pour la gestion dans le moniteur série

            void setup(){
            Serial.begin(9600); // début de la communication série
            tmrpcm.speakerPin = 9; // Speaker sur la pin 9
            tmrpcm.setVolume(4); // gestion du volume de 0 à 7
            tmrpcm.quality(1); // qualitée audio 0 ou 1

            // Initialisation de la carte SD
            if (!SD.begin(SDPIN)) {
            Serial.println(« initialization failed! »); // S’il y a un soucis « initialization failed! » s’affichera au moniteur
            return;
            }

            Serial.println(« tapez un caractere -> a »);
            }

            void loop(){
            if(Serial.available()){
            caractere = Serial.read();
            if(caractere == ‘a’){ // Si le caractère recu dans le moniteur série est « a »
            Serial.println(« Lecture »); // Ecrit dans le moniteur série
            tmrpcm.play(« SOUND\foghornarduino.wav »); // Joue le son « son8bit.wav »
            }
            }
            }

            void playSound(char *file){
            tmrpcm.play(file);
            return;
            }

          • Le soucis est que tu n’inclus pas la librairie « #include // Inclure la librairie tmrpcm (gestion de fichiers .wav). »

            C’est corrigé dans le code tu retente et tu me tiens au courant ?

            J’ai modifié le code récemment pour Gilles et tout a fonctionné 🙂

            à bientôt,

            Lee

  3. HarFanG

    Hello,

    Bien sympa ce circuit !
    Est-il possible de le modifier afin de l’utiliser sur une voiture ? J’aimerais brancher ça sur un clignotant afin qu’il me joue le célèbre « cuip-cuip » lorsque je verrouille/deverrouille la voiture avec la telecommande.

    Idealement, il faudrait detecter le premier allumage du clignotant, faire jouer le son en question et s’arrêter => c’est à dire que, bien que les feux clignotent 2 ou 3 fois, le son ne devrait être joué qu’une seule fois.

    Et donc, il faudrait remplacer la saisie d’un caractere par une detection sur une broche quelque part.

    Possible ou je rêve tout éveillé ? ^^

    • Hellow
      Ca me semble possible (j’ai lu plusieurs fois ce que tu m’as écris j’espère avoir bien compris).
      Par contre faudrait analyser un clignotant Et je démonterai pas ma voiture pour essayer 😀

      Pour la partie code ce dont tu parle c’est juste d’analyser l’état d’une broche [HIGH ou LOW, 0 ou 1, true ou false].

      C’est vraiment la détection de l’état sur lequel je me poserais des questions.
      PS: Prend pas de risque sur ta caisse un clignoteur ça reste important :p essaye plutôt de faire un proto avant non ?

      bàt,

      Lee

Laisser un commentaire