File size: 826 Bytes
d171350
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
"""Shared data types used across the pipeline."""

from dataclasses import dataclass, field


@dataclass
class NoteEvent:
    """A single note or chord at a specific tick position."""
    tick: int
    fret_set: set  # {0, 1, 2, 3, 4} where 0=Green, 4=Orange
    sustain_ticks: int = 0
    is_hopo: bool = False


@dataclass
class ChartData:
    """Complete chart data ready for MIDI serialization."""
    resolution: int = 192  # ticks per quarter note
    tempo_events: list = field(default_factory=lambda: [(0, 120.0)])
    time_signatures: list = field(default_factory=lambda: [(0, 4, 4)])
    sections: list = field(default_factory=list)  # [(tick, label), ...]
    notes: dict = field(default_factory=dict)  # {"expert": [NoteEvent, ...], ...}
    beats: list = field(default_factory=list)  # [(tick, is_downbeat), ...]