Add SigmaStudio manual chapter and align EQ runtime with export map.

Document the ADAU1701 schematic chain (sigma-chain.jpg), cross-link from
hardware/firmware chapters, skip safeload on fixed high-pass band 0, and
match EqProfile default peaking frequencies to SigmaStudio.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-06 16:55:23 +02:00
co-authored by Cursor
parent ab3651e678
commit 6c350f5c48
10 changed files with 279 additions and 11 deletions
+10 -7
View File
@@ -18,24 +18,27 @@ namespace core {
namespace {
constexpr std::array<std::uint32_t, EqBandIndex::kBandCount> kDefaultCenters{
40U, 100U, 250U, 1000U, 4000U, 12000U};
20U, 100U, 400U, 1000U, 3000U, 8000U};
constexpr std::array<float, EqBandIndex::kBandCount> kDefaultQ{
1.414F, 1.0F, 1.0F, 1.0F, 1.0F, 1.0F};
[[nodiscard]] std::array<EqBandSettings, EqBandIndex::kBandCount>
makeDefaultBands() noexcept
{
return std::array<EqBandSettings, EqBandIndex::kBandCount>{
EqBandSettings{GainDb::zero(), *FrequencyHz::tryFromHz(kDefaultCenters[0]),
1.414F},
kDefaultQ[0]},
EqBandSettings{GainDb::zero(), *FrequencyHz::tryFromHz(kDefaultCenters[1]),
1.414F},
kDefaultQ[1]},
EqBandSettings{GainDb::zero(), *FrequencyHz::tryFromHz(kDefaultCenters[2]),
1.414F},
kDefaultQ[2]},
EqBandSettings{GainDb::zero(), *FrequencyHz::tryFromHz(kDefaultCenters[3]),
1.414F},
kDefaultQ[3]},
EqBandSettings{GainDb::zero(), *FrequencyHz::tryFromHz(kDefaultCenters[4]),
1.414F},
kDefaultQ[4]},
EqBandSettings{GainDb::zero(), *FrequencyHz::tryFromHz(kDefaultCenters[5]),
1.414F},
kDefaultQ[5]},
};
}
@@ -30,6 +30,7 @@ enum class Adau1701Error {
DownloadFailed,
NotBooted,
SafeloadFailed,
InvalidParameter,
};
} // namespace adau1701
@@ -38,6 +38,8 @@ namespace adau1701 {
namespace {
constexpr char kTag[] = "Adau1701";
constexpr int kI2cPort = 0;
/** Index 0 is the fixed high-pass band (SigmaStudio band 1); not safeloaded. */
constexpr std::uint8_t kFixedHighPassBandIndex = 0U;
} // namespace
Adau1701Driver::Adau1701Driver(Adau1701Pins pins)
@@ -197,6 +199,10 @@ std::expected<void, Adau1701Error> Adau1701Driver::applyMixer(
std::expected<void, Adau1701Error> Adau1701Driver::setEqBand(
core::EqBandIndex band, core::GainDb gain, core::FrequencyHz center, float q)
{
if (band.value() == kFixedHighPassBandIndex) {
return std::unexpected(Adau1701Error::InvalidParameter);
}
if (auto ready = ensureBooted(); !ready) {
return ready;
}
@@ -227,6 +233,9 @@ std::expected<void, Adau1701Error> Adau1701Driver::applyEq(
}
for (std::uint8_t i = 0; i < core::EqBandIndex::kBandCount; ++i) {
if (i == kFixedHighPassBandIndex) {
continue;
}
const auto index = core::EqBandIndex::tryFromIndex(i);
if (!index) {
return std::unexpected(Adau1701Error::SafeloadFailed);
@@ -25,6 +25,8 @@ core::DspError Adau1701Dsp::mapError(Adau1701Error error) noexcept
switch (error) {
case Adau1701Error::NotBooted:
return core::DspError::NotBooted;
case Adau1701Error::InvalidParameter:
return core::DspError::InvalidParameter;
case Adau1701Error::SafeloadFailed:
return core::DspError::SafeloadFailed;
default: