deeplearning's picture
Update app.py
78c219b verified
import gradio as gr
import subprocess
import tempfile
import os
import soundfile as sf
LORIS_ANALYZE = "/usr/local/bin/loris_analyze"
LORIS_MORPH = "/usr/local/bin/loris_morph"
LORIS_SYNTH = "/usr/local/bin/loris_synthesize"
def run(cmd):
subprocess.check_call(cmd, shell=True)
def morph_audio(wav_a, wav_b, morph_amt):
with tempfile.TemporaryDirectory() as d:
a_wav = os.path.join(d, "a.wav")
b_wav = os.path.join(d, "b.wav")
a_sdif = os.path.join(d, "a.sdif")
b_sdif = os.path.join(d, "b.sdif")
m_sdif = os.path.join(d, "m.sdif")
out_wav = os.path.join(d, "out.wav")
sf.write(a_wav, wav_a[1], wav_a[0])
sf.write(b_wav, wav_b[1], wav_b[0])
run(f"{LORIS_ANALYZE} {a_wav} {a_sdif}")
run(f"{LORIS_ANALYZE} {b_wav} {b_sdif}")
run(f"{LORIS_MORPH} --alpha {morph_amt} {a_sdif} {b_sdif} {m_sdif}")
run(f"{LORIS_SYNTH} {m_sdif} {out_wav}")
data, sr = sf.read(out_wav)
return sr, data
ui = gr.Interface(
fn=morph_audio,
inputs=[
gr.Audio(label="Input A", type="numpy"),
gr.Audio(label="Input B", type="numpy"),
gr.Slider(0.0, 1.0, value=0.5, label="Morph Amount")
],
outputs=gr.Audio(label="Morphed Output"),
title="Loris Audio Morphing (SDIF)",
)
ui.launch(server_name="0.0.0.0", server_port=7860)