#pragma once #ifdef USE_ESP32_FRAMEWORK_ARDUINO #include "esphome/components/media_player/media_player.h" #include "esphome/core/component.h" #include "esphome/core/gpio.h" #include "esphome/core/helpers.h" #include namespace esphome { namespace i2s_audio { class I2SAudioMediaPlayer : public Component, public media_player::MediaPlayer { public: void setup() override; float get_setup_priority() const override { return esphome::setup_priority::LATE; } void loop() override; void dump_config() override; void set_dout_pin(uint8_t pin) { this->dout_pin_ = pin; } void set_bclk_pin(uint8_t pin) { this->bclk_pin_ = pin; } void set_lrclk_pin(uint8_t pin) { this->lrclk_pin_ = pin; } void set_mute_pin(GPIOPin *mute_pin) { this->mute_pin_ = mute_pin; } void set_internal_dac_mode(i2s_dac_mode_t mode) { this->internal_dac_mode_ = mode; } void set_external_dac_channels(uint8_t channels) { this->external_dac_channels_ = channels; } media_player::MediaPlayerTraits get_traits() override; bool is_muted() const override { return this->muted_; } protected: void control(const media_player::MediaPlayerCall &call) override; void mute_(); void unmute_(); void set_volume_(float volume, bool publish = true); void stop_(); std::unique_ptr