Open menu
DE EN

TOTEMPHONIA STUDIO BERLIN

ENVO app icon

iOS 16+ · iPhone · Open source

ENVO

Volume that listens to the room.

Adaptive volume control for iPhone. ENVO measures the noise around you and levels your audio in real time — so music, podcasts and calls stay clear as the world gets louder or quieter. You set the volume. ENVO keeps it right.

01

The idea

Not constant volume. A constant gap.

You know the dance. On the train, a tunnel roars and you can't hear your podcast, so you turn it up. The train stops, the roar vanishes, and now it's blasting — so you turn it down. Café, gym, plane, sidewalk: all day, your thumb does a job a machine should be doing.

Imagine listening to a podcast at a volume that's just right. "Just right" isn't really about the volume of the podcast — it's about the gap between the podcast and everything else in the room. Acousticians call this the signal-to-noise ratio. When a bus rolls past, the noise floor rises up and swallows that gap, and suddenly you can't make out the words — even though the podcast is playing at exactly the same volume as before.

So what you actually want isn't constant volume. You want a constant gap. And that means the volume has to move — up when the world gets loud, back down when it quiets. That is ENVO's entire job.

02

The measurement

Measuring masking, not loudness.

Think of a camera's light meter. It reads how bright a scene is so the camera can set exposure — but it never keeps the picture. ENVO's microphone reading is exactly that, but for sound: every fraction of a second it computes a single number, turns it into decibels, smooths it, and throws the raw audio away instantly. Nothing is recorded, buffered to disk, or transmitted.

Before that measurement, the signal is split into six octave bands — 125 Hz, 250, 500, 1 k, 2 k, 4 k — because "how loud is this room" and "how much of my audio is this room burying" are not the same question, and only the second one matters here.

The obvious instrument would be an A-weighting filter, the correction a sound level meter applies when it reports dB(A). ENVO measures that too, and reports it in the calibration log, because it is the number you can compare against any SPL app. But A-weighting is a loudness curve, and it is the wrong tool for a masking problem. It discounts 100 Hz by about 19 dB on the grounds that ears are insensitive there — and then a bus, a train or an aircraft cabin, which are essentially a wall of low-frequency drone, reads as unremarkable while making your podcast completely unintelligible.

The reason is a real psychoacoustic effect called the upward spread of masking: low-frequency noise doesn't just mask low-frequency content, it raises the threshold of audibility in the bands above it. So ENVO takes each band's level, spreads it upward at 12 dB per octave, and combines the result using the octave-band importance weights from ANSI S3.5 — the standard for which frequencies actually carry the information a listener needs.

What the low tone does to the high ones. The white bars are the measured band levels; the terracotta area is the extra masking reaching up from the bands below. Under a cabin drone, the 125 Hz band lifts the threshold at 1 k and 2 kHz by around 10 dB — right where speech carries its information. In a room full of voices the threshold sits exactly on the measured level everywhere: there is nothing to reach up. A loudness meter cannot see this difference.

An honest note about the number on screen

The displayed value is an estimate, ±10 dB — and it is not a dB(A) figure.

It is the masking-weighted control level, so it is neither a dB(A) reading nor comparable to an SPL app. Converting to an absolute dB SPL figure would require knowing the microphone's exact sensitivity, which iOS does not expose and which varies by device. The calibration log prints the A-weighted value alongside it — that is the one to compare.

03

The control law

Thinking in decibels, not slider-percent.

Here's a thing about ears that trips up naive volume apps: loudness is logarithmic. Doubling the actual physical sound power doesn't feel "twice as loud" — it feels like a modest step up. That's why the unit we use is the decibel, which is logarithmic by design: every +6 dB is roughly a doubling of amplitude, but only a moderate bump in how loud it feels.

The iPhone volume slider is also not a straight percentage of loudness. It's a tapered fader: its twenty hardware steps are spread across several tens of dB of real acoustic range. A volume app that assumes the slider is proportional to amplitude will hand you two or three times the adjustment you asked for.

ENVO reasons entirely in dB — the language your ear speaks — and converts that intent into slider movement exactly once, through a taper model. Uncalibrated, ENVO assumes a deliberately steeper curve than reality: each requested dB then maps to a smaller slider move, so ENVO errs toward adjusting less than you asked for. Under-delivering is a mild disappointment; over-delivering is a safety problem. Calibrated, the taper is measured on your actual device, and "±6 dB" means ±6 dB on your hardware.

RANGE is a hard ceiling, not a sensitivity dial. ±3, ±6 or ±9 dB — ENVO will never push further than that from your baseline, in either direction. How strongly it reacts is a separate, fixed constant: about 0.5 dB of volume change per dB of room change. Widening the range gives you more headroom without also making ENVO twitchier.

The control law, running. Above, the room: the fine line is the microphone's raw reading, the solid one the noise floor tracked from it. The two spikes are a slammed door and a dropped tray — loud, but brief, and discarded before they reach the floor. Below, the adjustment against its step grid: a staircase, not a ramp. Currently 42dB of room level at ±0.0dB of adjustment.
What that adds up to in practice
The room gets louder byENVO doesExample
under ~5 dBnothinga door opens
~5 dBone step, +3 dB
~12 dBtwo steps, +6 dB
~20 dBthree steps, +9 dB

An office filling up after lunch is about 8 dB. A quiet home to a busy café is about 25. So in daily use you would see one or two steps, occasionally three. Coming back down works the same way, with a deliberate dead zone in between so the volume cannot flutter between two steps.

04

The feedback trap

Finding the room underneath your own music.

The microphone hears everything — including your own music coming out of your own speaker. This is a trap. Picture the naive loop: the room gets a little louder → the mic reads "louder" → the app turns up the volume → now the mic hears more of your own music → it reads "louder" again → it turns up again. The volume runs away to the ceiling with no help from the actual environment. It's the audio equivalent of pointing a camera at its own screen.

The tempting fix is to subtract your playback from the reading. It doesn't work, for a reason worth stating plainly: you can't know how loud your own playback is. The volume setting tells you the gain, not the level — a quiet passage and a loud chorus at the same slider position are twenty decibels apart. Any fixed estimate is wrong nearly all the time, and subtracting a wrong number is worse than subtracting nothing.

ENVO uses percentile noise-floor tracking instead. Music and speech are dynamic: between beats, between words, in decays and pauses, the microphone hears mostly the room. So ENVO keeps a rolling window of the last 10–60 seconds of readings and takes L90 — the level the signal exceeds 90% of the time, the standard statistic for a residual noise floor in environmental acoustics.

A percentile is only as good as the number of readings behind it, which is why ENVO measures ten times a second rather than once. Sampled at 1 Hz, the L90 of a ten-second window is the single lowest of ten readings — an estimator with several decibels of scatter produced by nothing but which millisecond each reading happened to land on. At 10 Hz the same window carries a hundred readings and the estimate is steady.

Whatever of its own output does reach the floor, ENVO measures and removes. It knows exactly when it moved the volume and by exactly how many decibels, which makes its own adjustment a probe signal: step the output by a known amount, watch what the measured floor does, and the ratio is how much of the floor is the device rather than the room. On headphones it settles near zero and nothing is subtracted; on a speaker it climbs, and the device's contribution comes back out.

05

The Lombard Effect

Not following the spiral that makes a restaurant deafening.

In 1911 a French doctor named Étienne Lombard noticed something we all do without realizing: in the presence of noise, people involuntarily raise their voices. You've done it in a loud bar. And here's why it's dangerous for a volume-control app.

A restaurant at 7 p.m. is half full and pleasant. As it fills, people talk a little louder to be heard over each other. That makes the room louder. So everyone talks louder still to clear the new noise floor. The room climbs, conversation by conversation, into a roar — a slow social feedback spiral driven entirely by the Lombard reflex. If a volume app naively measured "the room is getting louder" and dutifully cranked your audio to match, it would ride that spiral straight up and pour it into your ears, all evening, without you noticing until it hurt. This is exactly the "too loud over a long time" failure mode a safety-conscious design has to prevent.

ENVO defends against it by asking two independent questions about the noise, neither of which is "how loud is it".

What shape is it? Speech babble peaks around 500 Hz and keeps substantial energy through 2 kHz. Traffic, ventilation, engines and tyre noise are dominated by 125 Hz and below. ENVO already has the octave-band levels, so this is just a ratio — a genuine band measurement, with nothing between the bands going unseen.

Is it modulating? This is the one that actually separates a person from a fan, and it is temporal rather than spectral. Speech modulates its own level at the syllable rate — three to five times a second, by several decibels. Steady mechanical noise doesn't modulate at all. ENVO bandpasses the level envelope around that rate (2–8 Hz) and measures its depth. This is the standard modulation-domain approach used in voice activity detection, and it is what a purely spectral test cannot do: music is speech-shaped too, and so is any broadband sound in a room with little low end.

The two are averaged rather than multiplied, because they fail in opposite situations and neither should be able to veto the other. Many-talker babble in a packed restaurant averages toward steady noise and loses its modulation, but keeps its speech-shaped spectrum. A broadband hiss in a carpeted room reads spectrally speech-like but does not modulate. Requiring both would miss the first; accepting either would fire on the second.

When the noise floor is dominated by voices, ENVO holds back: it refuses to chase people who are simply talking louder, and saves its response for genuine environmental noise — engines, HVAC, machinery, traffic.

06

Door slams, calibration, changing rooms

Three smaller mechanisms that carry daily use.

Ignoring the door slam

A dropped tray, a slammed door, a single cough: loud, but gone in a heartbeat. You do not want your volume to jump because someone bumped a table. ENVO keeps a short rolling window of recent readings and leans on the median — the typical value, which a lone spike can barely move. A brief burst towering over the recent normal gets gently clipped back before it can reach the noise-floor estimate. But sustained loudness passes through fine: the median catches up within a few seconds, so a genuinely louder room is fully honored while a hand-clap is shrugged off.

Calibration

Every iPhone's volume slider is a curve, not a straight line. A calibration of about 35 seconds measures yours: ENVO plays a carefully generated pink noise test tone (equal energy per octave — it sounds balanced to the ear, unlike harsh white noise) at six volume levels — 25, 40, 55, 70, 85 and 100% — plus a silent step to read the room. If the microphone never hears the test tone clearly above the room, the run fails loudly rather than saving a profile full of nothing: a confidently wrong profile is worse than no profile. ENVO works fine uncalibrated — it simply uses the cautious default taper, and adjusts somewhat less than the range you selected.

Noticing you've changed rooms

Every so often your own audio pauses — the gap between tracks, a beat of silence in a podcast, the end of a sentence on a call. In those moments the microphone gets a pure, uncontaminated reading of the room. ENVO watches for these stretches (five consecutive seconds where nothing rises more than 3 dB above the expected floor) and compares them against the silence floor recorded at calibration. If four of them in a row disagree by more than 6 dB, the room you're in is not the room you calibrated in — and the CALIBRATE button quietly changes to RECAL?.

07

Safety

Why ENVO can't run away with your ears.

This is the part that got the most engineering attention, because a volume controller that can misbehave is not a product — it's a hazard. ENVO stacks several independent guards, any one of which alone would prevent a runaway.

  • 01Hard ceiling

    ENVO will never drive the system above 92% volume, no matter what the room does. It caps ENVO's own contribution only — if you choose a higher volume, ENVO leaves it alone.

  • 02Range cap

    Never more than your chosen ±3, ±6 or ±9 dB from your baseline, in either direction.

  • 03Absolute travel limit

    Independently of the taper, the range and the control loop, ENVO may never move the slider more than 0.25 of its full travel — five hardware steps. Enforced again at the point that actually touches the hardware.

  • 04Rate limit

    The adjustment can't change faster than 0.75 dB per second. Since iOS quantizes to ~3 dB steps, what this buys is spacing: several seconds of consistent intent before any step.

  • 05Your baseline always wins

    The instant you touch a volume button or Control Center, that level becomes the baseline, ENVO's offset resets to zero, and it re-measures the room from there.

  • 06Mean-reverting by design

    When the room quiets down, the offset melts back toward zero on its own — and lands exactly on zero rather than hovering near it. ENVO's resting state is "do nothing".

  • 07Lombard-proofed

    The speech-share damper prevents the slow social spiral from translating into a slow creep on your volume.

  • 08Transient-proofed

    Spikes can't trigger jumps.

  • 09Feedback-proofed

    The floor is measured at the quiet moments of your own program material, and where ENVO's output does get in, it measures its own contribution and subtracts it.

  • 10Never steers blind

    If the microphone stops delivering audio — an interruption, a media-services reset, a failed engine start — ENVO holds its current adjustment and works on reviving the mic, backing off between attempts.

  • 11Knows when it can't measure

    A covered microphone (pocket, bag, face-down) and an input at full scale both produce readings that aren't measurements of the room. ENVO detects both, holds its adjustment, and says so in plain language. A covered mic is caught spectrally: covering a microphone is a low-pass, and a room that merely went quiet keeps its shape.

  • 12Doesn't touch the volume when nothing is playing

    ENVO hands the level straight back the moment playback stops, so your next track never starts at a level you didn't choose.

  • 13Admits when it's powerless

    Some routes — AirPlay receivers, HDMI, some external devices — keep their own volume and silently discard every write. ENVO detects that and says so, rather than reporting adjustments it never made.

  • 14Starts over when the setup changes

    Plug in headphones and your speaker's bleed into the microphone vanishes; unplug them and it reappears. Neither is the room changing. ENVO watches for route changes, drops its adjustment to zero and re-measures.

Guards 01–04 and 06 are proven by property tests that sweep every base volume against every range and several taper shapes, driving the shipping control law rather than a re-implementation of it. In total, 162 tests cover the safety-critical logic, including a closed-loop simulation with the hardware quantizer in it. An earlier version proved its safety properties with a simulation that re-implemented the control loop — which meant it could only ever prove things about itself. All of those tests are in the public source: what this page claims about the guards is readable rather than something to take on faith.

08

Integrity

What ENVO cannot do.

Every item below was measured on real hardware rather than reasoned about. They are here because an app that puts numbers about your hearing on a screen should be judged on how openly it talks about the limits of those numbers.

Limit 01 — the input path

iOS compresses what the microphone delivers. ENVO's decibels are approximate, not exact.

iOS applies automatic gain control to microphone input — quietly turning the mic down as things get louder. Switching that off requires a session mode that also bypasses the output processing chain for the whole device, making every app's playback quieter. For an app whose entire job is managing how loud music is, that trade is not available at any price. The control loop is tuned to account for it instead — ENVO adapts usefully, not accurately, and on this hardware that is the only honest option.

Measured oniPhone 14
Real change20dB
Read at the tap15.6dB
Slope0.78
Return to start0.09dB

Identical ascending and descending, verified against a calibrated sound level meter.

Limit 02 — the wall this eventually hits

With continuous music playing out loud, ENVO cannot go below your starting volume.

The probe described in section 04 can only subtract the music ENVO itself added — the amount above the volume you chose. It has no way to remove the music you were already playing when you pressed START. And on iOS it never will: subtracting your music would require access to the audio another app is playing, and the system does not hand that to anyone.

So when continuous music plays out loud, loudly enough to be the loudest thing in the room, it sets a floor ENVO cannot see beneath. A test bears this out exactly: with the same track at the same volume, the room was dropped by 22 dB and ENVO's measured floor moved 0.4 dB. It had stopped listening to the room and was listening to the music.

What is available downward
Listening throughAdapting downward
HeadphonesFull range. The microphone cannot hear your music at all.
Speech out loudWorks. The gaps between sentences genuinely reach the room.
Continuous music out loudReturns you to your starting volume, but cannot go below it.

Worth noting which way this fails. When your music is the loudest thing in the room, you do not need it turned down in order to hear it — the gap is already enormous. Failing to reduce is a comfort miss, not an audibility one, and ENVO still restores your baseline correctly. It is the least harmful of the available failures, which is why the design accepts it rather than papering over it.

Limit 03 — the number on screen

The level shown is an estimate with ±10 dB of uncertainty.

It is masking-weighted and therefore not a dB(A) figure; it will not match an SPL app, and is not meant to. An absolute dB SPL figure would require the microphone's exact sensitivity, which iOS does not expose and which varies by device. As a relative measure — how much louder has it become — the number is useful; as an absolute sound level measurement, it is not.

09

The app

An instrument, not an interface.

ENVO in a still room: 44 dB ambient, adjustment −3.6 dB, RESPONSE set to SLOW
Still room · 44 dBThe surroundings have fallen below the baseline, so ENVO takes 3.6 dB back. RESPONSE is on SLOW: a 60-second window that ignores single events and moves only when the whole environment shifts.
ENVO in a loud room: 82 dB ambient, adjustment +4.3 dB, RESPONSE set to MED
Busy café · 82 dBThe room has filled up and ENVO sits at +4.3 dB inside a ±6 dB range. MED is a 30-second window — the middle ground between alert and unhurried.
ENVO in a very loud environment: 85 dB ambient, adjustment +7.9 dB, RESPONSE set to FAST, range ±9 dB
Train and tunnel · 85 dBFAST looks at the last 10 seconds and reacts to a passing train; with a ±9 dB range ENVO has three steps available, and it is using almost all of them.
Controls at a glance
ControlWhat it does
RESPONSEReaction speed — SLOW (60 s) / MED (30 s) / FAST (10 s) noise-floor window. Short memory means alert, long memory means calm.
RANGEMaximum adjustment — ±3 dB / ±6 dB / ±9 dB from your baseline. A leash length, not a sensitivity dial.
DIRAllow increases (+), decreases (−), or both.
CALIBRATEA ~35 s room calibration, or a 5 s silence-floor refresh.
START / STOPActivate or deactivate adaptation. Before START, ENVO touches nothing.
AUTO-RESUMERestart ENVO on launch if it was running at last quit.

ENVO runs in the background with any audio app — Music, Spotify, Podcasts, YouTube, audiobooks, calls — keeps hi-fi stereo (A2DP) on your Bluetooth headphones, and leaves your lock screen to your music app. Start and stop with Siri, the Action Button or Shortcuts. Headphones are its best case: there, the mic hears the room, not your music.

10

Privacy

No audio is ever recorded, stored, or transmitted.

Verifiable

You don't have to take my word for it. ENVO is open source.

An app that reads your microphone continuously is asking for trust. And trust shouldn't rest on someone writing pleasant sentences about themselves on their own website. So ENVO's complete source code is public.

Every claim on this page is there to be read: that only levels are computed from the microphone signal and the samples are discarded immediately after; that there is no network call for anything to be sent to in the first place; that the guards in section 07 really are in the shipping control law and not merely in a description of it. The limits in section 08 are in the code too — and hiding them would be pointless anyway once anyone can look.

If you read code, you can check this yourself. If you don't, you can ask someone who does. Either is more than a privacy promise usually offers.

Source on GitHub ↗

ENVO is built to be trustworthy with the most sensitive sensor on your phone. This statement covers the iOS app ENVO by Totemphonia Studio Berlin and serves as its privacy policy.

No data is collected. ENVO has no analytics, no user account and no network connection. No personal data is captured, stored or shared — not even in anonymised form.

The microphone is used exclusively for real-time level measurement. Only instantaneous sound-power levels are computed in memory from the incoming audio and discarded immediately afterwards. No recording is ever created: nothing is written to disk, buffered, or allowed to leave the device.

Everything runs on your device. There is no server, no account, no network call. Calibration profiles and settings are saved only locally on your device and are removed with the app.

In the App Store's App Privacy section, ENVO is accordingly declared as "Data Not Collected", with no tracking. The bundled privacy manifest (PrivacyInfo.xcprivacy) declares no tracking and no collected data types; the single declared API reason is CA92.1 — storing your settings and calibration locally.

Privacy questions go to kontakt@totemphonia.com.

11

Support

Help, feedback, bug reports.

ENVO is built by Kilian Fix at Totemphonia Studio Berlin. Support comes directly from the person who made the app — write to kontakt@totemphonia.com. You can also file bugs and suggestions straight as an issue on the GitHub repository.

Useful in a bug report: your iPhone model and iOS version, what you were listening through (built-in speaker, wired headphones, Bluetooth, AirPlay), what was playing, whether you had calibrated, and your RESPONSE, RANGE and DIR settings. If ENVO displayed a message — MIC COVERED, NOTHING PLAYING, OUTPUT NOT CONTROLLABLE — please include which one.

Replies usually arrive within a few working days.

ENVO reads your environment so your ears don't have to.

From Totemphonia Studio Berlin.

← Back to the studio