File size: 2,237 Bytes
55056c0
bdac835
6ed901c
bdac835
6ed901c
 
e72f4c2
 
 
 
 
6ed901c
85c68ce
6ed901c
 
 
 
bdac835
e72f4c2
 
 
 
 
bdac835
6ed901c
bdac835
e72f4c2
 
 
 
bdac835
 
 
 
 
e72f4c2
 
 
 
 
 
 
 
 
 
 
 
 
 
bdac835
 
 
e72f4c2
 
 
 
bdac835
6ed901c
 
e72f4c2
 
 
6ed901c
e72f4c2
 
 
6ed901c
bdac835
 
6ed901c
bdac835
6ed901c
 
 
 
 
 
 
 
e72f4c2
6ed901c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import streamlit as st
from model import generate
import io
import numpy as np
from scipy.io.wavfile import write

# -----
# Utils
# -----


@st.cache_data
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",
        )