gradio-audio-region


Namegradio-audio-region JSON
Version 0.1.0 PyPI version JSON
download
home_pageNone
SummaryCustom Gradio audio component that returns region selection timing data along with audio data
upload_time2025-09-02 00:47:32
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseMIT
keywords gradio audio editing regions timing
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Gradio Audio Region

A custom Gradio component that extends `gr.Audio` to return region selection timing data along with audio data. This allows you to preserve original audio quality by applying the selected timing to your source files instead of using Gradio's processed audio.

## Features

- ✨ **Identical UI**: Same user experience as `gr.Audio` with editable regions
- 🎯 **Timing Data**: Returns `(audio_data, start_time, end_time)` tuple when regions are selected
- 🔊 **Preserve Quality**: Apply timing to your original audio files at native sample rates
- 📦 **Drop-in Replacement**: Minimal code changes from `gr.Audio`
- 🚀 **HF Spaces Ready**: Works seamlessly in HuggingFace Spaces

## Installation

```bash
pip install gradio-audio-region
```

## Quick Start

```python
import gradio as gr
from gradio_audio_region import AudioWithRegion

def process_audio_with_timing(audio_data):
    if isinstance(audio_data, tuple) and len(audio_data) == 3:
        audio_array, start_time, end_time = audio_data
        # Apply these timings to your original audio file
        return f"Selected region: {start_time:.2f}s to {end_time:.2f}s"
    
    return "Standard audio data received"

with gr.Blocks() as demo:
    audio = AudioWithRegion(
        label="Select audio region",
        type="numpy",
        interactive=True,
        editable=True  # Enables region selection
    )
    
    result = gr.Textbox(label="Timing Info")
    
    audio.change(
        process_audio_with_timing,
        inputs=audio,
        outputs=result
    )

demo.launch()
```

## Use Case: Preserve Original Audio Quality

This component is perfect when you need to trim audio while preserving the original sample rate and bit depth:

```python
import soundfile as sf
from gradio_audio_region import AudioWithRegion

# Store original file path
original_file_path = "path/to/original.wav"

def trim_original_audio(audio_data):
    if isinstance(audio_data, tuple) and len(audio_data) == 3:
        _, start_time, end_time = audio_data
        
        # Load original at native quality
        original_audio, original_sr = sf.read(original_file_path)
        
        # Apply timing to original
        start_sample = int(start_time * original_sr)
        end_sample = int(end_time * original_sr)
        trimmed_audio = original_audio[start_sample:end_sample]
        
        # Save trimmed version preserving original quality
        sf.write("trimmed_output.wav", trimmed_audio, original_sr)
        
        return f"Trimmed original audio: {start_time:.2f}s - {end_time:.2f}s"
    
    return "No region selected"
```

## API Reference

### AudioWithRegion

Extends `gradio.Audio` with identical parameters. The key difference is the return format:

**Standard mode** (no region selected):
- Returns: Same as `gr.Audio` (numpy array or file path)

**Region mode** (when user selects and trims a region):
- Returns: `(audio_data, start_time, end_time)` tuple
  - `audio_data`: Trimmed audio as numpy array or file path
  - `start_time`: Start time in seconds (float)
  - `end_time`: End time in seconds (float)

### Parameters

All parameters identical to `gradio.Audio`:

- `type`: `"numpy"` or `"filepath"`
- `interactive`: Set to `True` for editing
- `editable`: Set to `True` to enable region selection
- `waveform_options`: Configure waveform display
- And all other standard `gr.Audio` parameters

## HuggingFace Spaces Deployment

Add to your `requirements.txt`:

```
gradio
gradio-audio-region
```

Then use normally in your Space:

```python
from gradio_audio_region import AudioWithRegion
# ... rest of your code
```

## Development

```bash
# Clone and install in development mode
git clone https://github.com/jsaluja/gradio-audio-region
cd gradio-audio-region
pip install -e ".[dev]"

# Run tests
pytest

# Format code
black gradio_audio_region tests
isort gradio_audio_region tests
```

## How It Works

This component leverages Gradio's existing audio editing UI (powered by WaveSurfer.js) but captures the timing data that normally gets lost. The frontend region selection is preserved while giving you access to precise start/end times for your own audio processing.

## License

MIT License - see [LICENSE](LICENSE) file for details.

## Contributing

Contributions welcome! Please read [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.

## Support

- 📧 Issues: [GitHub Issues](https://github.com/jsaluja/gradio-audio-region/issues)
- 💬 Discussions: [GitHub Discussions](https://github.com/jsaluja/gradio-audio-region/discussions)

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "gradio-audio-region",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "gradio, audio, editing, regions, timing",
    "author": null,
    "author_email": "Audio Dataset Corrector <jsaluja@example.com>",
    "download_url": "https://files.pythonhosted.org/packages/fb/05/c7cf0b501efaf9b8ebee47a2d51d6befb8cc6d095d0d820d4a2cae49f20d/gradio_audio_region-0.1.0.tar.gz",
    "platform": null,
    "description": "# Gradio Audio Region\n\nA custom Gradio component that extends `gr.Audio` to return region selection timing data along with audio data. This allows you to preserve original audio quality by applying the selected timing to your source files instead of using Gradio's processed audio.\n\n## Features\n\n- \u2728 **Identical UI**: Same user experience as `gr.Audio` with editable regions\n- \ud83c\udfaf **Timing Data**: Returns `(audio_data, start_time, end_time)` tuple when regions are selected\n- \ud83d\udd0a **Preserve Quality**: Apply timing to your original audio files at native sample rates\n- \ud83d\udce6 **Drop-in Replacement**: Minimal code changes from `gr.Audio`\n- \ud83d\ude80 **HF Spaces Ready**: Works seamlessly in HuggingFace Spaces\n\n## Installation\n\n```bash\npip install gradio-audio-region\n```\n\n## Quick Start\n\n```python\nimport gradio as gr\nfrom gradio_audio_region import AudioWithRegion\n\ndef process_audio_with_timing(audio_data):\n    if isinstance(audio_data, tuple) and len(audio_data) == 3:\n        audio_array, start_time, end_time = audio_data\n        # Apply these timings to your original audio file\n        return f\"Selected region: {start_time:.2f}s to {end_time:.2f}s\"\n    \n    return \"Standard audio data received\"\n\nwith gr.Blocks() as demo:\n    audio = AudioWithRegion(\n        label=\"Select audio region\",\n        type=\"numpy\",\n        interactive=True,\n        editable=True  # Enables region selection\n    )\n    \n    result = gr.Textbox(label=\"Timing Info\")\n    \n    audio.change(\n        process_audio_with_timing,\n        inputs=audio,\n        outputs=result\n    )\n\ndemo.launch()\n```\n\n## Use Case: Preserve Original Audio Quality\n\nThis component is perfect when you need to trim audio while preserving the original sample rate and bit depth:\n\n```python\nimport soundfile as sf\nfrom gradio_audio_region import AudioWithRegion\n\n# Store original file path\noriginal_file_path = \"path/to/original.wav\"\n\ndef trim_original_audio(audio_data):\n    if isinstance(audio_data, tuple) and len(audio_data) == 3:\n        _, start_time, end_time = audio_data\n        \n        # Load original at native quality\n        original_audio, original_sr = sf.read(original_file_path)\n        \n        # Apply timing to original\n        start_sample = int(start_time * original_sr)\n        end_sample = int(end_time * original_sr)\n        trimmed_audio = original_audio[start_sample:end_sample]\n        \n        # Save trimmed version preserving original quality\n        sf.write(\"trimmed_output.wav\", trimmed_audio, original_sr)\n        \n        return f\"Trimmed original audio: {start_time:.2f}s - {end_time:.2f}s\"\n    \n    return \"No region selected\"\n```\n\n## API Reference\n\n### AudioWithRegion\n\nExtends `gradio.Audio` with identical parameters. The key difference is the return format:\n\n**Standard mode** (no region selected):\n- Returns: Same as `gr.Audio` (numpy array or file path)\n\n**Region mode** (when user selects and trims a region):\n- Returns: `(audio_data, start_time, end_time)` tuple\n  - `audio_data`: Trimmed audio as numpy array or file path\n  - `start_time`: Start time in seconds (float)\n  - `end_time`: End time in seconds (float)\n\n### Parameters\n\nAll parameters identical to `gradio.Audio`:\n\n- `type`: `\"numpy\"` or `\"filepath\"`\n- `interactive`: Set to `True` for editing\n- `editable`: Set to `True` to enable region selection\n- `waveform_options`: Configure waveform display\n- And all other standard `gr.Audio` parameters\n\n## HuggingFace Spaces Deployment\n\nAdd to your `requirements.txt`:\n\n```\ngradio\ngradio-audio-region\n```\n\nThen use normally in your Space:\n\n```python\nfrom gradio_audio_region import AudioWithRegion\n# ... rest of your code\n```\n\n## Development\n\n```bash\n# Clone and install in development mode\ngit clone https://github.com/jsaluja/gradio-audio-region\ncd gradio-audio-region\npip install -e \".[dev]\"\n\n# Run tests\npytest\n\n# Format code\nblack gradio_audio_region tests\nisort gradio_audio_region tests\n```\n\n## How It Works\n\nThis component leverages Gradio's existing audio editing UI (powered by WaveSurfer.js) but captures the timing data that normally gets lost. The frontend region selection is preserved while giving you access to precise start/end times for your own audio processing.\n\n## License\n\nMIT License - see [LICENSE](LICENSE) file for details.\n\n## Contributing\n\nContributions welcome! Please read [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\n## Support\n\n- \ud83d\udce7 Issues: [GitHub Issues](https://github.com/jsaluja/gradio-audio-region/issues)\n- \ud83d\udcac Discussions: [GitHub Discussions](https://github.com/jsaluja/gradio-audio-region/discussions)\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Custom Gradio audio component that returns region selection timing data along with audio data",
    "version": "0.1.0",
    "project_urls": {
        "Homepage": "https://github.com/jsaluja/gradio-audio-region",
        "Issues": "https://github.com/jsaluja/gradio-audio-region/issues",
        "Repository": "https://github.com/jsaluja/gradio-audio-region"
    },
    "split_keywords": [
        "gradio",
        " audio",
        " editing",
        " regions",
        " timing"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8cb349a6db57cb7d86861940fbd7b3a6291ff0b13048d486d75902853b75a20f",
                "md5": "5d04263e5cb7f81743eeddc74820f0bd",
                "sha256": "c4dd1f51b4c6f6b9908b1eeb17e82191a23fb57f35203fe47315396b6dc4add6"
            },
            "downloads": -1,
            "filename": "gradio_audio_region-0.1.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "5d04263e5cb7f81743eeddc74820f0bd",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 6781,
            "upload_time": "2025-09-02T00:47:31",
            "upload_time_iso_8601": "2025-09-02T00:47:31.082840Z",
            "url": "https://files.pythonhosted.org/packages/8c/b3/49a6db57cb7d86861940fbd7b3a6291ff0b13048d486d75902853b75a20f/gradio_audio_region-0.1.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "fb05c7cf0b501efaf9b8ebee47a2d51d6befb8cc6d095d0d820d4a2cae49f20d",
                "md5": "ba2e6cf0d095ab06a019fd6bea3ff37e",
                "sha256": "f02fd9aee15cd6511f357e302fdb7adfc0ab802ed1b35d4d0a55ed9428c073dc"
            },
            "downloads": -1,
            "filename": "gradio_audio_region-0.1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "ba2e6cf0d095ab06a019fd6bea3ff37e",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 7027,
            "upload_time": "2025-09-02T00:47:32",
            "upload_time_iso_8601": "2025-09-02T00:47:32.024885Z",
            "url": "https://files.pythonhosted.org/packages/fb/05/c7cf0b501efaf9b8ebee47a2d51d6befb8cc6d095d0d820d4a2cae49f20d/gradio_audio_region-0.1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-02 00:47:32",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "jsaluja",
    "github_project": "gradio-audio-region",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "gradio-audio-region"
}
        
Elapsed time: 0.62511s