File size: 1,749 Bytes
f320de7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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")