You can remove hundreds of unwanted types of background noises from a video room using the Krisp Audio Plugin for Twilio Video to power AI based noise cancellation. Twilio has partnered with Krisp Technologies Inc., a leading technology vendor for noise suppression, in order to provide Twilio customers a best-in-class audio experience. This feature is available for all customers using Twilio Video Rooms.
Using tens of thousands of hours of audio recordings, Krisp.ai has created a sophisticated Deep Neural Network that can differentiate between background sounds and the human voice. It's with this technology that we created the Krisp Audio Plugin for Twilio Video, a lightweight audio processor that can run inside your client application and create crystal clear audio.
The plugin needs to be loaded alongside the Twilio SDK and runs as part of the audio pipeline between the microphone and audio encoder in a preprocessing step. During this step, the AI-based noise cancellation algorithm removes unwanted sounds like barking dogs, construction noises, honking horns, and coffee shop chatter.
After the preprocessing step, the audio is encoded and delivered to the end user. Note that all of these steps happen on your device, with almost no latency, and no media sent to a server.
Twilio Video Noise Cancellation requires you to host and serve the Krisp audio plugin for Twilio as part of your web application. It also requires browser support of the WebAudio API (specifically Worklet.addModule). The table below lists the minimum browser version across major browsers:
Is Supported? | Version | |
---|---|---|
Desktop | ||
Chrome | Supported | 66 |
Edge | Supported | 79 |
FireFox | Supported | 76 |
Safari | Not supported (see Limitations) | - |
Mobile | ||
Chrome on Android | Supported | 66 |
iOS (Safari or Chrome) | Not supported (see Limitations) | - |
If you try to use Krisp noise cancellation on a browser that is not supported, the SDK will return a non-Krisp enabled track to the application and your audio will follow the standard audio pipeline. In this case, you will get audioTrack with audioTrack.noiseCancellation
set to null.
The plugin is available on NPM.
You can install it with
npm install @twilio/krisp-audio-plugin
Once you install the plugin, you need to host the contents of ./node_modules/@twilio/krisp-audio-plugin/dist/
from your web server. We recommend that you add the plugin version number to the hosted path to ensure that the browser does not use stale version when it's updated.
If your application is using the default-src self
content security policy directive, then you should add another directive unsafe-eval
, which is required for the Krisp Audio Plugin to load successfully. In your application code, you will need to specify that you want to use Krisp in noiseCancellationOptions
when you create the local audio track. You also need to specify the path where your application server is hosting Krisp files from step 1 above.
1const { connect, createLocalAudioTrack } = require('twilio-video');23// Create a LocalAudioTrack with Krisp noise cancellation enabled.4const localAudioTrack = await createLocalAudioTrack({5noiseCancellationOptions: {6sdkAssetsPath: 'path/to/hosted/krisp/audio/plugin/dist',7vendor: 'krisp'8}9});1011if (!localAudioTrack.noiseCancellation) {12// If the Krisp audio plugin fails to load, then a warning message will be logged13// in the browser console, and the "noiseCancellation" property will be set to null.14// You can still use the LocalAudioTrack to join a Room. However, it will use the15// browser's noise suppression instead of the Krisp noise cancellation. Make sure16// the "sdkAssetsPath" provided in "noiseCancellationOptions" points to the correct17// hosted path of the plugin assets.18} else {19// Join a Room with the LocalAudioTrack.20const room = await connect('token', {21name: 'my-cool-room',22tracks: [localAudioTrack]23});24}2526/**27* Enable/disable noise cancellation.28* @param {boolean} enable - whether noise cancellation should be enabled29*/30function setNoiseCancellation(enable) {31const { noiseCancellation } = localAudioTrack;32if (noiseCancellation) {33if (enable) {34// If enabled, then the LocalAudioTrack will use the Krisp noise35// cancellation instead of the browser's noise suppression.36noiseCancellation.enable();37} else {38// If disabled, then the LocalAudioTrack will use the browser's39// noise suppression instead of the Krisp noise cancellation.40noiseCancellation.disable();41}42}43}