1use crate::{DeckId, LoadStatus, SurfaceRegion};
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
5#[serde(tag = "type", rename_all = "snake_case")]
6pub enum PlayerEvent {
7 HydrateDeck {
8 deck: DeckId,
9 loaded: bool,
10 status: LoadStatus,
11 duration_seconds: f64,
12 current_seconds: f64,
13 playing: bool,
14 transport_on: bool,
15 needle_lifted: bool,
16 playback_rate: f32,
17 channel_gain: f32,
18 },
19 SetActiveDeck { deck: DeckId },
20 SetLoadState { deck: DeckId, status: LoadStatus, loaded: bool, duration_seconds: f64 },
21 PlaybackPositionObserved { deck: DeckId, seconds: f64 },
22 PlaybackEnded { deck: DeckId },
23 ToggleTransport { deck: DeckId },
24 SetTransport { deck: DeckId, running: bool },
25 TogglePlayback { deck: DeckId },
26 SetNeedle { deck: DeckId, lifted: bool, observed_playback_seconds: f64 },
27 Seek { deck: DeckId, seconds: f64 },
28 SetPlaybackRate { deck: DeckId, rate: f32 },
29 StartTimedRegion { region: SurfaceRegion, now_ms: f64, duration_seconds: f64 },
30 StopTimedRegion { region: SurfaceRegion, completed: bool },
31 TimedRegionElapsed { region: SurfaceRegion },
32 StartClipLoop { clip_id: String },
33 StopClipLoop,
34 BeginScratch { deck: DeckId, pointer_id: i32, playback_seconds: f64, rotation_degrees: f64 },
35 MoveScratch { deck: DeckId, position_frames: f64, rendered_position_frames: f64, rate: f32, rotation_degrees: f64, impulse: f32 },
36 ScratchRenderedPosition { deck: DeckId, rendered_position_frames: f64 },
37 EndScratch { deck: DeckId, rendered_position_frames: f64, rotation_degrees: f64, resume_playback: bool, save_sample: bool, can_platter_handoff: bool },
38 SetCrossfader { value: f32 },
39 SetChannelGain { deck: DeckId, value: f32 },
40 SetTwoDeckMode { enabled: bool },
41 Tick { now_ms: f64 },
42}