diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-06-07 13:19:45 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-06-07 13:19:45 +1000 |
| commit | 1f903accd95361735c841c87fdc6494ad3331b40 (patch) | |
| tree | 5b69bd0548c06a93852a576fa90a170fa303a15e /src/audio/i2s_audio_output.cpp | |
| parent | 2a568846bd8f1c9e23e86e7570557eed6f18cf9f (diff) | |
| download | tangara-fw-1f903accd95361735c841c87fdc6494ad3331b40.tar.gz | |
Flesh out audio state machine for playback
Also fix mono playback
Diffstat (limited to 'src/audio/i2s_audio_output.cpp')
| -rw-r--r-- | src/audio/i2s_audio_output.cpp | 27 |
1 files changed, 23 insertions, 4 deletions
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; |
