0 to 1.
The provider adapter is responsible for producing it. Themes do not know whether a raw measurement
came from RMS audio, an SDK gain event, or a provider-specific volume callback.
The 0–1 contract
0means silence or no meaningful activity.0.5means ordinary conversational speech.1means a strong, uncommon speech peak.inputVolumeis active while the user is being heard.outputVolumeis active while the assistant is speaking.
Calibration profile
silenceFloor is the raw value at or below which the output is zero. speechReference is the raw
value mapped to normalized 0.5. speechPeak is the raw value mapped to 1. orb-ui derives the
curve between these anchors, so consumers do not have to tune an unexplained exponent.
riseTimeMs and fallTimeMs are the time required for the normalized envelope to move 90% toward
a new value. Shipped profiles currently use 100ms rise and 400ms fall. Processing is based on
elapsed time rather than callback count, so providers with different meter rates still behave
consistently.
These times belong to signal normalization, not theme choreography. They remove provider jitter and
produce a portable speech envelope. A theme can add its own visual response, easing, state
transition, and autonomous motion after normalization.
Built-in adapters keep every available directional envelope warm while a session is active.
Changing between listening, thinking, and speaking selects a direction for rendering; it does
not reset an envelope to an artificial zero. Disconnecting, stopping, or entering an error state
does.
Override a built-in profile
Most applications should keep the shipped defaults. If a custom audio path has a different raw distribution, pass partial overrides for each affected direction:raw is the provider measurement, mapped is the amplitude-mapped value before temporal
processing, and normalized is the stable envelope emitted as outputVolume.
Generate a profile with the guided runner
The provider QA playground generates amplitude anchors instead of asking you to tune sliders:- Run
pnpm buildandpnpm dev:demo. - Open
/playgroundand configure the provider. - Start a real session and select input or output.
- Capture silence, quiet speech, normal speech, and energetic speech.
- Generate the profile and inspect its mapped distribution.
- Repeat for the other direction and compare themes using the same generated profile.
0.5 and energetic speech uses the upper range. Reset
restores the shipped baseline for the selected direction.
Use the runner when validating a provider default or a materially different audio pipeline. It is
not intended as an installation step for every application.
Repeatable provider QA
Compare normalized activity, not equal raw numbers. ElevenLabs client 1.9.0 averages voice-band frequency bins. LiveKit client 2.20.0 computes a different frequency-bin measure with the adapter’s analyser settings. Pipecat’s browser track meters, OpenAI Realtime, and Gemini Live use waveform RMS. A raw value of0.2 therefore does not represent the same audio level in every adapter.
For repeatable microphone tests, feed the same recorded speech at quiet, normal, and louder gains
through the browser’s microphone capture path, with silence between passages. Keep the SDK’s
normal echo cancellation, noise suppression, and automatic gain control settings, and measure the
captured track alongside the SDK’s raw level. Browser gain control can boost quiet speech and
compress the difference between source levels. A digital recording tests that processing path;
physical microphones, room noise, and speaking distance still vary.
Record actual provider output as well as raw, mapped, and normalized samples and state changes.
Check silence, ordinary speech, peaks, pauses, interruption, and restart. Replay the same traces
through proposed profiles and themes so audio differences cannot hide a regression. Validate a
candidate with another voice or phrase before changing a shipped default. Clear saved playground
profiles when checking defaults, and keep credentials out of recordings and trace fixtures.
Calibration API
orb-ui/adapters exports the reusable pieces used by the built-in adapters and playground:
createVolumeNormalizer to emit the same stable envelope. The calibration
fitter accepts four raw sample arrays and returns both a generated profile and distribution metrics.