mirror of
https://github.com/esphome/esphome.git
synced 2025-02-12 07:58:17 +00:00
I2S media player allow setting communication format for external DACs (#4918)
Co-authored-by: Carlos Cordero <ccordero@bkool.com>
This commit is contained in:
parent
f7c0ec6595
commit
5afdb1e97f
@ -27,6 +27,7 @@ i2s_dac_mode_t = cg.global_ns.enum("i2s_dac_mode_t")
|
|||||||
CONF_MUTE_PIN = "mute_pin"
|
CONF_MUTE_PIN = "mute_pin"
|
||||||
CONF_AUDIO_ID = "audio_id"
|
CONF_AUDIO_ID = "audio_id"
|
||||||
CONF_DAC_TYPE = "dac_type"
|
CONF_DAC_TYPE = "dac_type"
|
||||||
|
CONF_I2S_COMM_FMT = "i2s_comm_fmt"
|
||||||
|
|
||||||
INTERNAL_DAC_OPTIONS = {
|
INTERNAL_DAC_OPTIONS = {
|
||||||
"left": i2s_dac_mode_t.I2S_DAC_CHANNEL_LEFT_EN,
|
"left": i2s_dac_mode_t.I2S_DAC_CHANNEL_LEFT_EN,
|
||||||
@ -38,6 +39,8 @@ EXTERNAL_DAC_OPTIONS = ["mono", "stereo"]
|
|||||||
|
|
||||||
NO_INTERNAL_DAC_VARIANTS = [esp32.const.VARIANT_ESP32S2]
|
NO_INTERNAL_DAC_VARIANTS = [esp32.const.VARIANT_ESP32S2]
|
||||||
|
|
||||||
|
I2C_COMM_FMT_OPTIONS = ["lsb", "msb"]
|
||||||
|
|
||||||
|
|
||||||
def validate_esp32_variant(config):
|
def validate_esp32_variant(config):
|
||||||
if config[CONF_DAC_TYPE] != "internal":
|
if config[CONF_DAC_TYPE] != "internal":
|
||||||
@ -69,6 +72,9 @@ CONFIG_SCHEMA = cv.All(
|
|||||||
cv.Optional(CONF_MODE, default="mono"): cv.one_of(
|
cv.Optional(CONF_MODE, default="mono"): cv.one_of(
|
||||||
*EXTERNAL_DAC_OPTIONS, lower=True
|
*EXTERNAL_DAC_OPTIONS, lower=True
|
||||||
),
|
),
|
||||||
|
cv.Optional(CONF_I2S_COMM_FMT, default="msb"): cv.one_of(
|
||||||
|
*I2C_COMM_FMT_OPTIONS, lower=True
|
||||||
|
),
|
||||||
}
|
}
|
||||||
).extend(cv.COMPONENT_SCHEMA),
|
).extend(cv.COMPONENT_SCHEMA),
|
||||||
},
|
},
|
||||||
@ -94,6 +100,7 @@ async def to_code(config):
|
|||||||
pin = await cg.gpio_pin_expression(config[CONF_MUTE_PIN])
|
pin = await cg.gpio_pin_expression(config[CONF_MUTE_PIN])
|
||||||
cg.add(var.set_mute_pin(pin))
|
cg.add(var.set_mute_pin(pin))
|
||||||
cg.add(var.set_external_dac_channels(2 if config[CONF_MODE] == "stereo" else 1))
|
cg.add(var.set_external_dac_channels(2 if config[CONF_MODE] == "stereo" else 1))
|
||||||
|
cg.add(var.set_i2s_comm_fmt_lsb(config[CONF_I2S_COMM_FMT] == "lsb"))
|
||||||
|
|
||||||
cg.add_library("WiFiClientSecure", None)
|
cg.add_library("WiFiClientSecure", None)
|
||||||
cg.add_library("HTTPClient", None)
|
cg.add_library("HTTPClient", None)
|
||||||
|
@ -148,6 +148,7 @@ void I2SAudioMediaPlayer::start_() {
|
|||||||
pin_config.data_out_num = this->dout_pin_;
|
pin_config.data_out_num = this->dout_pin_;
|
||||||
i2s_set_pin(this->parent_->get_port(), &pin_config);
|
i2s_set_pin(this->parent_->get_port(), &pin_config);
|
||||||
|
|
||||||
|
this->audio_->setI2SCommFMT_LSB(this->i2s_comm_fmt_lsb_);
|
||||||
this->audio_->forceMono(this->external_dac_channels_ == 1);
|
this->audio_->forceMono(this->external_dac_channels_ == 1);
|
||||||
if (this->mute_pin_ != nullptr) {
|
if (this->mute_pin_ != nullptr) {
|
||||||
this->mute_pin_->setup();
|
this->mute_pin_->setup();
|
||||||
|
@ -39,6 +39,8 @@ class I2SAudioMediaPlayer : public Component, public media_player::MediaPlayer,
|
|||||||
#endif
|
#endif
|
||||||
void set_external_dac_channels(uint8_t channels) { this->external_dac_channels_ = channels; }
|
void set_external_dac_channels(uint8_t channels) { this->external_dac_channels_ = channels; }
|
||||||
|
|
||||||
|
void set_i2s_comm_fmt_lsb(bool lsb) { this->i2s_comm_fmt_lsb_ = lsb; }
|
||||||
|
|
||||||
media_player::MediaPlayerTraits get_traits() override;
|
media_player::MediaPlayerTraits get_traits() override;
|
||||||
|
|
||||||
bool is_muted() const override { return this->muted_; }
|
bool is_muted() const override { return this->muted_; }
|
||||||
@ -71,6 +73,8 @@ class I2SAudioMediaPlayer : public Component, public media_player::MediaPlayer,
|
|||||||
#endif
|
#endif
|
||||||
uint8_t external_dac_channels_;
|
uint8_t external_dac_channels_;
|
||||||
|
|
||||||
|
bool i2s_comm_fmt_lsb_;
|
||||||
|
|
||||||
HighFrequencyLoopRequester high_freq_;
|
HighFrequencyLoopRequester high_freq_;
|
||||||
|
|
||||||
optional<std::string> current_url_{};
|
optional<std::string> current_url_{};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user