summaryrefslogtreecommitdiff
path: root/src/audio/i2s_audio_output.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-10-16 13:52:43 +1100
committerjacqueline <me@jacqueline.id.au>2023-10-16 13:52:43 +1100
commit7523772886ca37cf05d0ad5b24f6d520e314242e (patch)
treeab298342307c1023ef4e1a2a004407ca072dfc25 /src/audio/i2s_audio_output.cpp
parent96ea6cef8881d005cb06be8a9132535a5564d5fd (diff)
downloadtangara-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.cpp15
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 {