Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| from pydub import AudioSegment | |
| from scipy.signal import convolve | |
| import numpy as np | |
| import tempfile | |
| # Reverb function using convolution with a simple impulse response | |
| def add_reverb(audio_segment, decay=0.5, delay=200): | |
| # Convert AudioSegment to numpy array | |
| samples = np.array(audio_segment.get_array_of_samples()) | |
| # Create a simple reverb impulse response | |
| impulse_response = np.zeros(delay * 10) | |
| impulse_response[::delay] = decay ** np.arange(len(impulse_response) // delay) | |
| # Apply convolution for reverb | |
| processed_samples = convolve(samples, impulse_response, mode='full')[:len(samples)] | |
| processed_samples = np.int16(processed_samples / np.max(np.abs(processed_samples)) * 32767) | |
| # Convert numpy array back to AudioSegment | |
| processed_audio = AudioSegment( | |
| processed_samples.tobytes(), | |
| frame_rate=audio_segment.frame_rate, | |
| sample_width=audio_segment.sample_width, | |
| channels=audio_segment.channels | |
| ) | |
| return processed_audio | |
| # Wrapper function to apply selected effect | |
| def apply_effect(audio_file, effect, reverb_decay, reverb_delay): | |
| audio = AudioSegment.from_file(audio_file) | |
| if effect == "Reverb": | |
| audio = add_reverb(audio, decay=reverb_decay, delay=int(reverb_delay)) | |
| # Save the modified audio to a temporary file | |
| with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as temp_file: | |
| audio.export(temp_file.name, format="wav") | |
| return temp_file.name | |
| # Gradio Interface | |
| def build_ui(): | |
| with gr.Blocks() as demo: | |
| gr.Markdown("### Audio Effects with Gradio") | |
| with gr.Row(): | |
| audio_input = gr.Audio(source="upload", type="filepath", label="Upload Audio") | |
| audio_output = gr.Audio(label="Processed Audio") | |
| with gr.Row(): | |
| effect = gr.Radio(["Reverb"], label="Choose Effect") | |
| reverb_decay = gr.Slider(0.1, 1.0, value=0.5, step=0.1, label="Reverb Decay") | |
| reverb_delay = gr.Slider(50, 500, value=200, step=10, label="Reverb Delay (ms)") | |
| apply_button = gr.Button("Apply Effect") | |
| apply_button.click( | |
| fn=apply_effect, | |
| inputs=[audio_input, effect, reverb_decay, reverb_delay], | |
| outputs=[audio_output] | |
| ) | |
| return demo | |
| # Launch Gradio App | |
| demo = build_ui() | |
| demo.launch() |