Recombine audio

Add an option in the splitter to recombine stems at the end.

Topic: recombine_audio
This commit is contained in:
Hayk Martiros 2023-01-08 20:12:42 +00:00
parent 8e87c133c8
commit a4784bb4dc
2 changed files with 19 additions and 10 deletions

View File

@ -39,7 +39,7 @@ def render_audio_to_audio() -> None:
audio_file = st.file_uploader( audio_file = st.file_uploader(
"Upload audio", "Upload audio",
type=["mp3", "m4a", "ogg", "wav", "flac"], type=["mp3", "m4a", "ogg", "wav", "flac", "webm"],
label_visibility="collapsed", label_visibility="collapsed",
) )

View File

@ -1,5 +1,6 @@
import io import io
import pydub
import streamlit as st import streamlit as st
from riffusion.audio_splitter import split_audio from riffusion.audio_splitter import split_audio
@ -37,8 +38,12 @@ def render_split_audio() -> None:
label_visibility="collapsed", label_visibility="collapsed",
) )
recombine = st.sidebar.checkbox( stem_options = ["vocals", "drums", "bass", "guitar", "piano", "other"]
"Recombine", value=False, help="Show recombined audio at the end for comparison" recombine = st.sidebar.multiselect(
"Recombine",
options=stem_options,
default=[],
help="Recombine these stems at the end",
) )
if not audio_file: if not audio_file:
@ -46,7 +51,8 @@ def render_split_audio() -> None:
return return
st.write("#### original") st.write("#### original")
st.audio(audio_file) # TODO(hayk): This might be bogus, it can be other formats..
st.audio(audio_file, format="audio/mp3")
if not st.button("Split", type="primary"): if not st.button("Split", type="primary"):
return return
@ -61,19 +67,22 @@ def render_split_audio() -> None:
st.write(f"#### {name}") st.write(f"#### {name}")
audio_bytes = io.BytesIO() audio_bytes = io.BytesIO()
stem.export(audio_bytes, format="mp3") stem.export(audio_bytes, format="mp3")
st.audio(audio_bytes) st.audio(audio_bytes, format="audio/mp3")
if recombine: if recombine:
stems_list = list(stems.values()) recombined: pydub.AudioSegment = None
recombined = stems_list[0] for name, stem in stems.items():
for stem in stems_list[1:]: if name in recombine:
recombined = recombined.overlay(stem) if recombined is None:
recombined = stem
else:
recombined = recombined.overlay(stem)
# Display # Display
st.write("#### recombined") st.write("#### recombined")
audio_bytes = io.BytesIO() audio_bytes = io.BytesIO()
recombined.export(audio_bytes, format="mp3") recombined.export(audio_bytes, format="mp3")
st.audio(audio_bytes) st.audio(audio_bytes, format="audio/mp3")
if __name__ == "__main__": if __name__ == "__main__":