/
/
/
1"""Data models for Smart Fades analysis and configuration."""
2
3from dataclasses import dataclass
4from enum import IntEnum, StrEnum
5
6import numpy as np
7import numpy.typing as npt
8from mashumaro import DataClassDictMixin
9from mashumaro.config import BaseConfig
10
11
12class SmartFadesMode(StrEnum):
13 """Smart fades modes."""
14
15 SMART_CROSSFADE = "smart_crossfade" # Use smart crossfade with beat matching and EQ filters
16 STANDARD_CROSSFADE = "standard_crossfade" # Use standard crossfade only
17 DISABLED = "disabled" # No crossfade
18
19
20class SmartFadesAnalysisFragment(IntEnum):
21 """Smart fades analysis fragment types."""
22
23 INTRO = 1
24 OUTRO = 2
25
26
27@dataclass
28class SmartFadesAnalysis(DataClassDictMixin):
29 """Beat tracking analysis data for BPM matching crossfade."""
30
31 fragment: SmartFadesAnalysisFragment
32 bpm: float
33 beats: npt.NDArray[np.float64] # Beat positions
34 downbeats: npt.NDArray[np.float64] # Downbeat positions
35 confidence: float # Analysis confidence score 0-1
36 duration: float = 0.0 # Duration of the track in seconds
37
38 class Config(BaseConfig): # noqa: D106
39 serialization_strategy = {
40 np.ndarray: {"serialize": lambda x: x.tolist(), "deserialize": lambda x: np.array(x)}
41 }
42