Skip to content

Frequently Asked Questions

Demo does not work when deploying to the cloud

Make sure you are using a TURN server. See deployment.

Recorded input audio sounds muffled during output audio playback

By default, the microphone is configured to do echoCancellation. This is what's causing the recorded audio to sound muffled when the streamed audio starts playing. You can disable this via the track_constraints (see advanced configuration) with the following code:

    audio = WebRTC(
        label="Stream",
        track_constraints={
                "echoCancellation": False,
                "noiseSuppression": {"exact": True},
                "autoGainControl": {"exact": True},
                "sampleRate": {"ideal": 24000},
                "sampleSize": {"ideal": 16},
                "channelCount": {"exact": 1},
            },
        rtc_configuration=None,
        mode="send-receive",
        modality="audio",
    )

How to raise errors in the UI

You can raise WebRTCError in order for an error message to show up in the user's screen. This is similar to how gr.Error works.

Here is a simple example:

def generation(num_steps):
    for _ in range(num_steps):
        segment = AudioSegment.from_file(
            "/Users/freddy/sources/gradio/demo/audio_debugger/cantina.wav"
        )
        yield (
            segment.frame_rate,
            np.array(segment.get_array_of_samples()).reshape(1, -1),
        )
        time.sleep(3.5)
    raise WebRTCError("This is a test error")

with gr.Blocks() as demo:
    audio = WebRTC(
    label="Stream",
    mode="receive",
    modality="audio",
    )
    num_steps = gr.Slider(
        label="Number of Steps",
        minimum=1,
        maximum=10,
        step=1,
        value=5,
    )
    button = gr.Button("Generate")

    audio.stream(
        fn=generation, inputs=[num_steps], outputs=[audio], trigger=button.click
    )

demo.launch()