We’re building a Windows desktop calling app for human call-center agents using:
React UI in Electron → restricted command bridge → native Rust/C++ process handling microphone capture, playback, and LiveKit calling.
We currently use LiveKit’s web Krisp integration. In the proposed architecture, audio processing and publishing would happen entirely in the native process.
Does LiveKit provide a supported Krisp integration for this Windows setup?
Specifically:
Is there a package or example for the Rust or C++ SDK?
Are standard noise cancellation and background voice cancellation both available?
Is this covered by our LiveKit Cloud agreement, or would we need a separate Krisp SDK licence?
If this isn’t currently supported, what integration approach do you recommend?
I found this Electron/Krisp discussion, but it concerns the JavaScript/AudioWorklet integration. Our question is about cleaning the human agent’s outgoing microphone audio in a native Windows process, before publishing it to LiveKit.
@rahul, Darryn is right, and it helps to see why, so the native path is clear. LiveKit ships Krisp in two places, and neither is the Rust/C++ SDK. One is the frontend client SDKs, which clean the publisher’s mic; that is the web integration you use today, and the supported-client list is what Darryn linked. The other is the agents plugins (livekit-plugins-krisp, noise_cancellation), but those clean the agent’s input, not a human participant’s outgoing audio (noise cancellation). Your call-center agent’s mic goes to the customer, so the agent path does not fit either.
So for your architecture, clean the audio in the native process yourself. The Rust SDK publishes exactly the frames you push into a NativeAudioSource, so run your NC filter on the captured mic frame and then push the cleaned frame:
use livekit::webrtc::audio_source::native::NativeAudioSource;
use livekit::webrtc::audio_source::AudioSourceOptions;
let source = NativeAudioSource::new(AudioSourceOptions::default(), 48_000, 1);
let track = LocalAudioTrack::create_audio_track("microphone", RtcAudioSource::Native(source.clone()));
// publish `track`, then in your capture loop:
let clean = nc.process(mic_frame); // your native NC engine, applied before publish
source.capture_frame(&clean).await?; // LiveKit sends exactly what you capture
The NC engine is the piece you license directly. LiveKit works with two providers, Krisp and ai-coustics, and either can run as a pre-publish filter here. Standard NC and background voice cancellation are engine tiers, so which you get depends on that licence, not on LiveKit. Since the bundled Krisp is tied to the supported frontends, confirm whether native use is covered with Krisp and LiveKit sales rather than assuming your Cloud agreement carries over.