From 1f903accd95361735c841c87fdc6494ad3331b40 Mon Sep 17 00:00:00 2001 From: jacqueline Date: Wed, 7 Jun 2023 13:19:45 +1000 Subject: Flesh out audio state machine for playback Also fix mono playback --- src/audio/i2s_audio_output.cpp | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) (limited to 'src/audio/i2s_audio_output.cpp') diff --git a/src/audio/i2s_audio_output.cpp b/src/audio/i2s_audio_output.cpp index aab011d1..982499a0 100644 --- a/src/audio/i2s_audio_output.cpp +++ b/src/audio/i2s_audio_output.cpp @@ -38,7 +38,6 @@ I2SAudioOutput::I2SAudioOutput(drivers::GpioExpander* expander, attenuation_(pots_->GetMaxAttenuation()) { SetVolume(25); // For testing dac_->SetSource(buffer()); - dac_->Start(); } I2SAudioOutput::~I2SAudioOutput() { @@ -46,6 +45,15 @@ I2SAudioOutput::~I2SAudioOutput() { dac_->SetSource(nullptr); } +auto I2SAudioOutput::SetInUse(bool in_use) -> void { + if (in_use) { + dac_->Start(); + } else { + dac_->Stop(); + } + pots_->SetZeroCrossDetect(in_use); +} + auto I2SAudioOutput::SetVolumeImbalance(int_fast8_t balance) -> void { int_fast8_t new_difference = balance - left_difference_; left_difference_ = balance; @@ -124,6 +132,19 @@ auto I2SAudioOutput::Configure(const StreamInfo::Format& format) -> bool { ESP_LOGI(kTag, "incoming audio stream: %u bpp @ %lu Hz", pcm.bits_per_sample, pcm.sample_rate); + drivers::I2SDac::Channels ch; + switch (pcm.channels) { + case 1: + ch = drivers::I2SDac::CHANNELS_MONO; + break; + case 2: + ch = drivers::I2SDac::CHANNELS_STEREO; + break; + default: + ESP_LOGE(kTag, "dropping stream with out of bounds channels"); + return false; + } + drivers::I2SDac::BitsPerSample bps; switch (pcm.bits_per_sample) { case 16: @@ -153,9 +174,7 @@ auto I2SAudioOutput::Configure(const StreamInfo::Format& format) -> bool { return false; } - // TODO(jacqueline): probs do something with the channel hey - - dac_->Reconfigure(bps, sample_rate); + dac_->Reconfigure(ch, bps, sample_rate); current_config_ = pcm; return true; -- cgit v1.2.3