Skip to content

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.

~160KB usable RAM 25KB decoder pool 288-byte resampler Zero PSRAM