Add stereo and bass enhance APIs via PEQ overlay.

Expose POST /api/audio/stereo-enhance and bass-enhance with 0–100 levels,
persist enhancements in AudioProfile, and document the virtual EQ mapping in
the manual and SigmaStudio chapter.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-06 17:00:12 +02:00
co-authored by Cursor
parent 6c350f5c48
commit fa532e068f
22 changed files with 826 additions and 19 deletions
@@ -14,6 +14,8 @@
#include "core/AudioProfile.hpp"
#include "core/DspError.hpp"
#include "core/EnhanceLevel.hpp"
#include "core/EnhancementsDesign.hpp"
#include "core/EqBandIndex.hpp"
#include "core/FrequencyHz.hpp"
#include "core/GainDb.hpp"
@@ -147,9 +149,45 @@ public:
core::EqBandIndex band, core::GainDb gain, core::FrequencyHz center,
float q, bool persist);
/**
* @brief setStereoEnhance — adjust stereo depth overlay (PEQ bands 35).
*
* @dname setStereoEnhance
* @param level Intensity 0..100 (0 = off).
* @param persist When true and store is set, write NVS.
* @return Ok on success, or StoreError.
* @pubstate updates profile_.enhancements.stereo and safeloads effective EQ.
*
* @author Michele Bigi
* @date 2026-07-06
*/
[[nodiscard]] std::expected<void, core::StoreError> setStereoEnhance(
core::EnhanceLevel level, bool persist);
/**
* @brief setBassEnhance — adjust bass emphasis overlay (PEQ bands 12).
*
* @dname setBassEnhance
* @param level Intensity 0..100 (0 = off).
* @param persist When true and store is set, write NVS.
* @return Ok on success, or StoreError.
* @pubstate updates profile_.enhancements.bass and safeloads effective EQ.
*
* @author Michele Bigi
* @date 2026-07-06
*/
[[nodiscard]] std::expected<void, core::StoreError> setBassEnhance(
core::EnhanceLevel level, bool persist);
private:
[[nodiscard]] std::expected<void, core::StoreError> persistProfile() const;
[[nodiscard]] std::expected<void, core::StoreError> applyProfileToDsp(
const core::AudioProfile& profile);
[[nodiscard]] std::expected<void, core::StoreError> applyEffectiveEq(
bool persist);
core::IDsp& dsp_;
core::IAudioProfileStore* store_;
core::AudioProfile profile_;