Options
Menu

Interface AudioProcessor

An AudioProcessor can be added to the SDK, providing access to the audio input stream and the ability to process or analyze the stream before sending it to Twilio. To add the processor, you must implement the AudioProcessor interface and use AudioHelper.addProcessor. You can use AudioHelper.removeProcessor to remove it. Use cases include the following:

  • Background noise removal using a noise cancellation library of your choice
  • Music playback when putting the call on hold
  • Audio filters
  • AI audio classification
  • ... and more!

The following example demonstrates how to utilize AudioProcessor APIs to use background music for local audio instead of using a microphone.

import { AudioProcessor, Device } from '@twilio/voice-sdk';

let audioContext;

class BackgroundAudioProcessor implements AudioProcessor {

 private audioContext: AudioContext;
 private background: MediaElementAudioSourceNode;
 private destination: MediaStreamAudioDestinationNode;

 constructor() {
   if (!audioContext) {
     audioContext = new AudioContext();
   }
   this.audioContext = audioContext;
 }

 async createProcessedStream(stream: MediaStream): Promise<MediaStream> {
   // Create the source node
   const audioEl = new Audio('/background.mp3');
   audioEl.addEventListener('canplaythrough', () => audioEl.play());
   this.background = this.audioContext.createMediaElementSource(audioEl);

   // Create the destination node and connect the source node
   this.destination = this.audioContext.createMediaStreamDestination();
   this.background.connect(this.destination);

   // Return the resulting MediaStream
   return this.destination.stream;
 }

 async destroyProcessedStream(stream: MediaStream): Promise<void> {
   // Cleanup
   this.background.disconnect();
   this.destination.disconnect();
 }
}
// Construct a device object, passing your own token and desired options
const device = new Device(token, options);

// Construct the AudioProcessor
const processor = new BackgroundAudioProcessor();

// Add the processor
await device.audio.addProcessor(processor);
// Or remove it later
// await device.audio.removeProcessor(processor);

Hierarchy

  • AudioProcessor

Index

Methods

createProcessedStream

  • createProcessedStream(stream: MediaStream): Promise<MediaStream>
  • Called by the SDK whenever the active input audio stream is updated. Use this method to initiate your audio processing pipeline.

    Parameters

    • stream: MediaStream

      The current input audio stream. This is the MediaStream object from the input device such as a microphone. You can process or analyze this stream and create a new stream that you can send over to Twilio.

    Returns Promise<MediaStream>

    The resulting audio stream after processing or analyzing the original input stream.

destroyProcessedStream

  • destroyProcessedStream(stream: MediaStream): Promise<void>
  • Called by the SDK after the original input audio stream and the processed stream has been destroyed. The stream is considered destroyed when all of its tracks are stopped and its references in the SDK are removed.

    This method is called whenever the current input stream is updated. Use this method to run any necessary teardown routines needed by your audio processing pipeline.

    Parameters

    • stream: MediaStream

      The destroyed processed audio stream.

    Returns Promise<void>

Generated using TypeDoc