1use crate::loudness::LoudnessValues;
2use crate::message::SessionSlotState;
3
4#[derive(Clone, Debug, Default)]
5pub struct MeterSnapshot {
6 pub hw_out_db: Vec<f32>,
7 pub hw_out_lufs: Option<LoudnessValues>,
8 pub track_meters: Vec<(String, Vec<f32>)>,
9}
10
11#[derive(Clone, Debug)]
12pub struct TransportSnapshot {
13 pub sample: usize,
14 pub tempo_bpm: f64,
15 pub playing: bool,
16 pub transport_running: bool,
17 pub tsig_num: u16,
18 pub tsig_denom: u16,
19}
20
21impl Default for TransportSnapshot {
22 fn default() -> Self {
23 Self {
24 sample: 0,
25 tempo_bpm: 120.0,
26 playing: false,
27 transport_running: false,
28 tsig_num: 4,
29 tsig_denom: 4,
30 }
31 }
32}
33
34#[derive(Clone, Debug)]
35pub struct SessionRuntimeSlotSnapshot {
36 pub track_name: String,
37 pub scene_index: usize,
38 pub state: SessionSlotState,
39 pub play_position_samples: usize,
40 pub elapsed_samples: usize,
41}
42
43#[derive(Clone, Debug, PartialEq, Eq, Hash)]
44pub struct SessionCompletedClipPass {
45 pub track_name: String,
46 pub scene_index: usize,
47 pub clip_id: String,
48 pub pass_index: usize,
49 pub start_sample: usize,
50 pub length_samples: usize,
51}
52
53#[derive(Clone, Debug, Default)]
54pub struct SessionRuntimeSnapshot {
55 pub session_sample: usize,
56 pub slots: Vec<SessionRuntimeSlotSnapshot>,
57 pub completed_clip_passes: Vec<SessionCompletedClipPass>,
58 pub current_scene: Option<usize>,
61}