lazyghost's picture
initial commit
a8cb0a6
from flask import jsonify
import utils
import librosa
import os
import pickle as pkl
import traceback
def index_view(script_dir):
try:
audios_dir_path = os.path.join(script_dir, "Audios")
audios = {}
for _ in os.listdir(audios_dir_path):
# If condition to prevent .DS_Store error on listdir, since .DS_Store is a not a directory
if os.path.isdir(os.path.join(audios_dir_path, _)):
audio_id = _
audios[audio_id] = {}
audio_id_dir_path = os.path.join(audios_dir_path, audio_id)
for file_name in os.listdir(audio_id_dir_path):
if '.pkl' not in file_name:
audios[audio_id][file_name.split(".")[0]] = utils.convert_to_serializable(librosa.load(os.path.join(audio_id_dir_path, file_name)))
return audios
except Exception as e:
print(e)
print(f"An error occurred: {e}")
traceback.print_exc()
return jsonify({"message": "Error occurred, will solve it soon"}), 500
def process_music_view(
files,
allowed_extensions,
audios_dir_path,
sr,
instruments_dict,
scaling_dict,
initialBestMatchesLength,
simThresh,
binLength,
amplitudeMode,
parallel_processes_count
):
try:
if "audioFile" not in files:
return jsonify({"error": "No file part"}), 400
uploadedFile = files["audioFile"]
if uploadedFile.filename == "":
return jsonify({"error": "No selected file"}), 400
allowed = (
"." in uploadedFile.filename
and uploadedFile.filename.rsplit(".", 1)[1].lower() in allowed_extensions
)
if uploadedFile and allowed:
audioId = uploadedFile.filename.split('.')[0]
if not os.path.exists(os.path.join(audios_dir_path, audioId)):
os.mkdir(os.path.join(audios_dir_path, audioId))
audioExtension = uploadedFile.filename.split('.')[1]
# if audioId in os.listdir(audios_dir_path):
# return jsonify({"error": "Audio with same id already exists"}), 400
upload_file_path = os.path.join(os.path.join(audios_dir_path, audioId), f"original.{audioExtension}")
uploadedFile.save(upload_file_path)
mainAudioValues = librosa.load(upload_file_path)[0]
processed_audio, sr = utils.call_file_processing_logic_parallely(
mainAudioValues,
sr,
instruments_dict,
scaling_dict,
initialBestMatchesLength,
simThresh,
binLength,
os.path.join(audios_dir_path, audioId),
amplitudeMode,
parallel_processes_count
)
return jsonify({"message": "File preprocessed successfully", "processed_music": list(processed_audio), "sample_rate": sr}), 201
else:
return jsonify({"error": "File type not allowed"}), 400
except Exception as e:
print(e)
print(f"An error occurred: {e}")
traceback.print_exc()
return jsonify({"message": "Error occurred, will solve it soon"}), 500
# def get_processed_music_view(files_folder_path):
# results_folder_path = os.path.join(files_folder_path, "Results")
# sounds_folder_path = os.path.join(results_folder_path, "sounds")
# zip_buffer = utils.create_zip_from_audios(sounds_folder_path)
# return send_file(
# zip_buffer,
# mimetype="application/zip",
# as_attachment=True,
# download_name="audio_files.zip",
# )
def get_commands_view(
pkl_file_path: str,
starting_coordinates: list[int],
music_box_dict,
amplitude_dict,
pitch_mapping_shift,
sim_thresh,
instant_repeater_zs,
hearable_range,
one_floor_vertical_gap,
one_hundred_milli_horizontal_gap,
):
try:
if not os.path.exists(pkl_file_path):
return jsonify({"message": "AudioId hasn't been processed for selected amplitude mode"}), 404
with open(pkl_file_path, "rb") as f:
data = pkl.load(f)
results = utils.call_command_generator(
data,
music_box_dict,
amplitude_dict,
hearable_range,
one_hundred_milli_horizontal_gap,
starting_coordinates,
one_floor_vertical_gap,
instant_repeater_zs,
pitch_mapping_shift,
sim_thresh,
)
return jsonify({"data": results}), 201
except Exception as e:
print(e)
print(f"An error occurred: {e}")
traceback.print_exc()
return jsonify({"message": "Error occurred, will solve it soon"}), 500