Skip to main content

record_player/
event.rs

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}