models.py

1.4 kB · python · 53 lines

1import json2from dataclasses import dataclass, field3from typing import Any, Dict, List4from .enums import ChordType, Movement, Scale, WaveType56# VOICE78@dataclass9class Voice:10    note_pool: list[int] = field(default_factory=list)11    movements: list[Movement] = field(default_factory=list)12    chord_type: ChordType = None13    num_notes: list[int] = None14    wave_type: WaveType = WaveType.SINE15    num_harmonics: int = 116    harmonic_wave: WaveType = WaveType.TRIANGLE1718    def __post_init__(self):19        if self.num_notes is None:20            self.num_notes = [1]2122# MUSIC2324@dataclass25class Music:26    scale: Scale = None27    progression: str = None28    voices: list["Voice"] = None29    track: List[List[int]] = None3031    def to_dict(self) -> Dict[str, Any]:32        data = {}33        data["scale"] = self.scale.value if self.scale else None34        data["progression"] = self.progression35        data["track"] = self.track36        return data3738    @classmethod39    def from_dict(cls, data: Dict[str, Any]) -> "Music":40        s = cls()41        s.scale = Scale(data["scale"]) if data.get("scale") else None42        s.progression = data.get("progression")43        s.track = data.get("track")44        return s4546    # JSON4748    def to_json_string(self) -> str:49        return json.dumps({50            "scale": self.scale.value if self.scale else None,51            "progression": self.progression,52            "track": self.track,53        }, separators=(",", ":"))