roychao19477 commited on
Commit
9657939
Β·
1 Parent(s): 179e88e
Files changed (1) hide show
  1. app.py +34 -42
app.py CHANGED
@@ -58,55 +58,47 @@ model.eval()
58
 
59
 
60
  @spaces.GPU
61
- def enhance(path):
62
- # load & resample
63
- wav, orig_sr = librosa.load(path, sr=None)
64
- if orig_sr != SR: wav = librosa.resample(wav, orig_sr, SR)
65
- # normalize + to-tensor
66
- x = torch.from_numpy(wav).float().to(device)
67
- norm = torch.sqrt(len(x)/torch.sum(x**2)); x=(x*norm).unsqueeze(0)
68
- # STFT β†’ model β†’ ISTFT
69
- amp,pha,_ = mag_phase_stft(x, **stft_cfg, compress_factor=model_cfg["compress_factor"])
70
- amp2,pha2 = model(amp,pha)
71
- out = mag_phase_istft(amp2,pha2, **stft_cfg, compress_factor=model_cfg["compress_factor"])
72
- out = (out/norm).squeeze().cpu().numpy()
73
- # back to orig_sr
74
- if orig_sr != SR: out = librosa.resample(out, SR, orig_sr)
75
- # save
76
  sf.write("enhanced.wav", out, orig_sr)
77
- # spectrogram
78
  D = librosa.stft(out, n_fft=1024, hop_length=512)
79
  S = librosa.amplitude_to_db(np.abs(D), ref=np.max)
80
- fig,ax=plt.subplots(figsize=(6,3))
81
  librosa.display.specshow(S, sr=orig_sr, hop_length=512, x_axis="time", y_axis="hz", ax=ax)
82
- ax.set_title("Enhanced Spectrogram"); plt.colorbar(format="%+2.0f dB",ax=ax)
 
 
83
  return "enhanced.wav", fig
84
 
85
- CSS = """
86
- #title, #subtitle {text-align:center;}
87
- .duplicate-button {margin:1em auto; display:block;}
88
- #in-audio .gradio-component {border:2px dashed #888; border-radius:8px;}
89
- #run {width:100%; margin-top:0.5em;}
90
  """
91
 
92
- with gr.Blocks(css=CSS, theme="soft") as demo:
93
- gr.HTML("<h1 id='title'>🎧 SEMamba: Speech Enhancement</h1>")
94
- gr.HTML("<p id='subtitle'>Upload or record your noisy clip, hit Enhance, and see the spectrogram.</p>")
95
- gr.DuplicateButton(value="Duplicate Space for private use", elem_classes="duplicate-button")
96
-
97
- with gr.Row():
98
- with gr.Column(scale=1):
99
- audio_in = gr.Audio(
100
- sources=["upload","microphone"],
101
- type="filepath",
102
- label="Your Noisy Audio",
103
- elem_id="in-audio"
104
- )
105
- run_btn = gr.Button("Enhance Now πŸš€", variant="primary", elem_id="run")
106
- with gr.Column(scale=1):
107
- audio_out = gr.Audio(type="filepath", label="Enhanced Audio")
108
- spec_out = gr.Plot(label="Spectrogram")
109
-
110
- run_btn.click(enhance, inputs=audio_in, outputs=[audio_out, spec_out])
111
 
112
  demo.launch()
 
58
 
59
 
60
  @spaces.GPU
61
+ def enhance(filepath):
62
+ wav_np, orig_sr = librosa.load(filepath, sr=None)
63
+ if orig_sr != SR:
64
+ wav_np = librosa.resample(wav_np, orig_sr, SR)
65
+ wav = torch.from_numpy(wav_np).float().to(device)
66
+ norm = torch.sqrt(len(wav) / torch.sum(wav**2))
67
+ wav = (wav * norm).unsqueeze(0)
68
+ amp, pha, _ = mag_phase_stft(wav, **stft_cfg, compress_factor=model_cfg["compress_factor"])
69
+ amp_g, pha_g = model(amp, pha)
70
+ out = mag_phase_istft(amp_g, pha_g, **stft_cfg, compress_factor=model_cfg["compress_factor"])
71
+ out = (out / norm).squeeze().cpu().numpy()
72
+ if orig_sr != SR:
73
+ out = librosa.resample(out, SR, orig_sr)
 
 
74
  sf.write("enhanced.wav", out, orig_sr)
75
+
76
  D = librosa.stft(out, n_fft=1024, hop_length=512)
77
  S = librosa.amplitude_to_db(np.abs(D), ref=np.max)
78
+ fig, ax = plt.subplots(figsize=(6, 3))
79
  librosa.display.specshow(S, sr=orig_sr, hop_length=512, x_axis="time", y_axis="hz", ax=ax)
80
+ ax.set_title("Enhanced Spectrogram")
81
+ plt.colorbar(format="%+2.0f dB", ax=ax)
82
+
83
  return "enhanced.wav", fig
84
 
85
+ # --- Header markdown ---
86
+ ABOUT = """
87
+ # SEMamba: Speech Enhancement
88
+ Unofficial demo for [SEMamba](https://github.com/RoyChao19477/SEMamba), a Mamba-based speech enhancement model from SLT 2024.
89
+ Upload or record a noisy audio file to enhance clarity and view the spectrogram.
90
  """
91
 
92
+ # --- Build demo ---
93
+ with gr.Blocks() as demo:
94
+ gr.Markdown(ABOUT)
95
+ audio_in = gr.Audio(label="Input Audio", type="filepath", interactive=True)
96
+ run_btn = gr.Button("Enhance", variant="primary")
97
+ enhanced_audio = gr.Audio(label="Enhanced Audio", type="filepath", interactive=False)
98
+ spectrogram = gr.Plot(label="Spectrogram")
99
+
100
+ run_btn.click(fn=enhance, inputs=audio_in, outputs=[enhanced_audio, spectrogram])
101
+
102
+ gr.Markdown("Unofficial demo by [yourname](https://github.com/RoyChao19477)")
 
 
 
 
 
 
 
 
103
 
104
  demo.launch()