Speak freely. Leave less voiceprint. No phone required.
Radio-silent-by-default ESP32-S3 USB voice obfuscation for defensive voice-cloning resistance research.
PhonemeFree Unplugged is the hardware branch of PhonemeFree: a small ESP32-S3 firmware project that captures microphone audio, alters the PCM stream locally, and presents the result to a host as a class-compliant USB microphone.
It is not a cloud filter, not a voice deepfake toy, and not an Android app. It is a radio-silent-by-default peripheral for studying a narrow defensive question: what happens if the microphone path stops handing clean biometric voiceprints to everything upstream?
Voice-cloning systems do not need magic. They need samples.
Most defenses start after audio has already become data: recorded, uploaded, indexed, embedded, or used for model training. PhonemeFree Unplugged moves the defensive boundary into the capture device itself.
The first firmware MVP is deliberately plain:
- Capture voice from an I2S microphone.
- Process it locally on the ESP32-S3.
- Return the altered signal as a USB microphone.
- Keep configuration offline through a temporary WPA2 Wi-Fi AP opened only during a physical maintenance window.
- Measure latency, underruns, and stability from there.
PhonemeFree Unplugged is:
- An ESP32-S3 firmware project.
- A USB Audio Class 1.0 microphone device.
- A local
I2S -> DSP -> USBaudio pipeline. - A small testbed for pitch, noise, and formant-style voice obfuscation.
- A companion hardware path for the main PhonemeFree research project.
PhonemeFree Unplugged is not:
- A full anonymity guarantee.
- A network voice encryption tool.
- A hidden recorder.
- A cloud speech service.
- A commercial SDK, SaaS component, or polished consumer product.
Current phase: v0.1 MVP planning and repository setup.
Target release: v0.1.0.
Planned for the first functional pass:
- Reference hardware build locked to ESP32-S3-WROOM-1 N8R8/N16R8 + ICS-43434.
- ESP-IDF scaffold for ESP32-S3.
- I2S capture from ICS-43434-compatible microphone hardware, with INMP441 as a fallback.
- PCM conversion to 16 kHz / 16-bit / mono.
- DSP pipeline with bypass, pitch shift, and deterministic noise injection.
- USB Audio Class 1.0 output using TinyUSB.
- Radio-silent-by-default WPA2 configuration AP with captive portal.
- Physical button trigger for temporary maintenance mode.
- LittleFS-hosted terminal-style control UI.
- WebSocket parameter updates with atomic DSP state.
- Basic Unity tests for components that can run without hardware.
The granular MVP plan lives in docs/project/PLAN_V0.1_MVP.md.
| Component | Target |
|---|---|
| MCU | Reference: ESP32-S3-WROOM-1 N8R8/N16R8 dev board |
| Microphone | Reference: ICS-43434 I2S microphone breakout; fallback: INMP441 I2S module |
| USB | Native ESP32-S3 USB OTG in device mode |
| Audio | 16 kHz, 16-bit, mono PCM |
| Storage | Flash with LittleFS partition for web assets |
| Power | 5V from USB-C host |
Default I2S pins:
| Signal | GPIO |
|---|---|
| BCK | 4 |
| WS | 5 |
| DATA | 6 |
External analog microphones through a 3.5 mm P2/TRS/TRRS jack are a low-priority future expansion, not part of the v0.1 implementation pipeline. If explored later, the preferred path is a small external analog front-end or audio codec that outputs I2S back into the ESP32-S3, instead of feeding raw microphone audio directly into the MCU ADC. This keeps the main firmware architecture closer to the current I2S -> DSP -> USB path and avoids making analog gain, biasing, jack pinout, and noise handling part of the MVP.
Bluetooth headset or Bluetooth microphone connectivity is intentionally out of scope. It is excluded both by design and by the ESP32-S3 hardware profile: the project is built around local wired USB audio output, while common Bluetooth headsets rely on Bluetooth Classic audio profiles that are not a fit for the ESP32-S3 BLE-focused target. Bluetooth audio is not in the implementation pipeline.
ICS-43434
|
v
I2S DMA -> input ring buffer -> DSP engine -> output ring buffer -> TinyUSB UAC
^
|
On-demand WPA2 AP + captive portal + WebSocket
Core firmware map:
| Layer | Planned Location | Notes |
|---|---|---|
| Application init | main/ |
Boot orchestration and task startup |
| I2S input | components/hal_i2s/ |
Microphone capture and PCM conversion |
| Ring buffers | components/hal_ringbuf/ |
Shared ESP-IDF ring buffer instances |
| DSP | components/dsp_* |
Pitch, noise, optional formant, engine task |
| USB audio | components/usb_audio_uac/ |
TinyUSB UAC microphone, currently UAC2 pending host validation |
| Wi-Fi AP | components/wifi_ap/ |
Radio-silent-by-default WPA2 access point, physical maintenance trigger, DNS captive portal |
| Portal | components/webserver_portal/ |
esp_http_server, WebSocket, status API |
| UI assets | data/ |
LittleFS-hosted index.html |
| Directory | Purpose |
|---|---|
| docs/ | Public documentation grouped by subject. |
| docs/project/ | Planning, roadmap, and release scope. |
| docs/hardware/ | Public hardware BoMs, sourcing notes, and assembly references. |
| docs/firmware/ | Firmware architecture and implementation notes. |
| docs/legal/ | Licensing model, release compliance, third-party notices, and branding policy. |
| hardware/ | Hardware build material, from breadboard through future PCB work. |
| hardware/schematic/ | Conceptual schematic diagrams and future schematic sources. |
| hardware/breadboard/ | Temporary first-pass wiring and bring-up notes. |
| hardware/perfboard/ | DIY double-sided perfboard build notes. |
| hardware/pcb/ | Future PCB source files and schematic/layout material. |
| hardware/mechanical/ | Enclosure, acoustic port, and mounting notes. |
| hardware/manufacturing/ | Future Gerbers, drill files, BoM exports, and release fabrication packages. |
| assets/branding/ | Public branding assets used by the repository. |
| tools/ | Helper scripts and local automation. |
This repository now contains the initial ESP-IDF scaffold described in docs/project/PLAN_V0.1_MVP.md.
Expected toolchain:
- ESP-IDF with ESP32-S3 support.
- CMake and Ninja as provided by ESP-IDF.
- Python environment managed by ESP-IDF.
- PowerShell for local helper scripts on Windows.
On this Windows setup, run ESP-IDF commands through EIM:
eim --do-not-track true run "idf.py set-target esp32s3"
eim --do-not-track true run "idf.py build"
eim --do-not-track true run "idf.py flash monitor"See docs/firmware/ESP_IDF_SETUP.md for local setup notes.
- PRD captured locally.
- v0.1 MVP plan.
- v0.1 reference hardware build.
- Hardware bring-up checklist.
- ESP-IDF scaffold.
- Local ESP-IDF build validation.
- Ring buffer component.
- Deterministic noise DSP.
- USB microphone enumeration.
- I2S microphone capture with ICS-43434.
- End-to-end
I2S -> DSP -> USBaudio. - On-demand WPA2 Wi-Fi AP and captive portal.
- WebSocket DSP controls.
- First hardware acceptance pass.
| File | Purpose |
|---|---|
| docs/hardware/HARDWARE_BOM_PUBLIC.md | Public hardware BoM for AliExpress-style sourcing and DIY assembly. |
| docs/hardware/REFERENCE_BUILD_V0.1.md | Locked reference hardware build for the first firmware MVP. |
| docs/hardware/BRINGUP_CHECKLIST.md | Bench checklist for validating hardware before firmware debugging. |
| docs/hardware/SCHEMATIC_CONCEPT.md | Conceptual schematic, wiring diagrams, and PCB block direction. |
| docs/project/PLAN_V0.1_MVP.md | Granular plan from repository setup to first firmware MVP. |
| LICENSE.md | Dual-license policy for firmware/software and hardware design files. |
| docs/legal/README.md | Licensing scope, compliance notes, contribution guidance, and release obligations. |
| docs/legal/THIRD_PARTY_LICENSES.md | Current third-party dependency license notice policy. |
| docs/legal/BRANDING_POLICY.md | Project name, logo, and fork branding guidance. |
| docs/legal/RELEASE_COMPLIANCE.md | Pre-release checklist for firmware binaries and hardware packages. |
| docs/README.md | Documentation directory map. |
| hardware/README.md | Hardware directory map. |
| assets/README.md | Assets directory map. |
| tools/README.md | Tooling directory map. |
| AGENTS.md | Persistent Codex project instructions and engineering constraints. |
| README.md | Project overview, status, and development map. |
More project documents will be added as the firmware takes shape.
PhonemeFree Unplugged uses a dual-license model:
- Hardware design source, PCB files, schematic files, enclosure/mechanical files, manufacturing exports, and hardware build documentation are licensed under
CERN-OHL-S-2.0. - Firmware source code, embedded web UI, build files, tests, tooling, and firmware/project documentation are licensed under
AGPL-3.0-or-later.
See LICENSE.md and docs/legal/ for the full policy. Third-party dependencies keep their own upstream licenses.
The PhonemeFree and PhonemeFree Unplugged names, logos, icons, and visual identity are project branding. The open source and open hardware licenses do not grant trademark rights or permission to present modified products as official.
The intended posture is local-first and radio-silent by default:
- No cloud audio processing.
- Wi-Fi radio off during normal USB microphone operation.
- Configuration AP only during a physical maintenance window.
- WPA2 required for the configuration AP.
- AP inactivity timeout after 2 minutes without client/heartbeat.
- AP hard cap after 10 minutes even if a client remains connected.
- No internet routing from the device AP.
- No persistent audio logging.
- No app-layer portal authentication beyond WPA2 in the first MVP.
- No hidden recording path.
PhonemeFree Unplugged does not claim universal biometric anonymity. It is a defensive research tool whose protection level must be measured against real voices, real rooms, real microphones, and real models.
Phoneme is the minimum distinctive unit of speech sound. It is also one of the layers modern voice systems learn to bind to speaker identity.
Free is a deliberate reference to SpeakFreely, an early encrypted VoIP tool from an older internet where privacy was often an engineering act rather than a product checkbox.
Unplugged marks the hardware path: local signal processing, USB output, offline configuration, and no dependency on phone audio routing.
PhonemeFree Unplugged is the inverse of a voice deepfake: instead of synthesizing a voice identity, it tries to damage the capture path that preserves one.
Built for people who would rather not donate their voiceprint to the next model by accident.