File size: 3,588 Bytes
a8cb0a6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
from flask import Flask, request, render_template
import os
import views
import warnings
import configparser
import json

warnings.filterwarnings(
    "ignore", message="n_fft=2048 is too large for input signal of length"
)
warnings.filterwarnings("ignore", message="librosa.core.audio.__audioread_load")
warnings.filterwarnings(
    "ignore", message="PySoundFile failed. Trying audioread instead."
)

config = configparser.ConfigParser()
script_dir = os.path.dirname(os.path.abspath(__file__))
config.read(os.path.join(script_dir, "config.ini"))

config = config["AppSettings"]
app = Flask(__name__)


@app.route("/")
def index():
    audios = views.index_view(script_dir)
    return render_template("index.html", page="index", audios=audios)


# @app.route('/about')
# def about():
#     return render_template("about.html", page = "about")

# @app.route('/manual')
# def manual():
#     return render_template("manual.html", page = "manual")

# # # Define an API endpoint
# # @app.route('/api/data', methods=['GET'])
# # def get_data():
# #     data = {
# #         'message': 'This is a basic Flask API endpoint!',
# #         'data': [1, 2, 3, 4, 5]
# #     }
# #     return jsonify(data)


@app.route("/api/process-music", methods=["POST"])
def process_music():
    simThresh = float(request.form["simThresh"])
    amplitudeMode = request.form["amplitudeMode"]
    instruments_dict = {
        f"{ogi}.ogg": [-12, 12]
        for ogi in json.loads(config["instruments_name"])
        if ogi in request.form
    }
    parallel_processes_count = int(config["parallelProcessesCount"])
    return views.process_music_view(
        request.files,
        json.loads(config["ALLOWED_EXTENSIONS"]),
        os.path.join(script_dir, config["AUDIOS_DIR"]),
        int(config["sr"]),
        instruments_dict,
        json.loads(config["scaling_dict"]),
        int(config["initialBestMatchesLength"]),
        simThresh,
        int(config["bin_length"]),
        amplitudeMode,
        parallel_processes_count,
    )


# # @app.route("/api/get-processed-music", methods=["GET"])
# # def get_processed_music():
# #     return views.get_processed_music_view(
# #         os.path.join(script_dir, config["FILES_FOLDER"])
# #     )


@app.route("/api/get-commands", methods=["POST"])
def get_commands():
    music_box_dict = json.loads(config["music_box_dict"])
    amplitude_dict = json.loads(config["amplitude_dict"])
    pitch_mapping_shift = int(config["pitch_mapping_shift"])
    instant_repeater_zs = [int(_) for _ in config["instant_repeater_zs"].split(",")]
    hearable_range = int(config["hearable_range"])
    one_floor_vertical_gap = int(config["one_floor_vertical_gap"])
    one_hundred_milli_horizontal_gap = int(config["100ms_horizontal_gap"])

    audioId = request.form.get("audioId", type=str)
    starting_coordinates = [
        int(_) for _ in request.form.get("startingCoordinates").split(" ")
    ]
    sim_thresh = request.form.get("simThresh", type=float)
    amplitude_mode = request.form.get("commandsAmplitudeMode", type=str)

    return views.get_commands_view(
        os.path.join(
            os.path.join(os.path.join(script_dir, config["AUDIOS_DIR"]), audioId),
            f"result-{amplitude_mode}.pkl",
        ),
        starting_coordinates,
        music_box_dict,
        amplitude_dict,
        pitch_mapping_shift,
        sim_thresh,
        instant_repeater_zs,
        hearable_range,
        one_floor_vertical_gap,
        one_hundred_milli_horizontal_gap,
    )


if __name__ == "__main__":
    app.run(host="0.0.0.0", port=7860, debug=True)