glitcher_core/
config.rs

1//! Application configuration
2
3use serde::{Deserialize, Serialize};
4
5/// Main application configuration
6#[derive(Debug, Clone, Serialize, Deserialize, Default)]
7pub struct AppConfig {
8    pub audio: AudioConfig,
9    pub visual: VisualConfig,
10    pub input: InputConfig,
11}
12
13/// Audio configuration
14#[derive(Debug, Clone, Serialize, Deserialize)]
15pub struct AudioConfig {
16    /// Sample rate (Hz)
17    pub sample_rate: u32,
18    /// FFT window size
19    pub fft_size: usize,
20    /// Buffer size for audio processing
21    pub buffer_size: usize,
22}
23
24impl Default for AudioConfig {
25    fn default() -> Self {
26        Self {
27            sample_rate: 44100,
28            fft_size: 2048,
29            buffer_size: 1024,
30        }
31    }
32}
33
34/// Visual configuration
35#[derive(Debug, Clone, Serialize, Deserialize)]
36pub struct VisualConfig {
37    /// VJ output window width
38    pub width: u32,
39    /// VJ output window height
40    pub height: u32,
41    /// Target FPS
42    pub target_fps: u32,
43    /// VSync enabled
44    pub vsync: bool,
45}
46
47impl Default for VisualConfig {
48    fn default() -> Self {
49        Self {
50            width: 1920,
51            height: 1080,
52            target_fps: 60,
53            vsync: true,
54        }
55    }
56}
57
58/// Input configuration
59#[derive(Debug, Clone, Serialize, Deserialize)]
60pub struct InputConfig {
61    /// Enable keyboard input
62    pub keyboard_enabled: bool,
63    /// Enable gamepad input
64    pub gamepad_enabled: bool,
65    /// Enable MIDI input
66    pub midi_enabled: bool,
67}
68
69impl Default for InputConfig {
70    fn default() -> Self {
71        Self {
72            keyboard_enabled: true,
73            gamepad_enabled: true,
74            midi_enabled: false,
75        }
76    }
77}