diff --git a/src/audio/i2s_audio_output.cpp b/src/audio/i2s_audio_output.cpp index 2a251685..bf1c3e5e 100644 --- a/src/audio/i2s_audio_output.cpp +++ b/src/audio/i2s_audio_output.cpp @@ -63,16 +63,21 @@ auto I2SAudioOutput::changeMode(Modes mode) -> void { return; } if (mode == Modes::kOff) { - dac_->Stop(); - dac_.reset(); + if (dac_) { + dac_->Stop(); + dac_.reset(); + } return; - } else if (current_mode_ == Modes::kOff) { - auto instance = drivers::I2SDac::create(expander_); - if (!instance) { - return; + } + if (current_mode_ == Modes::kOff) { + if (!dac_) { + auto instance = drivers::I2SDac::create(expander_); + if (!instance) { + return; + } + dac_.reset(*instance); } SetVolume(GetVolume()); - dac_.reset(*instance); dac_->SetSource(stream()); dac_->Start(); }