add atten_lim + dry/wet mix sliders
Browse files
app.py
CHANGED
|
@@ -46,16 +46,20 @@ def to_wav(audio_path):
|
|
| 46 |
return out
|
| 47 |
|
| 48 |
|
| 49 |
-
def denoise(audio_path):
|
| 50 |
if not audio_path:
|
| 51 |
return None
|
| 52 |
from df.enhance import enhance, load_audio, save_audio
|
| 53 |
|
| 54 |
model, df_state = get_model()
|
| 55 |
audio, _ = load_audio(to_wav(audio_path), sr=df_state.sr())
|
| 56 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 57 |
out = "/tmp/enhanced.wav"
|
| 58 |
-
save_audio(out,
|
| 59 |
return out
|
| 60 |
|
| 61 |
|
|
@@ -66,9 +70,19 @@ with gr.Blocks(title="音频降噪增强") as demo:
|
|
| 66 |
"适合口播、讲座这类以人声为主的素材。CPU 推理,长音频请按时长耐心等。"
|
| 67 |
)
|
| 68 |
inp = gr.Audio(label="原始音频", type="filepath")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 69 |
btn = gr.Button("开始降噪", variant="primary")
|
| 70 |
out = gr.Audio(label="降噪后", type="filepath")
|
| 71 |
-
btn.click(denoise, inputs=inp, outputs=out)
|
| 72 |
|
| 73 |
|
| 74 |
if __name__ == "__main__":
|
|
|
|
| 46 |
return out
|
| 47 |
|
| 48 |
|
| 49 |
+
def denoise(audio_path, atten_lim, mix):
|
| 50 |
if not audio_path:
|
| 51 |
return None
|
| 52 |
from df.enhance import enhance, load_audio, save_audio
|
| 53 |
|
| 54 |
model, df_state = get_model()
|
| 55 |
audio, _ = load_audio(to_wav(audio_path), sr=df_state.sr())
|
| 56 |
+
lim = None if atten_lim == 0 else atten_lim
|
| 57 |
+
enhanced = enhance(model, df_state, audio, atten_lim_db=lim)
|
| 58 |
+
# 混回原声:mix=1 为纯降噪结果,调低可找回被吃掉的细节
|
| 59 |
+
n = min(enhanced.shape[-1], audio.shape[-1])
|
| 60 |
+
out_audio = enhanced[..., :n] * mix + audio[..., :n] * (1.0 - mix)
|
| 61 |
out = "/tmp/enhanced.wav"
|
| 62 |
+
save_audio(out, out_audio, df_state.sr())
|
| 63 |
return out
|
| 64 |
|
| 65 |
|
|
|
|
| 70 |
"适合口播、讲座这类以人声为主的素材。CPU 推理,长音频请按时长耐心等。"
|
| 71 |
)
|
| 72 |
inp = gr.Audio(label="原始音频", type="filepath")
|
| 73 |
+
atten = gr.Slider(
|
| 74 |
+
0, 40, value=20, step=1,
|
| 75 |
+
label="最大衰减上限 (dB)",
|
| 76 |
+
info="限制模型对每个频点的抑制强度:数值越小越温和、损失越小;0 = 不限制(最强降噪)。默认 20。",
|
| 77 |
+
)
|
| 78 |
+
mix = gr.Slider(
|
| 79 |
+
0, 1, value=1.0, step=0.05,
|
| 80 |
+
label="降噪结果占比",
|
| 81 |
+
info="1 = 纯降噪结果;调低可按比例混回原声,找回被吃掉的细节(相声里的笑声、掌声也适用)。",
|
| 82 |
+
)
|
| 83 |
btn = gr.Button("开始降噪", variant="primary")
|
| 84 |
out = gr.Audio(label="降噪后", type="filepath")
|
| 85 |
+
btn.click(denoise, inputs=[inp, atten, mix], outputs=out)
|
| 86 |
|
| 87 |
|
| 88 |
if __name__ == "__main__":
|