Skip to main content

Dash Audio Recorder Component

Project description

Dash Audio Recorder

A professional and customizable audio recording component for Plotly Dash. This component allows users to record audio directly from their browser's microphone, visualize the audio as a waveform in real-time, and send the data back to Python for processing.

🔥 AI / Whisper Optimization! You can disable the browser's default audio filters (noise suppression, echo cancellation, auto gain) to capture pure, raw acoustic data. This dramatically improves speech recognition accuracy for AI models like OpenAI's Whisper.

Key Features

  • AI-Ready Audio: Option to capture raw, unfiltered audio (128 kbps) for maximum ASR (Automatic Speech Recognition) accuracy.
  • Real-time Waveform: Visualize audio input as it happens.
  • Two UI Modes: Support for both a discrete small view and an immersive fullscreen recording experience.
  • Flexible Interaction: Choose between hold (Push-To-Talk) or click (Toggle) to control recording.
  • Memory Efficient: Sends audio data as a Base64 string directly to Dash, allowing for lightning-fast handling via dcc.Store or temporary files without mandatory disk writes.

Installation

Install the package via pip:

pip install dash-audio-recorder

Quick Start (Usage Example)

Here is a complete example showing how to use the component, optimized for testing audio quality with AI models like Whisper. Save this as usage.py and run it to test the component locally.

import dash_audio_recorder
from dash import Dash, html, dcc, Input, Output, callback

app = Dash(__name__)

app.layout = html.Div([
    html.H2("Audio Quality Test Bench (Whisper Optimization)"),
    html.P("Test how the audio sounds with and without browser filters (raw audio)."),
    
    # Selection menus for toggling filters
    html.Div([
        html.Label("Browser Filters (Try disabling all for Whisper):", style={'fontWeight': 'bold'}),
        dcc.Checklist(
            id='audio-filters',
            options=[
                {'label': ' Echo Cancellation', 'value': 'echo'},
                {'label': ' Noise Suppression', 'value': 'noise'},
                {'label': ' Auto Gain Control', 'value': 'gain'}
            ],
            value=[], # Default empty = all filters OFF (raw audio)
            style={'marginTop': '10px'}
        )
    ], style={'backgroundColor': '#f0f0f0', 'padding': '15px', 'borderRadius': '8px', 'marginBottom': '20px'}),

    # The recorder component is loaded into this div dynamically
    html.Div(id='recorder-container'),
    
    html.Div(id='status-message', style={'marginTop': '20px', 'fontWeight': 'bold'}),
    html.Audio(id='audio-player', controls=True, style={'marginTop': '10px'})
    
], style={'padding': '40px', 'fontFamily': 'sans-serif', 'maxWidth': '600px', 'margin': '0 auto'})


# This callback recreates the recorder whenever filter settings are changed
@callback(
    Output('recorder-container', 'children'),
    Input('audio-filters', 'value')
)
def update_recorder(filters):
    return dash_audio_recorder.DashAudioRecorder(
        id='audio-recorder',
        visualMode='fullscreen', 
        recordMode='click', # Using 'click' for toggle mode instead of 'hold'
        echoCancellation='echo' in filters,
        noiseSuppression='noise' in filters,
        autoGainControl='gain' in filters
    )

# This callback receives the audio data and passes it to the player
@callback(
    Output('audio-player', 'src'),
    Output('status-message', 'children'),
    Input('audio-recorder', 'audioData')
)
def process_audio(audio_data):
    if not audio_data:
        return "", "Press the microphone and speak to start testing."
    
    return audio_data, "Recording complete! Listen to the differences by toggling filters."

if __name__ == '__main__':
    # Modern Dash uses app.run instead of app.run_server
    app.run(debug=True)

Component Properties (Props)

Prop Type Default Description
id string None The ID used to identify this component in Dash callbacks.
audioData string None The recorded audio data as a Base64 encoded string. Read-only from Python.
audioType string 'audio/webm' The MIME type for the audio recording (e.g., audio/webm, audio/mp4).
visualMode string 'fullscreen' UI style: 'fullscreen' (overlay) or 'small' (inline block).
recordMode string 'hold' Interaction style: 'hold' (push-to-talk) or 'click' (toggle on/off).
echoCancellation boolean False Whether to use the browser's echo cancellation. Keep False for AI usage.
noiseSuppression boolean False Whether to use the browser's noise suppression. Keep False for AI usage.
autoGainControl boolean False Whether to automatically adjust microphone volume. Keep False for AI usage.

License

This project is licensed under the MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dash_audio_recorder-0.0.5.tar.gz (22.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dash_audio_recorder-0.0.5-py3-none-any.whl (21.3 kB view details)

Uploaded Python 3

File details

Details for the file dash_audio_recorder-0.0.5.tar.gz.

File metadata

  • Download URL: dash_audio_recorder-0.0.5.tar.gz
  • Upload date:
  • Size: 22.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for dash_audio_recorder-0.0.5.tar.gz
Algorithm Hash digest
SHA256 74e6ca9b8082d97d4430df80143400c91d6ab7e56ad4f9bc87754321929b1481
MD5 30a6edca68acfbcc69abc44d43f221f9
BLAKE2b-256 696faf1f218fa1d1709f33e876a57528d10bae561e2125e881f9f938f83ed13f

See more details on using hashes here.

File details

Details for the file dash_audio_recorder-0.0.5-py3-none-any.whl.

File metadata

File hashes

Hashes for dash_audio_recorder-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 b3dd3ff51ea13e67f0db119b5874ea70b727dd7671072fc1b09e2f5e42f60781
MD5 7f3f10158b2f464b8c40c0d345889728
BLAKE2b-256 5c75f27cdddc3349991afc23d81eeea489131c11c952725fc4103c90f579b82d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page