From 2ab4e9d8a6ae1eade200a0d4142a7d2885ac03ba Mon Sep 17 00:00:00 2001 From: ondra Date: Sun, 13 Apr 2025 09:48:36 +0200 Subject: [PATCH] Changed volume to go in 5pct steps --- src/tangara/audio/bt_audio_output.cpp | 13 +++++++++++-- src/tangara/audio/i2s_audio_output.cpp | 19 ++++++++++++++----- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/tangara/audio/bt_audio_output.cpp b/src/tangara/audio/bt_audio_output.cpp index c6c64fd1..1d377224 100644 --- a/src/tangara/audio/bt_audio_output.cpp +++ b/src/tangara/audio/bt_audio_output.cpp @@ -32,6 +32,7 @@ namespace audio { static constexpr uint16_t kVolumeRange = 60; +static constexpr uint16_t kVolumeStep = 5; // CUSTOM - added using ConnectionState = drivers::Bluetooth::ConnectionState; @@ -101,7 +102,11 @@ auto BluetoothAudioOutput::AdjustVolumeUp() -> bool { if (volume_ == 100) { return false; } - volume_++; + if (volume_ > 100 - kVolumeStep) { + volume_ = 100; + } else { + volume_ += kVolumeStep; + } SetVolume(volume_); return true; } @@ -110,7 +115,11 @@ auto BluetoothAudioOutput::AdjustVolumeDown() -> bool { if (volume_ == 0) { return false; } - volume_--; + if (volume_ < kVolumeStep) { + volume_ = 0; + } else { + volume_ -= kVolumeStep; + } SetVolume(volume_); return true; } diff --git a/src/tangara/audio/i2s_audio_output.cpp b/src/tangara/audio/i2s_audio_output.cpp index c0265af3..d516f655 100644 --- a/src/tangara/audio/i2s_audio_output.cpp +++ b/src/tangara/audio/i2s_audio_output.cpp @@ -40,6 +40,7 @@ static constexpr uint16_t kMinVolume = 0b0; static constexpr uint16_t kMaxVolumeBeforeClipping = 0x185; static constexpr uint16_t kLineLevelVolume = 0x13d; static constexpr uint16_t kDefaultVolume = 0x100; +static constexpr uint16_t kVolumeStep = 5; // CUSTOM - added I2SAudioOutput::I2SAudioOutput(drivers::IGpios& expander, drivers::OutputBuffers& buffers) @@ -140,21 +141,29 @@ auto I2SAudioOutput::SetVolumeDb(int_fast16_t val) -> bool { } auto I2SAudioOutput::AdjustVolumeUp() -> bool { - if (GetVolume() >= max_volume_) { + uint16_t vol = GetVolume(); + if (vol >= max_volume_) { return false; } - SetVolume(GetVolume() + 1); + + if (vol > max_volume_ - kVolumeStep) { + SetVolume(max_volume_); + } else { + SetVolume(vol + kVolumeStep); + } + return true; } auto I2SAudioOutput::AdjustVolumeDown() -> bool { - if (GetVolume() == kMinVolume) { + uint16_t vol = GetVolume(); + if (vol == kMinVolume) { return false; } - if (GetVolume() <= kMinVolume + 1) { + if (vol <= kMinVolume + kVolumeStep) { SetVolume(0); } else { - SetVolume(GetVolume() - 1); + SetVolume(vol - kVolumeStep); } return true; }