mirror of
https://github.com/gradio-app/gradio.git
synced 2024-12-21 02:19:59 +08:00
9b42ba8f10
* changes * changes * revert changes * changes * add changeset * notebooks script * changes * changes --------- Co-authored-by: Ali Abid <aliabid94@gmail.com> Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Ali Abdalla <ali.si3luwa@gmail.com>
139 lines
4.0 KiB
Python
139 lines
4.0 KiB
Python
# A Blocks implementation of https://erlj.notion.site/Neural-Instrument-Cloning-from-very-few-samples-2cf41d8b630842ee8c7eb55036a1bfd6
|
|
|
|
import datetime
|
|
import os
|
|
import random
|
|
|
|
import gradio as gr
|
|
from gradio.components import Markdown as m
|
|
|
|
def get_time():
|
|
now = datetime.datetime.now()
|
|
return now.strftime("%m/%d/%Y, %H:%M:%S")
|
|
|
|
def generate_recording():
|
|
return random.choice(["new-sax-1.mp3", "new-sax-1.wav"])
|
|
|
|
def reconstruct(audio):
|
|
return random.choice(["new-sax-1.mp3", "new-sax-1.wav"])
|
|
|
|
io1 = gr.Interface(
|
|
lambda x, y, z: os.path.join(os.path.dirname(__file__),"sax.wav"),
|
|
[
|
|
gr.Slider(label="pitch"),
|
|
gr.Slider(label="loudness"),
|
|
gr.Audio(label="base audio file (optional)"),
|
|
],
|
|
gr.Audio(),
|
|
)
|
|
|
|
io2 = gr.Interface(
|
|
lambda x, y, z: os.path.join(os.path.dirname(__file__),"flute.wav"),
|
|
[
|
|
gr.Slider(label="pitch"),
|
|
gr.Slider(label="loudness"),
|
|
gr.Audio(label="base audio file (optional)"),
|
|
],
|
|
gr.Audio(),
|
|
)
|
|
|
|
io3 = gr.Interface(
|
|
lambda x, y, z: os.path.join(os.path.dirname(__file__),"trombone.wav"),
|
|
[
|
|
gr.Slider(label="pitch"),
|
|
gr.Slider(label="loudness"),
|
|
gr.Audio(label="base audio file (optional)"),
|
|
],
|
|
gr.Audio(),
|
|
)
|
|
|
|
io4 = gr.Interface(
|
|
lambda x, y, z: os.path.join(os.path.dirname(__file__),"sax2.wav"),
|
|
[
|
|
gr.Slider(label="pitch"),
|
|
gr.Slider(label="loudness"),
|
|
gr.Audio(label="base audio file (optional)"),
|
|
],
|
|
gr.Audio(),
|
|
)
|
|
|
|
demo = gr.Blocks(title="Neural Instrument Cloning")
|
|
|
|
with demo.clear():
|
|
m(
|
|
"""
|
|
## Neural Instrument Cloning from Very Few Samples
|
|
<center><img src="https://media.istockphoto.com/photos/brass-trombone-picture-id490455809?k=20&m=490455809&s=612x612&w=0&h=l9KJvH_25z0QTLggHrcH_MsR4gPLH7uXwDPUAZ_C5zk=" width="400px"></center>"""
|
|
)
|
|
m(
|
|
"""
|
|
This Blocks implementation is an adaptation [a report written](https://erlj.notion.site/Neural-Instrument-Cloning-from-very-few-samples-2cf41d8b630842ee8c7eb55036a1bfd6) by Nicolas Jonason and Bob L.T. Sturm.
|
|
|
|
I've implemented it in Blocks to show off some cool features, such as embedding live ML demos. More on that ahead...
|
|
|
|
### What does this machine learning model do?
|
|
It combines techniques from neural voice cloning with musical instrument synthesis. This makes it possible to produce neural instrument synthesisers from just seconds of target instrument audio.
|
|
|
|
### Audio Examples
|
|
Here are some **real** 16 second saxophone recordings:
|
|
"""
|
|
)
|
|
gr.Audio(os.path.join(os.path.dirname(__file__),"sax.wav"), label="Here is a real 16 second saxophone recording:")
|
|
gr.Audio(os.path.join(os.path.dirname(__file__),"sax.wav"))
|
|
|
|
m(
|
|
"""\n
|
|
Here is a **generated** saxophone recordings:"""
|
|
)
|
|
a = gr.Audio(os.path.join(os.path.dirname(__file__),"new-sax.wav"))
|
|
|
|
gr.Button("Generate a new saxophone recording")
|
|
|
|
m(
|
|
"""
|
|
### Inputs to the model
|
|
The inputs to the model are:
|
|
* pitch
|
|
* loudness
|
|
* base audio file
|
|
"""
|
|
)
|
|
|
|
m(
|
|
"""
|
|
Try the model live!
|
|
"""
|
|
)
|
|
|
|
gr.TabbedInterface(
|
|
[io1, io2, io3, io4], ["Saxophone", "Flute", "Trombone", "Another Saxophone"]
|
|
)
|
|
|
|
m(
|
|
"""
|
|
### Using the model for cloning
|
|
You can also use this model a different way, to simply clone the audio file and reconstruct it
|
|
using machine learning. Here, we'll show a demo of that below:
|
|
"""
|
|
)
|
|
|
|
a2 = gr.Audio()
|
|
a2.change(reconstruct, a2, a2)
|
|
|
|
m(
|
|
"""
|
|
Thanks for reading this! As you may have realized, all of the "models" in this demo are fake. They are just designed to show you what is possible using Blocks 🤗.
|
|
|
|
For details of the model, read the [original report here](https://erlj.notion.site/Neural-Instrument-Cloning-from-very-few-samples-2cf41d8b630842ee8c7eb55036a1bfd6).
|
|
|
|
*Details for nerds*: this report was "launched" on:
|
|
"""
|
|
)
|
|
|
|
t = gr.Textbox(label="timestamp")
|
|
|
|
demo.load(get_time, [], t)
|
|
|
|
if __name__ == "__main__":
|
|
demo.launch()
|