Skip to content

Release 2.1.0

Choose a tag to compare

@Gperez88 Gperez88 released this 28 Oct 20:40
· 17 commits to main since this release

🚀 What’s New in 2.1.0

Introduces NES-inspired and Hybrid sound profiles, improving audio character with NES-style mixing, envelopes, pulse duty patterns and output filtering. This release also fixes two integer-rendering issues on no-FPU builds, reduces command queue memory usage and preserves the default Legacy output on FPU builds.

🔊 Sound Profiles

  • New Sound Profiles: Adds Legacy (default), Nes and Hybrid, selectable at runtime through ApuCore::setSoundProfile(). Nes introduces NES-style mixing and stepped pulse duty, while Hybrid adds exponential envelopes and band-limited SAW synthesis.
  • NES-Style Output: Adds profile-specific filtering and level compensation for a more consistent listening experience, while preserving the original Legacy rendering behavior.
  • Consistent Integer Rendering: Nes and Hybrid use the same integer core across platforms, producing identical PCM output for equivalent inputs.

🔧 Changed

  • Reduced Memory Usage: Lowers the default audio command queue capacity from 128 to 64, reducing sizeof(ApuCore) on the host ABI from 22,416 to 13,344 bytes.
  • Configurable Legacy Float Core: Adds PR32_APU_ENABLE_LEGACY_FLOAT to optionally exclude the legacy floating-point renderer on FPU targets, reducing flash usage.
  • Engine Audio Integration: Updates the recommended render block sizes to 512 samples on FPU builds and 1024 on no-FPU builds, reducing processing wake-ups at the cost of increased command latency.

🐛 Fixed

  • Integer DC Blocking: Fixes a persistent negative DC offset after voices are silenced on no-FPU builds.
  • 100% Pulse Duty: Fixes pulse waves rendering as silence at duty = 1.0 on the integer rendering path.

🧪 Testing & Tools

  • Audio Regression Tests: Adds immutable PCM reference fixtures for the Nes, Hybrid and integer rendering paths.
  • Audio Profiling Tools: Adds profile comparison, canonical audio rendering and host/firmware benchmarking tools.

📌 Compatibility Notes

  • Legacy remains the default profile and preserves its existing output on FPU builds.
  • On ESP32-C3, Nes and Hybrid are limited to 22,050 Hz with eight voices due to processing constraints.
  • The reduced command queue capacity may affect applications that depend on more than 63 pending commands.
  • Applications using the integer path should revalidate audio levels and regenerate PCM references affected by the DC blocker fix or the new sound profiles.