VoiceBlender v0.12.0 is out, and it is the most contributor-driven release so far. Session recording grows up, SIP legs learn to carry several streams at once, and turn detection gets fast enough to start generating a reply before the caller has finished talking.
📼 SIPREC session recording, both sides
VoiceBlender now speaks SIPREC (RFC 7865/7866) in both directions. As a Session Recording Server it accepts sessions forked from your SBC or PBX; as a Session Recording Client it forks a room’s participants out to an external recorder.
The good part is what happens next: recorded audio is just another set of leg streams. Write it to disk, or attach it live to STT or an AI agent, using the same API you already use for everything else.
Hardened with real-world interop fixes from Andreas Granig (@agranig) - among
them, a bare rs-metadata body is no longer mistaken for an SDP offer.
🎚️ Multi-stream SIP legs
A single dialog can now carry several m=audio sections (RFC 3264), each with
its own RTP port, direction, language and mixer room.
This was built for live translation, with the original and translated feeds mixed separately, and it rides the SIPREC wire profile so it interops with what is already out there.
⚡ Deepgram Flux turn detection and preflight TTS
Conversational end-of-turn signals, including eager ones, let you start generating a reply before the caller finishes speaking, synthesize it off the critical path, then commit it for instant playback or discard it if the caller keeps going. Real latency wins for voice agents.
Mid-stream STT finalize that keeps the session open came from Liviu Muresan (@Mliviu79).
🔀 Live routing changes
A stream’s routing role can now be changed in place with a PATCH, so
barge-in, whisper and supervisor-monitor scenarios reconfigure mid-call
instead of requiring a teardown.
☁️ Google Cloud Storage for recordings
Recordings can now land in GCS alongside S3, and /record accepts a custom
filename. Both from Mirko Brankovic (@mirkobrankovic82) at Synthflow.
🔊 Better audio, better AMD
An anti-aliasing polyphase resampler, plus a full answering machine detection rework with Goertzel-based voicemail beep detection, both driven by Liviu Muresan.
🆔 Stable event IDs
Every event now carries a stable event_id, also sent as the X-Event-Id
webhook header, so receivers can deduplicate safely. New event-egress metrics
ship alongside it.
Fixes worth calling out
- REFER-transferred legs watch the right dialog for the remote BYE, so no more stuck legs after a transfer (@Mliviu79)
- A mixer IO panic is now contained to the participant that caused it, instead of taking the room with it (@Mliviu79)
- Caller transcripts and DTMF digits stay out of default-level logs (@Mliviu79)
- Transient TTS synthesis failures retry with bounded backoff (@Mliviu79)
- Outbound From identity derived from the registered trunk’s AOR (@Mliviu79)
- VSI WebSocket writes bounded by a deadline, so one slow consumer can no longer stall the event stream
- Recordings finalize whenever a participant leaves, and publish atomically with stereo capture on its own clock
- SIP OPTIONS answered with 200 OK for dispatcher health probes (@mirkobrankovic82)
- Correct inbound SIP webhook signing when using a global webhook secret (@mirkobrankovic82)
- Fail fast on a missing S3 bucket, without breaking least-privilege IAM
Thank you
Huge thanks to this release’s external contributors: Liviu Muresan (@Mliviu79), Mirko Brankovic (@mirkobrankovic82) and Andreas Granig (@agranig). Between them they shipped the resampler, the AMD rework, GCS support, and a long list of hard-won SIP and recording fixes. This release is genuinely better because of you.
Upgrading
Pull the latest release from GitHub:
go get github.com/VoiceBlender/[email protected]
go build -o voiceblender ./cmd/voiceblender
Full changelog: v0.11.2…v0.12.0
Check the API Documentation for the SIPREC endpoints, multi-stream leg options and the new turn detection settings.
Building voice agents, contact centres, or translation over SIP? Come say hi in our Discord - issues and PRs very welcome.