AudioPlayer

audio
audio/AudioPlayer.h
audio tool beta tool beta

Tool: AudioPlayer Lecture de fichiers audio MP3/WAV depuis une carte SD, via une sortie I2S (DAC externe type PCM5102 ou équivalent). Fonctionnalités : /

Méthodes publiques

Méthode Description Paramètres Retour
AudioPlayer()
AudioPlayer(uint8_t dinPin = 26, uint8_t bckPin = 27, uint8_t lckPin = 28);
AudioPlayer()
AudioPlayer();
begin()
begin(float volume = 0.5f);
Initialise la sortie I2S avec un volume de départ. / volume: Volume initial, de 0.0 (muet) à 1.0 (maximum) true
true si l'initialisation a réussi /
load()
load(const String &filename);
Charge un fichier audio depuis la carte SD (sans démarrer la lecture). / filename: Chemin du fichier sur la carte SD (.mp3 ou .wav) true
true si le fichier a été trouvé et chargé avec succès /
play()
play();
Démarre (ou reprend) la lecture du fichier chargé. /
pause()
pause();
Met en pause la lecture en cours. /
toggle()
toggle();
Bascule entre lecture et pause selon l'état courant. /
stop()
stop();
Arrête la lecture et libère les ressources associées. /
setVolume()
setVolume(float volume);
Modifie le volume de lecture. / volume: Nouveau volume, de 0.0 (muet) à 1.0 (maximum) /
loop()
loop();
Fait progresser la lecture en cours. A appeler régulièrement (dans loop()) tant qu'un morceau est en lecture. /
isPlaying()
isPlaying() const {
isLoaded()
isLoaded() const {

Méthodes privées


            _isWav() const {;
endsWith(".WAV");;
_freeResources();;

                    

Variables membres


            return _playing;
return _loaded;
uint8_t _dinPin;
uint8_t _bckPin;
uint8_t _lckPin;

                    

Code source


        #pragma once

#include <Arduino.h>
#include <SD.h>
#include <AudioOutputI2S.h>
#include <AudioFileSourceSD.h>
#include <AudioGeneratorMP3.h>
#include <AudioGeneratorWAV.h>

namespace crepp::audio {

/*
 * =========================
 * Tool: AudioPlayer
 * -------------------------
 * Lecture de fichiers audio MP3/WAV depuis une carte SD, via une sortie I2S
 * (DAC externe type PCM5102 ou équivalent).
 *
 * @badge tool
 * @badge beta
 *
 * Fonctionnalités :
 * - Lecture/pause/arrêt d'un fichier MP3 ou WAV
 * - Réglage du volume
 * - Détection automatique du format (extension .wav vs autre = mp3)
 * =========================
 */
class AudioPlayer {
public:
    /**
     * @brief Construit le lecteur audio en spécifiant les broches I2S utilisées.
     * @param dinPin Broche de données I2S (DIN / DOUT vers le DAC)
     * @param bckPin Broche d'horloge bit I2S (BCK)
     * @param lckPin Broche d'horloge word/LR I2S (LRCK / WS)
     */
    AudioPlayer(uint8_t dinPin = 26,
                uint8_t bckPin = 27,
                uint8_t lckPin = 28);
    ~AudioPlayer();

    /**
     * @brief Initialise la sortie I2S avec un volume de départ.
     * @param volume Volume initial, de 0.0 (muet) à 1.0 (maximum)
     * @return true si l'initialisation a réussi
     */
    bool begin(float volume = 0.5f);

    /**
     * @brief Charge un fichier audio depuis la carte SD (sans démarrer la lecture).
     * @param filename Chemin du fichier sur la carte SD (.mp3 ou .wav)
     * @return true si le fichier a été trouvé et chargé avec succès
     */
    bool load(const String &filename);

    /**
     * @brief Démarre (ou reprend) la lecture du fichier chargé.
     */
    void play();

    /**
     * @brief Met en pause la lecture en cours.
     */
    void pause();

    /**
     * @brief Bascule entre lecture et pause selon l'état courant.
     */
    void toggle();

    /**
     * @brief Arrête la lecture et libère les ressources associées.
     */
    void stop();

    /**
     * @brief Modifie le volume de lecture.
     * @param volume Nouveau volume, de 0.0 (muet) à 1.0 (maximum)
     */
    void setVolume(float volume);

    /**
     * @brief Fait progresser la lecture en cours. A appeler régulièrement
     *        (dans loop()) tant qu'un morceau est en lecture.
     */
    void loop();

    /// Indique si un morceau est actuellement en cours de lecture
    bool isPlaying() const { return _playing; }
    /// Indique si un fichier a été chargé avec succès via load()
    bool isLoaded()  const { return _loaded;  }

private:
    uint8_t _dinPin;
    uint8_t _bckPin;
    uint8_t _lckPin;

    float   _volume   = 0.5f;
    bool    _playing  = false;
    bool    _loaded   = false;
    String  _filename = "";

    AudioOutputI2S    *_i2s    = nullptr;
    AudioFileSourceSD *_source = nullptr;
    AudioGeneratorMP3 *_mp3    = nullptr;
    AudioGeneratorWAV *_wav    = nullptr;

    /// Déduit le format du fichier chargé à partir de son extension (.wav vs mp3)
    bool _isWav() const {
        return _filename.endsWith(".wav") || _filename.endsWith(".WAV");
    }
    /// Libère les générateurs/source audio actuellement alloués
    void _freeResources();
};

} // namespace crepp::audio