Spaces:
Sleeping
Sleeping
import streamlit as st | |
from model import generate | |
import io | |
import numpy as np | |
from scipy.io.wavfile import write | |
# ----- | |
# Utils | |
# ----- | |
def np_to_wav(waveform: np.ndarray, sample_rate: int) -> bytes: | |
bytes_wav = bytes() | |
byte_io = io.BytesIO(bytes_wav) | |
write(byte_io, sample_rate, waveform.T) | |
return byte_io.read() | |
# ------------------ | |
# App initialization | |
# ------------------ | |
if "result" not in st.session_state: | |
st.session_state["result"] = None | |
# --- | |
# App | |
# --- | |
st.title("Sound Exploration") | |
col1, col2 = st.columns(2) | |
with col1: | |
instrument = st.selectbox( | |
"Which intrument do you want ?", | |
( | |
"πΈ Bass", | |
"πΊ Brass", | |
"πͺ Flute", | |
"πͺ Guitar", | |
"πΉ Keyboard", | |
"π¨ Mallet", | |
"πͺ Organ", | |
"π· Reed", | |
"π» String", | |
"β‘ Synth lead", | |
"π€ Vocal", | |
), | |
) | |
with col2: | |
instrument_t = st.selectbox( | |
"Which type intrument do you want ?", | |
("π― Acoustic", "ποΈ Electronic", "ποΈ Synthetic"), | |
) | |
with st.expander("Magical parameters πͺ"): | |
col1, col2 = st.columns(2) | |
with col1: | |
p1 = st.slider("p1", 0.0, 1.0, step=0.001, label_visibility="collapsed") | |
p2 = st.slider("p2", 0.0, 1.0, step=0.001, label_visibility="collapsed") | |
p3 = st.slider("p3", 0.0, 1.0, step=0.001, label_visibility="collapsed") | |
with col2: | |
p4 = st.slider("p4", 0.0, 1.0, step=0.001, label_visibility="collapsed") | |
p5 = st.slider("p5", 0.0, 1.0, step=0.001, label_visibility="collapsed") | |
use_params = st.toggle("Use magical parameters ?") | |
params = (p1, p2, p3, p4, p5) if use_params else None | |
if st.button("Generate β¨", type="primary"): | |
st.session_state["result"] = generate([instrument, instrument_t], params) | |
if st.session_state["result"] is not None: | |
col1, col2 = st.columns(2) | |
with col1: | |
st.audio(st.session_state["result"], sample_rate=16000) | |
with col2: | |
st.download_button( | |
label="Download β¬οΈ", | |
data=np_to_wav(st.session_state["result"], 16000), | |
file_name="result.wav", | |
) | |