import keras import os import subprocess from pathlib import Path def get_dataset_path(root_dir, URL): """Downlods chorales csv dataset and confgirues files path""" DATASET_PATH = keras.utils.get_file( "jsb_chorales.zip", URL, extract= True, cache_dir= root_dir, cache_subdir= "data" ) TRAIN_PATH = os.path.join(DATASET_PATH, "jsb_chorales/train") VAL_PATH = os.path.join(DATASET_PATH, "jsb_chorales/val") ARTIFACTS_PATH = os.path.join(root_dir, "artifacts") MODEL_PATH = os.path.join(root_dir, "model") os.makedirs(ARTIFACTS_PATH, exist_ok=True) os.makedirs(MODEL_PATH, exist_ok=True) return TRAIN_PATH, VAL_PATH, ARTIFACTS_PATH, MODEL_PATH def midi_to_wave(midi_file_path, SF2_PATH, wave_path="samples/sample.wav"): """Converts a MIDI file to a WAV audio file using FluidSynth.""" if not os.path.exists(midi_file_path): raise FileNotFoundError(f"MIDI file not found: {midi_file_path}") if not os.path.exists(SF2_PATH): raise FileNotFoundError(f"SoundFont file not found: {SF2_PATH}") os.makedirs(os.path.dirname(wave_path), exist_ok=True) cmd = ["fluidsynth", "-ni", "-F", wave_path, "-r", "44100", SF2_PATH, midi_file_path] try: subprocess.run(cmd, check=True, capture_output=True, text=True) except subprocess.CalledProcessError as e: raise RuntimeError(f"FluidSynth failed: {e.stderr}") print(f"WAV file saved at {wave_path}") ASSETS_DIR = Path(__file__).parent.parent / "assets" def load_css(): return (ASSETS_DIR / "css/theme.css").read_text(encoding="utf-8") def load_markdown(name): return (ASSETS_DIR / f"markdown/{name}.md").read_text(encoding="utf-8")