Close

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

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

 

schema_wav_2

 

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

r8brain

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

31 thoughts on “Tutorial Arduino – Jouer un fichier audio .wav avec l’Arduino

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

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

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

      1. 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 ?

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

        1. J’ai déjà fait ce tutoriel plusieurs fois (notamment en réponse aux questions) avec succès. Ceci-dit je vais sans doute le réécrire complètement et différemment. Peut-être avec une vidéo explicative (narrative ou textuelle).

          Par contre, tu me dis avoir tout tenté mais c’est un peu vague tu as dû oublier quelque chose sinon je pense que cela fonctionnerait ^^ avec quelle version de l’IDE travailles-tu ? Quelle shield SD? Quelle marque la carte SD ? etc.

          Bien a toi,
          Lee

          1. J’ai le même probleme.

            Je travail avec arduino UNO et le shield ethernet V2 pour le lecteur SD.
            L’initialisation ne se fait pas, j’ai ajouté un delay de 200ms mais ça veux pas.

          2. Re, j’ai la solution. Le SDPIN sur le shield ethernet est la PIN 4 et non la 10.
            Reste plus qu’a essayer d’avoir un son audible.
            J’ai pensé qu’un haut parleur de 8ohm pourrait grillé la carte alors j’ai utilisé un montage avec un transistor. Est ce que c’est une bonne idée ou est ce que c’est pas compatible avec le code?

  2. 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é ? ^^

  3. Bonjour,

    Merci pour ce super tutoriel !

    Tout semble fonctionner dans un premier temps (encodage, lecture du fichier…), et le fichier est bien lu sur la carte SD.

    Néanmoins, je n’obtient qu’une sorte de grésillement. J’ai essayé avec les exemples de la librairie également et le problème est le même. J’ai également tenté en 32 et 16 MHz avec plusieurs fichiers audio différents, et plusieurs hauts parleurs (8 Ohms toujours), et même avec des écouteurs en dernier recours ^^
    Toujours ce même son étrange …

    J’avoue être à court d’idées.
    Auriez vous une piste quant à l’origine du problème ? 😉

    Bien à vous,

    Antoine

    1. Il me semble avoir parlé de ce grésillement. Je pense que par défaut il n’est pas très clair néanmoins il peut être amplifié par un montage sur BreadBoard (interférence).
      Ce grésillement « passe par dessus » ton audio ?

      bàt,

      Leroyd

      (Pour ma part on peux se tutoyer) 🙂

      1. Merci pour ta réponse ! 😉

        En fait le grésillement remplace malheureusement l’audio ^^ Il n’est joué que quand un fichier est détecté sur la carte. Si je supprime le fichier ou que j’enlève carrément la carte (donc fin du programme avec ton exemple), je n’obtient plus que du silence (tout va bien à ce niveau donc…)

        Je branche bien le HP en direct sur la carte :/ Quand j’ajoute quelques resistances et un transistor par sécurité, j’obtient le même son, mais bien sûr en moins fort…

        Voici une petite vidéo pour que tu vois de quoi je parle ainsi que le fichier audio que j’ai essayé (c’est un son un peu glauque mais c’est le premier que j’ai trouvé ^^). Et merci encore pour ton aide 🙂

        Bien à toi,

        Antoine

        Le fichier audio (16MHz, 8bit) : https://drive.google.com/open?id=0B4-nfjyq4MuuN3cwVlJ6ZDRkMDg

        Ce que j’obtient… : https://drive.google.com/open?id=0B4-nfjyq4MuuS213RDFEQ214WmM

        1. Ah ouaip c’est clairement anormal pour le coup. Je vais refaire le tutoriel avec ton fichier pour voir mais je pense que le soucis viens de quelque part dans l’hardware.

  4. bonjour,
    je me permets de vous poser une question, je suis sur un projet avec l’arduino, mon idée est de jouer de la guitare et l’arduino repete ce que je joue en meme temps que moi à un delai pres, j’aimerai savoir sur comment je dois entamner la realisation de ce tte idée, si vous etes un peu branché sur les arduino, par ce que moi j’ai jamais fait de l’electronique, à la base je suis en automatique industrielle,
    je vous remercie si vous pouvez me renseigner sur ça…!!

  5. Bonjour, actuellement je suis en projet de TPE est votre tuto arduino est THE solution pour notre projet, avec mon binôme nous avons repris le programme, acheté le lecteur de carte SD, néanmoins est-il possible de réaliser les mêmes fonctions avec un Piezo à la place d’un speaker? Est-il possible qu’il y ait un problème au niveau des branchements?
    Je me permets de vous poser toutes ces questions car je suis encore une grande novice dans le domaine de la programmation mais votre réponse nous aiderait beaucoup.
    Merci d’avance

    1. Le son qu’emet cette solution reste relativement faible. J’ai peur qu’avec un Piezo le son ne soit pas clair. Le piezo est une obligation dans votre projet ?

      1. Merci de votre réponse 🙂

        Par limite de budget au lycée, dans l’immédiat les professeurs voudraient que j’utilise un buzzer mais je ne sais pas si ça fonctionne, en réalité lorsque vous parlez de speaker, peut-on utiliser un haut parleur classique? Je voulais tenter l’expérience mais je me suis demandée comment il était possible de brancher le haut parleur à l’arduino. En réalité notre projet était de créer un générateur de bruit blanc et de base nous voulions recréer le bruit avec l’arduino.Mais les limites de ce dernier nous empêchent de reproduire ce bruit, nous avons donc pensé plus judicieux de récupérer un fichier audio et de le lire. Dans l’immédiat même si ce n’est pas fort ce n’est pas grave, on aimerait juste un semblant de bruit blanc

        1. Oui l’utilisation d’un haut-parleur classique. Avec un amplificateur éventuellement. Pour la connexion a l’ardu ino bien tu peux souder des fils de prototypage rapide au fils du haut-parleur. C’est d’ailleurs la solution que j’ai choisie. Si tu as lu les autres articles, je suis en plein déménagement pour l’instant donc je manque un peu de temps mais dès que possible je referai ce tutoriel de manière plus complète.

          1. Oui je pense que tu peux y aller sans soucis 🙂 Tu n’envisage quand même pas un amplificateur ?

  6. J’ai réalisé ce tutoriel sans soucis. J’ai constaté que la vitesse de lecture du morceau était divisée par 2 sur l’arduino par rapport au son original.

    Bravo pour le tuto et merci!

  7. Hello,
    Je debarque ici et ce petit montage me paraît intéressant. J aimerai concevoir un module pour le
    Modélisme ferroviaire, pour faire sonner les cloches de mon eglise, faire entendre une chute d eau…. etc
    J’ai le soucis que mon haut parleur ou butter sort uniquement un petit grésillement bien moins long que mon fichier *.wav que j ai trouvé sur Internet. Comme si la fonction play n attendait pas de finir de jouer le fichier. Ou
    Le haut parleur que j ai ne permet pas de jouer le son. Peux-tu me
    Donner l impédance de ton speaker? Tu l as bien branché en directe sans résistance???
    Apres je sais qu je peux mettre un amplificateur, mais avant cela j aimerait deja entendre mon son meme si il n est pas fort…
    A savoir encore que j ai un arduino uno, mais pas une version original….j ai aussi un original pour éventuellement tester cela, mais je ne pense pas que ça soit le
    Probleme…
    Merci pour l aide

    Meilleures salutations

    Joel

  8. Bonjour, ce programme m’intéresse grandement, maiss maleureusement je n’arrive pas à le faire fonctioner.

    Je n’ai aucun message d’erreur, l’initialisation fonctionne, mais pas de son.
    J’ai vérifié mon HP avec la fonction tone, ça fonctionne.

    Pourriez-vous m’envoyer un fichier afin de vérifier que le problème ne vient pas d’ici, et si oui par quel moyen?

    Merci d’avance

  9. Tout marche parfaitement
    J’ai amplifié le signal grâce a un TDA 2030 mais je voudrais déclenché le son par un bouton poussoir, mais je n’y arrive pas ???

Leave a Reply

Your email address will not be published. Required fields are marked *