File size: 1,397 Bytes
3d13b69
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from flask import Flask, render_template
from flask_socketio import SocketIO, emit
# from flask_cors import CORS
from audiocraft.models import musicgen
import torchaudio
import soundfile as sf


# app = Flask(__name__)
app = Flask(__name__, static_folder="../build", static_url_path="/")
app.debug = True
app.secret_key = "random secret key!"
# CORS(app)
# cors = CORS(app, resource={r"/*": {"origins": "*"}})
socketio = SocketIO(app, cors_allowed_origins="*")
print("Loading model...")
model = musicgen.MusicGen.get_pretrained("melody")
model.set_generation_params(duration=8)

@app.route("/")
def index():
    print("HI")
    return render_template("index.html")


@socketio.on("connect")
def connect():
    print("Client connected")
    stream_audio()


@socketio.on("disconnect")
def disconnect():
    print("Client disconnected")

def stream_audio(data):
    descriptions = ["Film score epic moment"]
    melody, sr = torchaudio.load("./asitwas_vocals.wav")
    print("Running inference...")
    wav = model.generate_with_chroma(descriptions, melody[None].expand(1, -1, -1), sr)
    model_sampling_rate = 32000
    sf.write("output.wav", wav[0].numpy().T, model_sampling_rate)
    chunk_size = 1024
    for i in range(0, len(wav[0]), chunk_size):
        chunk = wav[0][i : i + chunk_size]# * 500
        emit("audio_chunk", chunk.tolist())


if __name__ == "__main__":
    socketio.run(app)