Skip to main content

proteus_lib/playback/engine/
state.rs

1//! Shared playback state and metrics structures.
2
3/// Buffering configuration for the playback engine.
4#[derive(Debug, Clone, Copy)]
5pub struct PlaybackBufferSettings {
6    pub start_buffer_ms: f32,
7    pub track_eos_ms: f32,
8    pub start_sink_chunks: usize,
9    pub max_sink_chunks: usize,
10    pub startup_silence_ms: f32,
11    pub startup_fade_ms: f32,
12    pub seek_fade_out_ms: f32,
13    pub seek_fade_in_ms: f32,
14    pub append_jitter_log_ms: f32,
15    pub effect_boundary_log: bool,
16}
17
18impl PlaybackBufferSettings {
19    /// Create new buffer settings with a given start buffer size (ms).
20    pub fn new(start_buffer_ms: f32) -> Self {
21        Self {
22            start_buffer_ms: start_buffer_ms.max(0.0),
23            track_eos_ms: 1000.0,
24            start_sink_chunks: 0,
25            max_sink_chunks: 0,
26            startup_silence_ms: 0.0,
27            startup_fade_ms: 150.0,
28            seek_fade_out_ms: 30.0,
29            seek_fade_in_ms: 80.0,
30            append_jitter_log_ms: 0.0,
31            effect_boundary_log: false,
32        }
33    }
34}
35
36/// Aggregated DSP chain performance metrics used by debug UI.
37#[derive(Debug, Clone, Copy, Default)]
38pub struct DspChainMetrics {
39    pub dsp_time_ms: f64,
40    pub audio_time_ms: f64,
41    pub rt_factor: f64,
42    pub overrun: bool,
43    pub overrun_ms: f64,
44    pub avg_overrun_ms: f64,
45    pub max_overrun_ms: f64,
46    pub avg_dsp_ms: f64,
47    pub avg_audio_ms: f64,
48    pub avg_rt_factor: f64,
49    pub min_rt_factor: f64,
50    pub max_rt_factor: f64,
51    pub track_key_count: usize,
52    pub finished_track_count: usize,
53    pub prot_key_count: usize,
54    pub chain_ksps: f64,
55    pub avg_chain_ksps: f64,
56    pub min_chain_ksps: f64,
57    pub max_chain_ksps: f64,
58    pub underrun_count: u64,
59    pub underrun_active: bool,
60    pub pop_count: u64,
61    pub clip_count: u64,
62    pub nan_count: u64,
63    pub append_delay_ms: f64,
64    pub avg_append_delay_ms: f64,
65    pub max_append_delay_ms: f64,
66    pub late_append_count: u64,
67    pub late_append_active: bool,
68}