Implement structured parsing and typing for pattern events (Note, Fader, MIDI, Unknown)

This commit is contained in:
2026-07-13 04:41:18 +02:00
parent fac7e80bb7
commit 3e43356733
2 changed files with 183 additions and 15 deletions

View File

@@ -74,9 +74,67 @@ export type Pattern = {
bars: number;
};
export enum PatternEventKind {
Note = 0,
Fader = 1,
Midi = 2,
}
export type PatternEventBase = {
position: number;
source: number;
flags: number;
rawData: Uint8Array;
};
export type NotePatternEvent = PatternEventBase & {
type: 'note';
kind: PatternEventKind.Note;
pad: number;
note: number;
velocity: number;
duration: number;
};
export type FaderAutomationEvent = PatternEventBase & {
type: 'fader';
kind: PatternEventKind.Fader;
parameter: number;
reserved: number;
rawValue: number;
value: number;
};
export type MidiPatternEvent = PatternEventBase & {
type: 'midi';
kind: PatternEventKind.Midi;
data: Uint8Array;
};
export type UnknownPatternEvent = PatternEventBase & {
type: 'unknown';
kind: number;
data: Uint8Array;
};
export type PatternEvent =
| NotePatternEvent
| FaderAutomationEvent
| MidiPatternEvent
| UnknownPatternEvent;
export type SceneGroupPatternData = {
group: Group;
patternNumber: number;
bars: number;
recordCount: number;
events: PatternEvent[];
};
export type Scene = {
name: string;
patterns: Pattern[];
patternEvents: Partial<Record<Group, SceneGroupPatternData>>;
};
export type Note = {