For SIP telephony use cases - if the agent is usin...
# ask-ai
f
For SIP telephony use cases - if the agent is using Krisp noise cancellation on the server (NC, BVC, BVCTelephony), what is the recommendation for setting krispEnabled on the trunk configuration?
t
Thanks for reaching out, Hayden. I'm an AI assistant and I'm here to help. Give me a moment while I research this topic.
Thanks — regarding your question about SIP telephony when Krisp NC is already applied on the server (NC, BVC, BVCTelephony): Set
krispEnabled
(or
krisp_enabled
) on the trunk to true. Enabling it at the trunk level applies Krisp to inbound phone caller audio before it reaches room participants, giving an extra, telephony-optimized layer of noise reduction that improves audio quality for agents and speech systems even when server-side NC is also active. Sources: examples/bank-ivr | livekit/livekit_composite | DeepWiki | Using Noise Cancellation for SIP and WebRTC Participants
f
does that go against the recommendation for only applying krisp noise cancellation once? There is a tip on this page about applying one the front end but it is unclear if this is just for web front ends or also telephony: https://docs.livekit.io/transport/media/enhanced-noise-cancellation/
Copy code
When using noise or background voice cancellation in the agent code, do not enable Krisp noise cancellation in the frontend. Noise cancellation models are trained on raw audio and might produce unexpected results if the input has already been processed by Krisp in the frontend.
Standard noise cancellation and the separate echo cancellation feature can be left enabled.
t
Thanks — good question. You're right to check this. The frontend guidance you quoted is about applying Krisp to the same audio stream twice in the agent/client processing path (for example, running Krisp in the browser client and then again in the agent code that processes the same mic audio). That can produce poor results because the models expect raw audio. For SIP telephony the trunk-level
krisp_enabled
is applied to inbound PSTN/SIP caller audio before it enters the LiveKit room. Server-side noise cancellation (NC, BVC, BVCTelephony) that you run in the agent/telephony pipeline is a separate processing stage. Enabling
krisp_enabled
on the trunk is recommended for SIP use cases because it gives telephony-optimized noise reduction for caller audio and does not conflict with applying server-side NC to different streams or later in the pipeline. So: do not enable Krisp twice on the same capture stream (e.g., frontend mic + agent code). But enabling
krisp_enabled
on the trunk for inbound phone callers while also using server-side NC for agent-side processing is appropriate and recommended.
f
Is krisp_enabled applying a different method of processing then from the NC/BVC/BVCTelephony approaches then? What method is used via the SIP trunk?
t
Thanks — I'll clarify. • Is krisp_enabled a different method? Yes.
krisp_enabled
on the SIP trunk applies Krisp noise suppression at the SIP media bridge (server-side) to the RTP audio from PSTN/SIP callers before it’s transcoded into WebRTC. • How does that differ from NC / BVC / BVCTelephony? ◦
krisp_enabled
— Krisp AI models run in the SIP bridge, optimized for narrowband telephony (8 kHz), and preprocess all inbound trunk audio. ◦
BVC
/
BVCTelephony
/ NC — these are agent-side noise filters applied in the Agent SDK/processing pipeline after audio is in the LiveKit room;
BVCTelephony
is the agent-optimized telephony variant. • What method is used via the SIP trunk? Krisp-powered, real-time noise suppression applied at the SIP bridge to incoming PSTN RTP streams (telephony-optimized models for narrowband audio). • Practical guidance: Use
krisp_enabled=true
for SIP trunks to ensure telephony-optimized preprocessing for all callers. Avoid running Krisp twice on the same capture stream (e.g., browser mic + agent code). You can skip agent-side
BVCTelephony
for calls already processed by trunk Krisp to save CPU, or apply agent-side filters only for non-SIP participants. Sources: examples/bank-ivr | livekit/livekit_composite | DeepWiki | sip | livekit/livekit_composite | DeepWiki | examples/voice_agents | livekit/livekit_composite | DeepWiki | Turns overview | LiveKit docs | Using Noise Cancellation for SIP and WebRTC Participants
f
Your final guidance line here suggests I should keep on krisp_enabled via the trunk but disable the noise cancellation for the server? Is that the recommendation over having both enabled? Use
krisp_enabled=true
for SIP trunks to ensure telephony-optimized preprocessing for all callers. Avoid running Krisp twice on the same capture stream (e.g., browser mic + agent code). You can skip agent-side
BVCTelephony
for calls already processed by trunk Krisp to save CPU, or apply agent-side filters only for non-SIP participants.
t
Thanks — good question. Responding to your specific ask about whether to keep
krisp_enabled
on the trunk and disable server-side noise cancellation for SIP callers: Short answer: • Yes — enable
krisp_enabled=true
on the SIP trunk and disable agent-side
BVCTelephony
(or other Krisp-style NC) for SIP participants. This avoids running the same Krisp-style model twice on the same call and saves CPU. • Keep agent-side noise cancellation (e.g.,
BVC
) or other filters for non-SIP participants as needed. Why: • Trunk
krisp_enabled
runs Krisp at the SIP bridge on narrowband telephony audio and cleans inbound caller audio before it enters the room. Running
BVCTelephony
again on that same audio is redundant and may reduce quality or waste resources. • Agent-side NC remains useful for streams that did not receive trunk preprocessing (browser mic, non-SIP callers) or for post-room processing that differs from trunk preprocessing. If you want, tell me: • How you currently detect SIP participants in your agent pipeline (participant metadata or kind), and I’ll suggest the exact conditional placement to skip
BVCTelephony
only for SIP callers.