Spaces:
Build error
Build error
Update app.py
Browse files
app.py
CHANGED
|
@@ -568,43 +568,39 @@ with gr.Blocks(css="""
|
|
| 568 |
outputs=output_audio_sat
|
| 569 |
)
|
| 570 |
|
| 571 |
-
|
| 572 |
-
|
| 573 |
-
|
| 574 |
-
|
| 575 |
-
|
| 576 |
-
|
| 577 |
-
|
| 578 |
-
|
| 579 |
-
|
| 580 |
-
|
| 581 |
-
|
| 582 |
-
)
|
| 583 |
|
| 584 |
|
| 585 |
# Add your remaining tabs (Batch Processing, Save/Load Project, Auto-Tune, etc.)
|
| 586 |
# similar to above, adapting outputs to return (samples, sr) tuples for gr.Audio (type="numpy").
|
| 587 |
|
| 588 |
-
def run_harmony(
|
| 589 |
-
if not
|
| 590 |
return None, "❌ Upload a vocal clip first."
|
| 591 |
try:
|
| 592 |
-
audio = AudioSegment.from_file(
|
| 593 |
out_audio = apply_harmony(audio)
|
| 594 |
-
out_path =
|
| 595 |
-
out_audio.export(out_path, format="wav")
|
| 596 |
|
| 597 |
-
# Load audio
|
| 598 |
samples, sr = sf.read(out_path, dtype='int16')
|
| 599 |
return (samples, sr), "✅ Success"
|
| 600 |
except Exception as e:
|
| 601 |
return None, f"❌ Error: {str(e)}"
|
| 602 |
|
| 603 |
-
|
| 604 |
-
|
| 605 |
-
|
| 606 |
-
outputs=[output_audio_harmony, status_harmony]
|
| 607 |
-
)
|
| 608 |
|
| 609 |
# --- Batch Processing ---
|
| 610 |
# --- Batch Processing ---
|
|
|
|
| 568 |
outputs=output_audio_sat
|
| 569 |
)
|
| 570 |
|
| 571 |
+
with gr.Tab("🎧 Vocal Doubler / Harmonizer"):
|
| 572 |
+
input_audio_harmony = gr.Audio(label="Upload Vocal Clip", type="filepath")
|
| 573 |
+
output_audio_harmony = gr.Audio(label="Doubled Output", type="numpy")
|
| 574 |
+
status_harmony = gr.Textbox(label="Status", interactive=False)
|
| 575 |
+
harmony_btn = gr.Button("Add Harmony")
|
| 576 |
+
|
| 577 |
+
harmony_btn.click(
|
| 578 |
+
fn=run_harmony,
|
| 579 |
+
inputs=input_audio_harmony,
|
| 580 |
+
outputs=[output_audio_harmony, status_harmony]
|
| 581 |
+
)
|
|
|
|
| 582 |
|
| 583 |
|
| 584 |
# Add your remaining tabs (Batch Processing, Save/Load Project, Auto-Tune, etc.)
|
| 585 |
# similar to above, adapting outputs to return (samples, sr) tuples for gr.Audio (type="numpy").
|
| 586 |
|
| 587 |
+
def run_harmony(audio_file):
|
| 588 |
+
if not audio_file:
|
| 589 |
return None, "❌ Upload a vocal clip first."
|
| 590 |
try:
|
| 591 |
+
audio = AudioSegment.from_file(audio_file)
|
| 592 |
out_audio = apply_harmony(audio)
|
| 593 |
+
out_path = save_audiosegment_to_temp(out_audio, suffix=".wav")
|
|
|
|
| 594 |
|
| 595 |
+
# Load audio as numpy array for Gradio output type="numpy"
|
| 596 |
samples, sr = sf.read(out_path, dtype='int16')
|
| 597 |
return (samples, sr), "✅ Success"
|
| 598 |
except Exception as e:
|
| 599 |
return None, f"❌ Error: {str(e)}"
|
| 600 |
|
| 601 |
+
with gr.Blocks(css="""
|
| 602 |
+
/* your CSS here */
|
| 603 |
+
""") as demo:
|
|
|
|
|
|
|
| 604 |
|
| 605 |
# --- Batch Processing ---
|
| 606 |
# --- Batch Processing ---
|