diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-10-16 13:52:43 +1100 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-10-16 13:52:43 +1100 |
| commit | 7523772886ca37cf05d0ad5b24f6d520e314242e (patch) | |
| tree | ab298342307c1023ef4e1a2a004407ca072dfc25 /src/audio/i2s_audio_output.cpp | |
| parent | 96ea6cef8881d005cb06be8a9132535a5564d5fd (diff) | |
| download | tangara-fw-7523772886ca37cf05d0ad5b24f6d520e314242e.tar.gz | |
Decouple play/pause from output on/off
I think this was the cause of toggling play/pause making audio go away.
Or at least I can't repro that bug anymore, anyway.
Diffstat (limited to 'src/audio/i2s_audio_output.cpp')
| -rw-r--r-- | src/audio/i2s_audio_output.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/audio/i2s_audio_output.cpp b/src/audio/i2s_audio_output.cpp index e77c7c92..fb52a7a8 100644 --- a/src/audio/i2s_audio_output.cpp +++ b/src/audio/i2s_audio_output.cpp @@ -48,6 +48,7 @@ I2SAudioOutput::I2SAudioOutput(StreamBufferHandle_t s, : IAudioOutput(s), expander_(expander), dac_(std::move(dac)), + current_mode_(Modes::kOff), current_config_(), left_difference_(0), current_volume_(0), @@ -60,12 +61,18 @@ I2SAudioOutput::~I2SAudioOutput() { dac_->SetSource(nullptr); } -auto I2SAudioOutput::SetInUse(bool in_use) -> void { - if (in_use) { - dac_->Start(); - } else { +auto I2SAudioOutput::SetMode(Modes mode) -> void { + if (mode == current_mode_) { + return; + } + if (mode == Modes::kOff) { dac_->Stop(); + return; + } else if (current_mode_ == Modes::kOff) { + dac_->Start(); } + current_mode_ = mode; + dac_->SetPaused(mode == Modes::kOnPaused); } auto I2SAudioOutput::SetVolumeImbalance(int_fast8_t balance) -> void { |
