music-assistant-server

1.2 KBPY
smart_fades.py
1.2 KB42 lines • python
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