SPIRITBOX

How it works · Last reviewed 2026-10-09

How SpiritBox works

SpiritBox keeps four live internet radio streams decoding at once and makes one audible at a time, stepping a cursor across a 64-position virtual dial every 50 to 350 ms, with synthetic white noise between stations. That is what a hardware P-SB7 does with an FM tuner; the app does it with streams because a phone has no usable radio chip.

1. Four streams, open at once

Connecting to an internet radio stream takes one to three seconds, and the sweep jumps every 50 to 350 ms, so connecting on the fly is impossible. SpiritBox opens a pool of four streams and keeps all of them decoding in the background, muted. The sweep only chooses which one you hear. Dead streams are replaced with fresh stations without stopping the session.

2. A dial, not a playlist

The four stations are placed at fixed random positions on a 64-step dial, at least six steps apart. The rest of the dial is empty air. The cursor steps through positions, not stations, so most steps are static — and every station comes back at the same point on every pass, like a real receiver. Nothing on the screen marks where the stations live.

3. Bleed at the edges

One or two steps away from a station you get bleed: the station comes through detuned (playback speed 0.96 one step out, 0.92 two steps out), quieter in proportion to the distance, and buried in noise. It is the sound of a tuner almost on a station.

4. Noise between hops

Between stations the app injects synthetic white noise. The P-SB7 does the same: it has no squelch, so its output is a continuous stream of fragment, hiss, fragment, hiss. The ANC control lowers that floor, all the way to silence if you want it.

5. Fragments, not words

A syllable lasts 150 to 250 ms. A 50 to 350 ms dwell cuts broadcasts into grains of that size, separated by hiss. Your speech perception joins successive grains — often from different stations — into "words". That is auditory pareidolia, and it is the whole principle of the instrument. The app adds nothing to it.

The numbers

Live streams in the pool4
Dial positions64, stations at least 6 apart
Dwell (SB7 mode)50 · 100 · 150 · 200 · 250 · 300 · 350 ms, forward or reverse
Frank's Box sweepcontinuous, full band in 4 s
Estes preset200 ms, black screen
Bleedwithin 2 steps, volume ÷ distance, detune 0.96 per step
AM bandnews and talk stations, low-pass filtered at 3.2 kHz
Audio engineSoLoud (sample-level mixing, filters, MP3 decoding)
Recordingfloat32 WAV from the master mix + plain-text source log
Data useabout 4 × 128 kbps ≈ 230 MB/h; low-data mode caps streams at 64 kbps

The modes, and what they copy

SB7

The P-SB7 (2009) sweeps FM in 100 kHz steps and AM in 10 kHz steps at seven dwell speeds from 50 to 350 ms, forward and reverse, injecting noise between steps. SpiritBox reproduces the stepped sweep, the seven speeds, both directions and the noise.

Frank's Box

Frank Sumption's 2002 original used a triangle-wave voltage to slide an AM/FM tuner continuously across the whole band in a few seconds. SpiritBox's Frank's Box mode slides the cursor continuously, full band in four seconds, instead of stepping.

Estes

The Estes method is a protocol, not a device: 200 ms, never below 100, headphones, blindfold. The preset sets 200 ms and blacks out the screen so nothing but the audio is left. Tap to leave.

The source log

When you record, the app writes a WAV of exactly what you heard and, next to it, a text log with every state change: TUNE when a station becomes audible (with its country, codec and bitrate), BLEED when you are one or two steps off, AIR when the cursor is on empty dial, and MARK when you press the button, with whatever was audible at that instant. Any fragment on the recording can be traced to its source and its second.

00:01.6  BLEED  阳信广播电视台 · CN
00:01.8  TUNE   阳信广播电视台 · CN · MP3 0
00:02.0  BLEED  阳信广播电视台 · CN
00:02.2  AIR
00:07.2  BLEED  Dance Wave! · HU
00:07.4  TUNE   Dance Wave! · HU · MP3 128
00:08.0  MARK 1  ← (air)

Proof →

Where the stations come from

Stations come from radio-browser.info, a public, community-maintained directory of internet radio streams. The app discovers an API mirror at startup instead of hardcoding one, identifies itself with a descriptive User-Agent, reports a play to the directory when a station enters the pool, and filters by codec (MP3), by a maximum bitrate in low-data mode, and by your country if you set one. For the AM band it asks for stations tagged news.

Get it on Google PlayOne-time purchase · No ads · No subscription

Questions

Why not use the phone's FM chip?

Most Android phones no longer expose an FM tuner to apps, and the ones that do need wired headphones as an antenna and offer no sweep control. Internet radio is the only source available on every phone. A real RF option via an RTL-SDR dongle is on the roadmap.

Does the app choose what you hear?

No. Station positions on the dial are random at the start of a session, the cursor steps at a fixed rate, and what each station is broadcasting at that instant is outside anyone's control. Nobody decides what you hear, and neither does the app.

What does ANC do?

It lowers the synthetic noise floor between stations, like the SB11-ANC hardware. At maximum the floor is silent and only station fragments and bleed remain.

Can I hold on a station?

Yes: tap the band to hold at that position; FWD or REV resumes the sweep. Holds are logged like everything else.

Sources