AudioSpleeter / app.py
baaastien's picture
Upload app.py
42fbbc0
raw
history blame
1.92 kB
from spleeter.separator import Separator
import gradio as gr
import os
import random2
# Initiate a file separator with 2 stems (instruments and vocals)
separator = Separator('spleeter:2stems')
# Gradio function to split audio stems and return their filepaths
def extract_stems(audio):
# initiate a folder for splitted files
foldername = str(random2.randrange(100000000))
# Separate audio input. Synchronous is true to wait for the end of split before going further
separator.separate_to_file(audio, foldername, filename_format= foldername + "/{instrument}.wav", synchronous=True)
# To get full filepath, need to clean the input audio filepath (ex : /tmp/audioexample.mp3)
filepath = audio[5:] # remove first five chars aka /tmp/
filepath = filepath[:max([idx for idx, x in enumerate(filepath) if x == '.'])] # remove extension
vocals = f"./output/"+ foldername +"/vocals.wav"
accompaniment = f"./output/"+ foldername +"/accompaniment.wav"
return vocals, accompaniment
# Launch a Gradio interface
# Input is an audio file, returning his filepath
# Output is an also audio files
title = "Demo: Deezer Spleeter / Audio separation library"
description = "This demo is a basic interface for <a href='https://research.deezer.com/projects/spleeter.html' target='_blank'>Deezer Spleeter</a>. It uses the Spleeter library for separate audio file in two stems : accompaniments and vocals."
examples = [["examples/" + mp3] for mp3 in os.listdir("examples/")]
demo = gr.Interface(
fn=extract_stems,
inputs=gr.Audio(source="upload", type="filepath"),
outputs=[gr.Audio(label="Vocals stem", source="upload", type="filepath"), gr.Audio(label="Accompaniment stem", source="upload", type="filepath")],
title=title,
description=description,
examples=examples,
allow_flagging="never",
cache_examples=False
)
demo.launch(share=True)