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=(",", ":"))