Speak: ask for telephony audio directly (recommended)
POST /v1/audio/speech can emit phone-ready audio so you never resample on the
client. Shipping now: request a G.711 codec, which is always 8 kHz mono:
audio/basic), 8-bit
companded bytes you can hand straight to the carrier.
For
g711_ulaw / g711_alaw the rate is fixed at 8 kHz: omit sample_rate,
or pass exactly 8000, any other value is rejected. Speak’s default
response_format is wav and its native rate is 24 kHz, so for linear
output pass the sample_rate you actually need rather than inheriting 24 kHz.g711_ulaw (or
pcm at 8000/16000) means no resampling in your code at all, the
cleanest possible path.
Native μ-law: it’s companding, not a sample rate
μ-law (and A-law) is an 8-bit logarithmic companding of 16-bit samples at 8 kHz, a codec, not a rate. Converting between μ-law and 16-bit PCM is a lossless table lookup, not resampling, so it never aliases.- Outbound (Speak → phone):
g711_ulawhands you μ-law bytes ready for the carrier, no encode step on your side. - Inbound (phone → Hear/Omni): the realtime surfaces take PCM16 (Hear
streaming
encoding=pcm16; Omniformat=pcm16), so decode the carrier’s μ-law to PCM16 first. Keep the session at 8 kHz and the only conversion is companding, never a resample.
μ-law ↔ PCM16 (companding only, no resampling)
If you must resample: exact integer ratios
Sometimes you can’t choose the rate at the source, e.g. you already hold a 24 kHz asset (Speak’s native rate) and need 16 kHz for Hear or 8 kHz for a phone leg. Rate-convert with these rational ratios, upsample by L, low-pass, then downsample by M:
The low-pass filter is not optional, it’s the anti-aliasing (on downsample)
and anti-imaging (on upsample) filter that keeps the warning above from biting
you. Set its cutoff just below the lower of the two Nyquist frequencies (half
the smaller sample rate).
Common telephony recipes
Barge-in on noisy / mobile / PSTN lines
On Omni, barge-in is engine-side and automatic: when the caller speaks over the agent, the engine cuts the agent’s audio and emits aflush event; your
bridge stops playback (uuid_break, Twilio clear). See
the Twilio guide for the wiring.
Indian mobile and PSTN lines can still produce false barge-ins when noise looks
like deliberate speech. Preserve the telephony bridge’s echo cancellation,
resampling, and flush handling; do not discard or delay caller audio locally.
See also
Phone agent with Twilio
The μ-law ↔ PCM16 bridge at 8 kHz, end to end.
Stream speech-to-text
Feed live call audio into Hear streaming.
FreeSWITCH integration
Fork SIP/PSTN audio into Omni at 16 kHz.
Errors & limits
Close codes, rate limits, and concurrency.