LEVELAPI2

Realtime adjuster results

THE REALTIME ADJUSTER,
MEASURED CASE BY CASE

LevelAPI2 202609280, Medium preset, measured by the published test method on 113 cases at -23 LUFS and 67 programme cases at -16 LUFS: synthetic level jumps and pauses, broadcast recordings, films, music, read speech, conversation and a live stream: 25 hours of material. Every graded line is shown with every case that fails it and the measured figure.

68/68Programmes on target, -23 LUFS
588/589Block-size runs identical
50 msLatency, fixed
113 + 67Cases

WHAT WAS DECLARED

DeclarationValue
DeviceLevelAPI2 realtime adjuster, revision 202609280, preset Medium, every other setting at its default
Target-23 LUFS; the programme cases again at -16 LUFS
True-peak ceiling-1 dBTP, the default (SetTruePeakCeilingDb)
Latency50 ms: 2400 frames at 48 kHz, 2205 at 44.1 kHz, measured on the audio
Maximum boost+12 dB
Reference block10 ms (480 frames at 48 kHz, 441 at 44.1 kHz)
Block sizes declared identicalevery size. Tested at 20 ms and 256, 512, 1024 and 2048 frames on every case but P6 and the conversation cases, and at 64 frames on the synthetic cases and the EBU / ITU files
Program lengththe whole stream by default; the long cases again with 900 s

GRADED, AT -23 LUFS

The five pass lines of the method, section by section. A failing row stays on this page with its figure and what it is.

Pass lineScopeResult
G1Whole-case integrated output within ±1 LU of ‑23 LUFS, every programme case68 of 68, and 15 of 15 with a 900 s program length; all pass at every other block size
G2Long-term loudness in band on every case longer than 16 min13 of 15; 14 of 15 with a 900 s program length
G3Maximum true peak at or under ‑0.8 dBTP on the lossless cases (synthetic signals and the EBU / ITU files), at every block size47 of 49 at every block size; the highest passing case reads ‑0.99 dBTP
G4The last 30 s of each constant synthetic part within ±1 LU, where the need is within the +12 dB maximum67 of 76, the same parts at every block size
G5The output at every other block size identical to 10 ms blocks, sample for sample20 ms 108 of 108; 64 frames 49 of 49; 256 frames 108 of 108; 512 frames 108 of 108; 1024 frames 108 of 108; 2048 frames 107 of 108

Every failing row

LineCaseMaterialMeasuredWhat it is
G2P12Live stream 1, game audio and voice87.03 % in bandA sparse live stream: over its quiet stretches (-35 to -58 LUFS) the gain sits on the +12 dB maximum and the output stays low. The fixed-gain two-pass reference reads 69.1 % here.
G2P6Long run, four mixes back to back (workout, mixed, pop, rock)92.24 % in bandThree hours and 42 minutes of music with no program length: after two hours a new minute is too small a share of the long-term correction to move it. With 900 s it passes.
G3S6.1pink T-15, 10 s silence, bursts at T10 ms ‑0.46, 20 ms ‑0.46, 64 frames ‑0.46, 256 frames ‑0.46, 512 frames ‑0.46, 1024 frames ‑0.46, 2048 frames ‑0.46 dBTPWhite-noise bursts after a quiet passage and digital silence. The limiter holds -1 dBTP on its own 4x estimate; a BS.1770 meter reads these bursts up to about 0.6 dB higher. The ceiling setting is there for this: set it that much lower for a guarantee on such material.
G3S6.2pink T-15, 10 s room tone at -50, bursts at T10 ms ‑0.46, 20 ms ‑0.46, 64 frames ‑0.46, 256 frames ‑0.46, 512 frames ‑0.46, 1024 frames ‑0.46, 2048 frames ‑0.46 dBTPAs S6.1, with room tone at -50 LUFS instead of silence.
G4S3.up part 2P5, -12 dB -> 0 dB at 180 s‑24.89 LUFSProgramme material split at its file joins, 30 to 83 s after a 12 dB step: the ride has not settled yet.
G4S3.up part 3P5, -12 dB -> 0 dB at 180 s‑20.50 LUFS (the fixed-gain reference reads ‑20.50)Programme material split at its file joins, 30 to 83 s after a 12 dB step: the ride has not settled yet.
G4S3.up part 4P5, -12 dB -> 0 dB at 180 s‑24.80 LUFSProgramme material split at its file joins, 30 to 83 s after a 12 dB step: the ride has not settled yet.
G4S3.down part 1P5, 0 dB -> -12 dB at 180 s‑21.25 LUFSAs S3.up, after a 12 dB step down.
G4S3.down part 2P5, 0 dB -> -12 dB at 180 s‑25.20 LUFSAs S3.up, after a 12 dB step down.
G4S5.-60.30 part 3pink T-10, 30 s room tone at -60, pink T-10‑24.13 LUFSRoom tone in a pause of 30 s or more is lifted up to 12 dB. The returning programme meets that boost and is over-corrected afterwards, so the part ends up to 1.6 LU low.
G4S5.-60.120 part 3pink T-10, 120 s room tone at -60, pink T-10‑24.56 LUFSRoom tone in a pause of 30 s or more is lifted up to 12 dB. The returning programme meets that boost and is over-corrected afterwards, so the part ends up to 1.6 LU low.
G4S5.-50.120 part 3pink T-10, 120 s room tone at -50, pink T-10‑24.26 LUFSRoom tone in a pause of 30 s or more is lifted up to 12 dB. The returning programme meets that boost and is over-corrected afterwards, so the part ends up to 1.6 LU low.
G4S5.-45.120 part 3pink T-10, 120 s room tone at -45, pink T-10‑24.07 LUFSRoom tone in a pause of 30 s or more is lifted up to 12 dB. The returning programme meets that boost and is over-corrected afterwards, so the part ends up to 1.6 LU low.
G5S7 at 2048 framespink T-10, reset at 120 s85 of 3000 ticks differ from 120.0 sThe test harness resets the stream on the first host block boundary at or after 120 s. At 2048 frames that boundary falls 1024 frames later than at every other size, so the stream is reset at a different sample. Identical again from 140.8 s.

WHAT A LISTENER HEARS, AND WHAT CHANGES IT

Where the adjuster is reliable, and what it does outside that range. "What changes it" names only what the shipped API offers, and what a host controls anyway.

What the listener hearsCase that shows itWhat changes it
After a jump to louder material (an ad after a quiet programme) it is too loud for about half a minute, by up to 7.7 LU, then settlesS1 and S2 steps up: back in band in 26-48 s (S2.20, which arrives on the +12 dB maximum: 85 s)Not adjustable. A host that knows the boundary (a playlist change, an ad insertion) can call Reset() there: the stream starts fresh from 0 dB (S7: back in band 9.8 s after a reset). Reset() allocates, so call it off the audio thread
After a drop to quieter material it stays quiet for up to a minute and a halfS1 and S2 steps down: back in band in 47-83 sNot adjustable; Reset() at a known boundary as above
Material more than 12 LU under the target stays under itS1.-20 (never back in band), P12's quiet stretchesNot adjustable: +12 dB is the most the adjuster adds
At a raised target, quiet material stays under it: at -16 LUFS, anything quieter than about -28 LUFS-16 LUFS run: P7.02 (‑17.65 LUFS), P13.3 (‑18.79 LUFS)SetTargetLUFS(): a lower target leaves more material within +12 dB. The same cases pass at -23 LUFS
Background noise in a pause is raised (room tone, hiss, an audience), by up to 12 dB when the pause lasts 30 s or more. The programme then returns about 2 LU loud for 25-51 s, then up to 1.6 LU quietS5, room tone for 30 s or 120 s. Five seconds of room tone costs nothingNot adjustable
After digital silence: pauses of 10 s or less return unchanged. After 30 s, material that needed a lift returns up to 4 LU quiet for about 6 s; after a minute or more the correction has faded back to 0 dB, and quiet material returns up to 10 LU under the target, back in band in about 12 sS4, silence of 2 to 120 s. Material at the target returns clean after every lengthNot adjustable. A long pause is treated as the end of the programme
A stream switched on before its programme starts raises the room tone by 12 dB; the programme arrives up to 7.4 LU loud, then dips, back in band in 24-141 sS8, room tone for 30 to 300 s before the programmeStart the stream, or call Reset(), when the programme starts
A percussive entry after a quiet passage is up to 3.8 LU loud for about 18 sS6.1, S6.2Not adjustable
Peaks read above the ceiling on a BS.1770 meter: up to about 0.6 dB on noise-like material, up to about 0.35 dB on lossy programme at -16 LUFSS6: ‑0.46 dBTP at the default -1 dBTP. At -16 LUFS: P13.4, ‑0.66 dBTPSetTruePeakCeilingDb(): set the ceiling that much lower. Lossless programme material stays under -0.8 dBTP at the default
On a feed that runs for hours, the level drifts up to about 1.3 LU after the first two hoursP6: long-term loudness in band 92.2 %SetProgramLengthSeconds(900): 99.9 % on the same feed; neutral on an hour of material
Peaks above the ceiling with the limiter offnot measuredSetLimiterEnabled(true), the default

AGAINST THE REFERENCE PROCESSINGS

Median share of the time the output's loudness sits within ±1 LU of the target, over 10 s, 30 s and 300 s windows, for the adjuster / a two-pass normalisation that knows the whole file in advance / the untouched input. The two-pass figure is what a file-based workflow achieves; a live adjuster cannot know the future, and trades that for following the programme as it changes.

MaterialCasesW10 in band %W30 in band %W300 in band %Gain movement dB/min
Broadcast recordings1177 / 66 / 298 / 77 / 0100 / 100 / 04.0
Zapping stream162 / 25 / 2979 / 24 / 3198 / 30 / 223.6
EBU / ITU reference programme424 / 11 / 1329 / 32 / 32100 / 60 / 5915.1
Films1723 / 19 / 343 / 25 / 394 / 63 / 017.0
Music mixes558 / 53 / 069 / 62 / 095 / 94 / 02.5
Read speech, long360 / 51 / 383 / 62 / 1100 / 91 / 05.4
Poetry readings, short2060 / 62 / 098 / 99 / 0100 / 100 / 05.6
Conversation458 / 54 / 181 / 65 / 0100 / 77 / 05.0
Monologue over a bed155 / 37 / 372 / 43 / 399 / 57 / 14.4
Live stream123 / 22 / 1939 / 24 / 2491 / 69 / 3120.6
Long run, 3 h 42 min156 / 31 / 165 / 35 / 185 / 37 / 02.8

THE SYNTHETIC CASES

Pink noise at defined levels, programme material stepped by 12 dB, silence, room tone and noise bursts. "Need" is the gain a perfect fixed gain would apply after the change; "over" and "under" are the largest excess of the short-term loudness over the minute after it.

CaseSignalChange at sNeed dBOver LUUnder LUAbove band sBack in band s
S1.+6pink T -> T+6180‑6.06.00.027.035.2
S1.+12pink T-2 -> T+10 (re-based)180‑10.07.30.142.142.6
S1.+20pink T-10 -> T+10 (re-based)180‑10.07.70.544.947.9
S1.-6pink T -> T-6180+6.00.05.40.050.2
S1.-12pink T -> T-12180+12.00.011.80.071.1
S1.-20pink T -> T-20180+20.00.020.00.0not in the case
S2.6pink T-6 -> T180+0.05.50.424.826.2
S2.12pink T-12 -> T180+0.07.10.738.439.2
S2.20pink T-20 -> T180+0.07.27.118.284.9
S2.-6pink T+6 -> T180+0.00.05.30.047.0
S2.-12pink T+10 -> T-2 (re-based)180+2.00.411.40.068.3
S2.-20pink T+10 -> T-10 (re-based)180+10.00.420.40.083.4
S3.upP5, -12 dB -> 0 dB at 180 s180‑1.64.82.532.3not in the case
S3.upP5, -12 dB -> 0 dB at 180 s246+0.03.92.23.7not in the case
S3.upP5, -12 dB -> 0 dB at 180 s330+2.90.04.80.0not in the case
S3.downP5, 0 dB -> -12 dB at 180 s180+10.41.78.34.5not in the case
S3.downP5, 0 dB -> -12 dB at 180 s246+12.00.01.10.4not in the case
S3.downP5, 0 dB -> -12 dB at 180 s330+14.80.04.81.0not in the case
S4.T.2pink T, 2 s silence, pink T122+0.00.00.00.00.1
S4.T.10pink T, 10 s silence, pink T130+0.00.00.00.00.8
S4.T.30pink T, 30 s silence, pink T150+0.00.00.00.00.8
S4.T.60pink T, 60 s silence, pink T180+0.00.00.00.00.8
S4.T.120pink T, 120 s silence, pink T240+0.00.50.00.00.8
S4.L.2pink T-10, 2 s silence, pink T-10122+10.00.00.50.00.1
S4.L.10pink T-10, 10 s silence, pink T-10130+10.00.00.50.00.8
S4.L.30pink T-10, 30 s silence, pink T-10150+10.00.54.00.06.3
S4.L.60pink T-10, 60 s silence, pink T-10180+10.01.010.00.011.9
S4.L.120pink T-10, 120 s silence, pink T-10240+10.01.010.00.011.9
S5.-60.5pink T-10, 5 s room tone at -60, pink T-10125+10.00.00.50.00.1
S5.-60.30pink T-10, 30 s room tone at -60, pink T-10150+10.02.00.127.711.1
S5.-60.120pink T-10, 120 s room tone at -60, pink T-10240+10.02.01.050.8not in the case
S5.-50.5pink T-10, 5 s room tone at -50, pink T-10125+10.00.00.50.00.1
S5.-50.30pink T-10, 30 s room tone at -50, pink T-10150+10.02.00.529.238.7
S5.-50.120pink T-10, 120 s room tone at -50, pink T-10240+10.02.01.040.942.9
S5.-45.5pink T-10, 5 s room tone at -45, pink T-10125+10.00.00.50.05.7
S5.-45.30pink T-10, 30 s room tone at -45, pink T-10150+10.02.00.325.131.3
S5.-45.120pink T-10, 120 s room tone at -45, pink T-10240+10.02.00.835.842.0
S6.1pink T-15, 10 s silence, bursts at T130‑0.03.81.817.928.7
S6.2pink T-15, 10 s room tone at -50, bursts at T130‑0.03.82.816.931.5
S8.-60.3030 s room tone at -60, then pink T30+0.07.44.823.523.6
S8.-60.120120 s room tone at -60, then pink T120+0.07.46.038.6141.1
S8.-60.300300 s room tone at -60, then pink T300+0.07.46.038.6141.1
S8.-50.3030 s room tone at -50, then pink T30+0.07.44.318.188.1
S8.-50.120120 s room tone at -50, then pink T120+0.07.45.923.624.1
S8.-50.300300 s room tone at -50, then pink T300+0.07.45.923.624.1
S8.-45.3030 s room tone at -45, then pink T30+0.07.44.316.782.2
S8.-45.120120 s room tone at -45, then pink T120+0.07.45.519.890.1
S8.-45.300300 s room tone at -45, then pink T300+0.07.45.519.890.0

Eight of them, traced

Green: output short-term loudness, with the ±1 LU band. Amber: the gain applied, against the gain a perfect fixed gain would apply (dashed).

S1.+12 A 12 LU step up: too loud for about 40 s, then settled.
-13 -23 -33 +12 0 dB -12 0 s 60 s 120 s 180 s 240 s 300 s 360 s
S1.-12 A 12 LU step down: the lift arrives over about a minute.
-13 -23 -33 +12 0 dB -12 0 s 60 s 120 s 180 s 240 s 300 s 360 s
S2.20 Loud material after a long quiet stretch: the gain arrives on the +12 dB maximum.
-13 -23 -33 +12 0 dB -12 0 s 60 s 120 s 180 s 240 s 300 s 360 s
S3.up The same 12 dB step on programme material.
-13 -23 -33 +12 0 dB -12 0 s 60 s 120 s 180 s 240 s 300 s 360 s
S4.L.30 30 s of digital silence in material that needs a lift.
-13 -23 -33 +12 0 dB -12 0 s 60 s 120 s 180 s 240 s
S5.-50.120 Two minutes of room tone at -50 LUFS in a pause.
-13 -23 -33 +12 0 dB -12 0 s 60 s 120 s 180 s 240 s 300 s 360 s
S6.1 Noise bursts after a quiet passage and 10 s of silence.
-13 -23 -33 +12 0 dB -12 0 s 60 s 120 s 180 s
S8.-50.120 The stream starts on two minutes of room tone.
-13 -23 -33 +12 0 dB -12 0 s 60 s 120 s 180 s 240 s 300 s 360 s

BLOCK SIZES

Every decision is taken on a 10 ms grid counted from the start of the stream, so the output does not depend on how the host cuts the stream into calls. Checked by a 64-bit hash of every output sample, per 100 ms. The last row is the tuned lab chain the release was ported from.

Block sizeCases identicalThread time against 10 msDifferences
20 ms108 of 1080.99xevery output sample identical
64 frames49 of 491.89xevery output sample identical
256 frames108 of 1081.18xevery output sample identical
512 frames108 of 1081.09xevery output sample identical
1024 frames108 of 1081.04xevery output sample identical
2048 frames107 of 1081.01xS7: from 120.0 s, 85 of 3000 ticks
the tuned lab chain45 of 451.00xevery output sample identical

PROGRAM LENGTH ON LONG FEEDS

The cases longer than 16 minutes, with the default (the whole stream) and with a 900 s program length. Neutral on an hour of material; on three hours and more it keeps the long-term level on target.

CaseMaterialLengthIntegrated LUFS, default / 900 sLong-term in band %W300 in band %
P2aZapping stream, recordings 1-1154 min 58 s‑22.80 / ‑22.8299.1 / 99.198.5 / 99.5
P7Poetry, twenty readings in twelve languages40 min 23 s‑23.05 / ‑23.0799.5 / 99.5100.0 / 100.0
P8.2Audiobook, The Cat of Maurice39 min 50 s‑23.21 / ‑23.1799.4 / 99.4100.0 / 100.0
P10.1Music mix 1, classical1 h 00 min‑22.85 / ‑22.7998.8 / 98.890.6 / 90.9
P10.2Music mix 2, chart pop1 h 03 min‑22.53 / ‑22.5099.7 / 99.795.2 / 94.2
P10.3Music mix 3, pop1 h 10 min‑22.36 / ‑22.39100.0 / 100.089.7 / 94.1
P10.4Music mix 4, rock and pop31 min 34 s‑22.47 / ‑22.48100.0 / 100.0100.0 / 100.0
P10.5Music mix 5, workout1 h 00 min‑22.30 / ‑22.2999.5 / 99.599.7 / 99.6
P11Mixed 1, monologue over an intermittent bed59 min 33 s‑22.74 / ‑22.7597.5 / 97.598.8 / 98.7
P12Live stream 1, game audio and voice30 min 36 s‑22.87 / ‑22.8987.0 / 87.091.0 / 91.0
P13.1Conversation 1, European Commission midday briefing (CC BY 4.0)49 min 48 s‑23.09 / ‑23.1099.9 / 99.9100.0 / 100.0
P13.2Conversation 2, FOMC press conference (public domain)28 min 42 s‑23.14 / ‑23.1299.9 / 99.9100.0 / 100.0
P13.3Conversation 3, panel discussion, TIB AV-Portal (CC BY 3.0 DE)1 h 24 min‑23.41 / ‑23.4396.8 / 96.784.7 / 85.8
P13.4Conversation 4, US Supreme Court oral argument (public domain)1 h 49 min‑22.70 / ‑22.6899.8 / 99.8100.0 / 100.0
P6Long run, four mixes back to back (workout, mixed, pop, rock)3 h 42 min‑22.45 / ‑22.4592.2 / 99.985.2 / 94.5
P6 Long-term loudness over 3 h 42 min: default and 900 s program length, with the ±1 LU band.
-21 -23 -25 0 min 30 min 60 min 90 min 120 min 150 min 180 min 210 min

AT -16 LUFS

The programme cases again at the streaming target. The synthetic cases stay at -23 LUFS, where their levels are defined.

Pass lineScopeResult
G1Whole-case integrated output within ±1 LU of ‑16 LUFS63 of 67
G2Long-term loudness in band, cases longer than 16 min11 of 14
G3Maximum true peak at or under ‑0.8 dBTP on the EBU / ITU programme files4 of 4; highest ‑0.88 dBTP

Every failing row

LineCaseMaterialMeasuredWhat it is
G1P7.02Poetry, French 2‑17.65 LUFSNeeds +12.4 dB. Near or beyond the +12 dB the adjuster adds at most, so the target is reached slowly or not at all.
G1P7.03Poetry, German 1‑17.28 LUFSA 132 s reading that needs a large lift: it ends before the ride has settled.
G1P9.02Big Buck Bunny (Blender, CC-BY)‑17.39 LUFSA quiet film with loud peaks: the true-peak ceiling holds it back, not the boost maximum.
G1P13.3Conversation 3, panel discussion, TIB AV-Portal (CC BY 3.0 DE)‑18.79 LUFSNeeds +13.0 dB. Near or beyond the +12 dB the adjuster adds at most, so the target is reached slowly or not at all.
G2P8.2Audiobook, The Cat of Maurice89.73 % in bandNeeds +11.2 dB. Near or beyond the +12 dB the adjuster adds at most, so the target is reached slowly or not at all.
G2P12Live stream 1, game audio and voice50.16 % in bandThe sparse live stream again, further under a higher target.
G2P13.3Conversation 3, panel discussion, TIB AV-Portal (CC BY 3.0 DE)0.11 % in bandNeeds +13.0 dB. Near or beyond the +12 dB the adjuster adds at most, so the target is reached slowly or not at all.

THE MATERIAL

Everything but the synthetic signals and the EBU / ITU files came through lossy sources, so it is kept out of the true-peak grading (G3): a codec's own inter-sample overshoot cannot be told apart from the device's.

HOW IT WAS RUN