haoheliu
two output to one output
4e9d8a1
raw
history blame
4.57 kB
import gradio as gr
import numpy as np
from audioldm import text_to_audio, build_model
# from transformers import AutoModelForCausalLM, AutoTokenizer
# import torch
# tokenizer = AutoTokenizer.from_pretrained("microsoft/DialoGPT-medium")
# model = AutoModelForCausalLM.from_pretrained("microsoft/DialoGPT-medium")
audioldm = build_model()
# audioldm=None
# def predict(input, history=[]):
# # tokenize the new input sentence
# new_user_input_ids = tokenizer.encode(input + tokenizer.eos_token, return_tensors='pt')
# # append the new user input tokens to the chat history
# bot_input_ids = torch.cat([torch.LongTensor(history), new_user_input_ids], dim=-1)
# # generate a response
# history = model.generate(bot_input_ids, max_length=1000, pad_token_id=tokenizer.eos_token_id).tolist()
# # convert the tokens to text, and then split the responses into lines
# response = tokenizer.decode(history[0]).split("<|endoftext|>")
# response = [(response[i], response[i+1]) for i in range(0, len(response)-1, 2)] # convert to tuples of list
# return response, history
def text2audio(text, duration, guidance_scale, random_seed, n_candidates):
# print(text, length, guidance_scale)
waveform = text_to_audio(audioldm, text, random_seed, duration=duration, guidance_scale=guidance_scale, n_candidate_gen_per_text=int(n_candidates)) # [bs, 1, samples]
waveform = [(16000, wave[0]) for wave in waveform]
# waveform = [(16000, np.random.randn(16000)), (16000, np.random.randn(16000))]
if(len(waveform) == 1):
return waveform[0]
else:
return waveform
# iface = gr.Interface(fn=text2audio, inputs=[
# gr.Textbox(value="A man is speaking in a huge room", max_lines=1),
# gr.Slider(2.5, 10, value=5, step=2.5),
# gr.Slider(0, 5, value=2.5, step=0.5),
# gr.Number(value=42)
# ], outputs=[gr.Audio(label="Output", type="numpy"), gr.Audio(label="Output", type="numpy")],
# allow_flagging="never"
# )
# iface.launch(share=True)
iface = gr.Blocks()
with iface:
gr.HTML(
"""
<div style="text-align: center; max-width: 700px; margin: 0 auto;">
<div
style="
display: inline-flex;
align-items: center;
gap: 0.8rem;
font-size: 1.75rem;
"
>
<h1 style="font-weight: 900; margin-bottom: 7px;">
Text-to-Audio Generation with AudioLDM
</h1>
</div>
<p style="margin-bottom: 10px; font-size: 94%">
<a href="https://arxiv.org/abs/2301.12503">[Paper]</a> <a href="https://audioldm.github.io/">[Project page]</a>
</p>
</div>
"""
)
with gr.Group():
with gr.Box():
############# Input
textbox = gr.Textbox(value="A hammer is hitting a wooden surface", max_lines=1)
with gr.Accordion("Click to modify detailed configurations", open=False):
seed = gr.Number(value=42, label="Change this value (any integer number) will lead to a different generation result.")
duration = gr.Slider(2.5, 10, value=5, step=2.5, label="Duration (seconds)")
guidance_scale = gr.Slider(0, 5, value=2.5, step=0.5, label="Guidance scale (Large => better quality and relavancy to text; Small => better diversity)")
n_candidates = gr.Slider(1, 5, value=3, step=1, label="Automatic quality control. This number control the number of candidates (e.g., generate three audios and choose the best to show you). A Larger value usually lead to better quality with heavier computation")
############# Output
outputs=[gr.Audio(label="Output", type="numpy")]
# outputs=[gr.Audio(label="Output", type="numpy"), gr.Audio(label="Output", type="numpy")]
btn = gr.Button("Submit").style(full_width=True)
btn.click(text2audio, inputs=[textbox, duration, guidance_scale, seed, n_candidates], outputs=outputs)
gr.HTML('''
<hr>
<div class="footer" style="text-align: center; max-width: 700px; margin: 0 auto;">
<p>Model by <a href="https://haoheliu.github.io/" style="text-decoration: underline;" target="_blank">Haohe Liu</a>
</p>
</div>
''')
iface.queue(concurrency_count = 2)
iface.launch(debug=True)
# iface.launch(debug=True, share=True)