Specifications
Every part, purpose-fit for portable audio
Loading 3D view…
| Processor | Espressif ESP32-WROOM-32 (dual-core Xtensa LX6, 240MHz) |
| Memory | 520KB SRAM (no PSRAM) — all features run within the ESP32's built-in memory |
| Display | 2.8" 240x320 TFT Capacitive Touchscreen |
| Dimensions | 63 x 90 x 15 mm |
| Weight | 75g (with case, battery, board, and MicroSD card) |
| Storage | MicroSD up to 2TB (exFAT) |
| Included Storage | 32GB MicroSD card |
| Audio Formats | MP3, AAC, M4A, FLAC, WAV (PCM 8/16/24/32-bit), Opus |
| Audio Output | Bluetooth A2DP to any speaker or headphones |
| Remote Control | AVRCP (play/pause/next/prev from paired device) |
| Bluetooth | Bluetooth 4.2 |
| Wi-Fi | 802.11 b/g/n |
| Web Interface | Built-in Wi-Fi web UI accessible from any browser on the same network |
| Battery | 1200mAh, 16+ hours playback* |
| Charging | USB-C |
| Case | 3D-printed, available in any color |
| Software | Fully activated, OTA firmware updates via Wi-Fi |
*Battery specs based on current prototype. Final product may feature a larger battery.
Under the Hood
The ESP32 chip has 520KB of SRAM, but after the ESP-IDF framework, FreeRTOS, and IRAM reservations, only about 160KB remains for the application. The entire Fonix One software stack — audio decoders, DSP pipeline, Bluetooth streaming, touchscreen UI, file system, and background tasks — shares that space. Here's how.
Custom Audio Decoders
The Fonix MP3 and Fonix AAC decoders are fully bespoke, clean-room implementations purpose-built for the ESP32's Xtensa LX6 processor. Together they comprise approximately 9,500 lines of hand-written C and 900 lines of Xtensa assembly, operating entirely within a shared 25KB memory pool using fixed-point arithmetic with zero floating-point dependencies.
The FLAC decoder is based on miniflac, but has been largely rewritten from the ground up. It handles full 4096-sample blocks while running inside just 25KB of RAM, including all decode buffers. Key hot paths use custom Xtensa assembly for LPC prediction. To our knowledge, this is the most memory-efficient FLAC decoder capable of 4096-sample blocks ever achieved on ESP32 without external RAM.
Polyphase FIR Resampler
Audio files come in many sample rates, but Bluetooth output requires a consistent 44.1kHz. The Fonix One uses a broadcast-quality polyphase convolution resampler with 256 phases and 32 taps per phase, delivering around 80dB of stopband attenuation — far beyond what's typical for embedded audio.
The entire resampler state fits in just 288 bytes of RAM. The inner loop is hand-tuned Xtensa assembly with pipelined loads, zero-overhead hardware loops, and branchless saturation.
5-Band Graphic Equalizer
The EQ uses fixed-point biquad IIR filters instead of floating-point math, which is significantly more efficient on the ESP32's integer-optimized cores. The filter processing has been rewritten in custom Xtensa assembly, bringing CPU usage down to roughly 2% at 44.1kHz. Careful gain staging with headroom management and per-stage saturation ensures clean output even when all five bands are boosted — no clipping, no artifacts.
Memory Limitations, No Compromises.
Every audio file passes through a complete processing pipeline: decode, resample, equalize, apply ReplayGain volume normalization, then stream over Bluetooth — and that's just the audio side. The same 160KB of usable RAM simultaneously runs the touchscreen UI, Bluetooth connectivity and SBC encoding, SD card file system operations, and background tasks like metadata indexing and artwork fetching. Even during playback, 45–50KB of heap remains free.