Ohrwurm
I want a small voice recorder that does not make a moral problem out of remembering things.
Most convenient voice tools now come with an account, an upload path, and the quiet assumption that spoken notes are raw material for someone else’s system. That may be fine for meeting minutes. It is not the default I want for workshop notes, loose ideas, or things said before I know whether they should exist anywhere else.
Ohrwurm is a seed for a different recorder. Local first. Boring on purpose. Useful before it becomes clever.
The basic shape
The usual pitch is simple: record audio, send it away, get smart text back.
I want the order changed:
press button -> record local file -> keep control -> process later if neededThe recorder should work if the phone is off, the network is down, and no AI service is available. Transcription can come later. Recording should not depend on it.
Trust is the feature
A voice note is not just audio. It is often a thought before it has manners.
If the device makes me wonder where the file went, who processed it, or whether it was added to a training set, it has failed at being a notebook.
A good recorder should be boring in the right places. The file exists. I can copy it. I can delete it. Nothing quietly leaves the device because someone thought that would make the onboarding nicer.
Small decisions
Ohrwurm starts from a plain assumption: data belongs with the person who made it. Movement is explicit. Export is a choice. Sync is optional.
That changes the boring choices:
- WAV files before clever formats
- microSD before cloud storage
- button recording before app pairing
- local transcription before API calls
- documented hardware before sealed plastic
First version
The first useful Ohrwurm does not need to be pretty.
The current plan is to start with the hardware now on the bench: the Waveshare ESP32-S3-LCD-0.85, SKU 33878, variant ESP32-S3-LCD-0.85-EN. It is smaller and looks more recorder-shaped out of the box: ESP32-S3, 8 MB Flash, 8 MB PSRAM, TF/microSD, USB-C, a tiny 128 × 128 display, ES8311 playback codec, ES7210 microphone capture path in Waveshare’s demo code, buttons, and eight RGB LEDs, because apparently every board now needs a tiny disco.
The -EN part matters: this version ships without the lithium battery. That is inconvenient, not fatal. Waveshare still documents a 3.7 V MX1.25 2-pin battery charge/discharge header and battery management circuit. For the first pass, USB-C power is fine. Battery runtime is not the foundation.
The previous M5Stack CoreS3 K128 remains a fallback/reference board: ESP32-S3, microphone input, microSD, USB-C, screen, buttons, power management, and a 500 mAh battery in the standard package according to the M5Stack docs. It can stay in the drawer for now.
The little Waveshare board now records.
Current bench behavior:
PLUS/right: start recording
PLUS/right again: stop and save WAV
PWR/middle: play the latest WAV locally
blue: idle
red: recording
green: saved
cyan: playbackThe firmware writes numbered mono WAV files to the microSD card root: REC00001.WAV, REC00002.WAV, and so on. They are 16 kHz, 16-bit PCM. Very ordinary files. Good.
The microphone path was a small trap. The useful signal came from one ES7210 TDM slot, so the current firmware records channel 2 as mono. Earlier diagnostic files captured all four slots; that helped find the working channel, then got removed from the normal path.
A 30-second German test recording worked. Bob pulled the WAV over USB serial, without removing the card, and local whisper.cpp transcribed it with the small model. The transcript had a few normal errors, including turning Meta into Meter once. Annoying, but acceptable for this stage. The important part: the audio is useful enough for local transcription.
So the first useful loop exists now:
record on the device -> replay on the device -> copy the WAV -> transcribe locally if wantedThe repo has the detailed bring-up notes and firmware: utrost/Ohrwurm.
The next boring test is reliability. Repeated longer recordings first. Then the real thirty-minute USB-powered run. Battery, case, and smaller hardware come after that.
Why this is a seed
Ohrwurm is partly about building a gadget because gadgets are fun. Fine. Guilty.
The more useful idea is smaller: make the capture step trustworthy again. First make a recorder. Then make it clever later.
Project repo: utrost/Ohrwurm
See also: Learning Soldering, Workbench, Projects