NoiseRemoval / app.py
KavyaBansal's picture
Create app.py
84e30ed verified
raw
history blame
3.07 kB
import noisereduce as nr
import scipy.io.wavfile as wavfile
import numpy as np
import gradio as gr
import os
import tempfile
import shutil
def denoise_audio_file(input_path, output_path):
rate, data = wavfile.read(input_path)
if len(data.shape) > 1:
reduced_noise = np.zeros_like(data, dtype=np.float32)
for channel in range(data.shape[1]):
reduced_noise[:, channel] = nr.reduce_noise(y=data[:, channel], sr=rate)
else:
reduced_noise = nr.reduce_noise(y=data, sr=rate)
wavfile.write(output_path, rate, reduced_noise.astype(data.dtype))
return output_path
def process_single_file(file):
if not file.name.endswith('.wav'):
raise gr.Error("Please upload a WAV file")
# Use the original filename for the denoised file, but in a temp dir
name, ext = os.path.splitext(os.path.basename(file.name))
base_filename = f"{name}_denoised{ext}"
temp_dir = tempfile.mkdtemp()
output_path = os.path.join(temp_dir, base_filename)
denoise_audio_file(file.name, output_path)
return output_path
def process_batch_files(files):
output_files = []
temp_dir = tempfile.mkdtemp()
for file in files:
if file.name.endswith('.wav'):
name, ext = os.path.splitext(os.path.basename(file.name))
base_filename = f"{name}_denoised{ext}"
output_path = os.path.join(temp_dir, base_filename)
denoise_audio_file(file.name, output_path)
output_files.append(output_path)
return output_files
with gr.Blocks(title="Audio Noise Reducer") as demo:
gr.Markdown("# 🎧 Audio Noise Reduction")
gr.Markdown("Upload WAV files to remove background noise using AI-powered processing.")
with gr.Tab("Single File Processing"):
with gr.Row():
with gr.Column():
single_file = gr.File(label="Upload WAV File", file_types=[".wav"])
single_btn = gr.Button("Process File")
with gr.Column():
single_output = gr.File(label="Download Denoised File")
single_status = gr.Textbox(label="Processing Status", interactive=False)
single_btn.click(
fn=process_single_file,
inputs=single_file,
outputs=single_output,
api_name="process_single"
)
with gr.Tab("Batch Processing"):
with gr.Row():
with gr.Column():
batch_files = gr.File(label="Upload WAV Files", file_count="multiple", file_types=[".wav"])
batch_btn = gr.Button("Process Files")
with gr.Column():
batch_output = gr.Files(label="Download Denoised Files")
batch_status = gr.Textbox(label="Processing Status", interactive=False)
batch_btn.click(
fn=process_batch_files,
inputs=batch_files,
outputs=batch_output,
api_name="process_batch"
)
demo.queue()
if __name__ == "__main__":
demo.launch()