Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import torchaudio | |
| import resampy | |
| import numpy as np | |
| import soundfile as sf | |
| import torch | |
| def upsample_audio(audio_path, backend="CPU"): | |
| # Read audio file | |
| audio, orig_sr = sf.read(audio_path) | |
| # Target sample rate (2x upsampling) | |
| target_sr = orig_sr * 2 | |
| if backend == "CPU": | |
| # Resampy CPU processing | |
| upsampled = resampy.resample(audio, orig_sr, target_sr, filter="kaiser_best") | |
| else: | |
| # Torchaudio GPU processing | |
| device = "cuda" if torch.cuda.is_available() else "cpu" | |
| tensor_audio = torch.from_numpy(audio).float().to(device) | |
| # If mono, add batch dimension | |
| if tensor_audio.ndim == 1: | |
| tensor_audio = tensor_audio.unsqueeze(0) | |
| resampler = torchaudio.transforms.Resample( | |
| orig_freq=orig_sr, | |
| new_freq=target_sr, | |
| resampling_method="kaiser_window", | |
| lowpass_filter_width=64 | |
| ).to(device) | |
| upsampled = resampler(tensor_audio).cpu().numpy() | |
| # Remove batch dimension if mono | |
| if upsampled.shape[0] == 1: | |
| upsampled = upsampled[0] | |
| # Save temporary output | |
| output_path = "upsampled_audio.wav" | |
| sf.write(output_path, upsampled, target_sr) | |
| return output_path | |
| DESCRIPTION = """ | |
| # Audio Upsampler (2x Sample Rate) | |
| **Easily upsample your audio files to double their original sample rate using high-quality algorithms.** | |
| Choose between: | |
| - **CPU (resampy):** High-quality upsampling on any computer. | |
| - **GPU (torchaudio):** Fast upsampling if you have a compatible graphics card. | |
| **How to Use:** | |
| 1. Upload or record an audio file. | |
| 2. Select your processing backend. | |
| 3. Click submit to receive an upsampled audio file. | |
| The output will always be a WAV file with double the original sample rate. | |
| """ | |
| ARTICLE = """ | |
| ## How This App Works | |
| This app increases the sample rate of your audio files (upsampling) for improved quality or compatibility with other tools. | |
| - **CPU backend** uses the `resampy` library for high-quality, anti-aliased upsampling. | |
| - **GPU backend** uses PyTorch and `torchaudio` to leverage CUDA acceleration (if available). | |
| **Supported Input File Types:** | |
| - WAV | |
| - FLAC | |
| - MP3 | |
| - OGG | |
| - AAC | |
| - M4A | |
| The app automatically detects your audio's sample rate and outputs an upsampled version in standard WAV format. | |
| **Maximum File Length:** | |
| There is no strict limit, but very large files may take longer to process, especially on CPU. | |
| **No AudioSR:** | |
| This app does not use the AudioSR library; it performs real sample rate conversion. | |
| **Example Usage:** | |
| - Upload a 44.1kHz WAV file, select "GPU" if you have a compatible graphics card, and get an 88.2kHz upsampled output. | |
| - Record a voice memo, select "CPU", and receive a higher-sample-rate version for further editing. | |
| If you have questions about supported formats or encounter issues, please let us know! | |
| """ | |
| interface = gr.Interface( | |
| fn=upsample_audio, | |
| inputs=[ | |
| gr.Audio(label="Input Audio", type="filepath"), | |
| gr.Radio(["CPU", "GPU"], label="Processing Backend", value="CPU") | |
| ], | |
| outputs=gr.Audio(label="Upsampled Audio"), | |
| title="Audio Upsampler (2x Sample Rate)", | |
| description=DESCRIPTION, | |
| article=ARTICLE, | |
| examples=[ | |
| ["sample1.wav", "CPU"], | |
| ["sample2.flac", "GPU"] | |
| ] | |
| ) | |
| if __name__ == "__main__": | |
| interface.launch() |