Skip to main content

voirs_spatial/visual_audio/
config.rs

1//! Configuration types for visual audio integration
2
3use super::mapping::{AudioVisualMapping, VisualDistanceAttenuation};
4use super::sync::VisualSyncSettings;
5use super::types::ColorRGBA;
6use serde::{Deserialize, Serialize};
7use std::collections::HashMap;
8
9/// Configuration for visual-audio integration
10#[derive(Debug, Clone, Serialize, Deserialize)]
11pub struct VisualAudioConfig {
12    /// Enable visual feedback
13    pub enabled: bool,
14
15    /// Master visual intensity multiplier
16    pub master_intensity: f32,
17
18    /// Audio-to-visual mapping settings
19    pub audio_mapping: AudioVisualMapping,
20
21    /// Synchronization settings
22    pub sync_settings: VisualSyncSettings,
23
24    /// Distance-based visual attenuation
25    pub distance_attenuation: VisualDistanceAttenuation,
26
27    /// Color scheme preferences
28    pub color_scheme: ColorScheme,
29
30    /// Accessibility settings
31    pub accessibility: VisualAccessibilitySettings,
32
33    /// Performance optimization settings
34    pub performance: VisualPerformanceSettings,
35}
36
37/// Color scheme configuration
38#[derive(Debug, Clone, Serialize, Deserialize)]
39pub struct ColorScheme {
40    /// Color scheme type
41    pub scheme_type: ColorSchemeType,
42
43    /// Base colors for different audio sources
44    pub source_colors: HashMap<String, ColorRGBA>,
45
46    /// Ambient lighting color
47    pub ambient_color: ColorRGBA,
48
49    /// Color temperature (Kelvin)
50    pub color_temperature: f32,
51
52    /// Saturation level
53    pub saturation: f32,
54
55    /// Brightness level
56    pub brightness: f32,
57}
58
59/// Color scheme types
60#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
61pub enum ColorSchemeType {
62    /// Default balanced colors
63    Default,
64
65    /// High contrast for accessibility
66    HighContrast,
67
68    /// Warm color palette
69    Warm,
70
71    /// Cool color palette
72    Cool,
73
74    /// Monochromatic
75    Monochromatic,
76
77    /// Custom user-defined scheme
78    Custom,
79}
80
81/// Visual accessibility settings
82#[derive(Debug, Clone, Serialize, Deserialize)]
83pub struct VisualAccessibilitySettings {
84    /// High contrast mode
85    pub high_contrast: bool,
86
87    /// Color blind friendly palette
88    pub color_blind_friendly: bool,
89
90    /// Motion sensitivity reduction
91    pub reduced_motion: bool,
92
93    /// Visual indicator scaling
94    pub indicator_scaling: f32,
95
96    /// Text size scaling
97    pub text_scaling: f32,
98
99    /// Audio description visual cues
100    pub audio_description_mode: bool,
101
102    /// Screen reader compatibility
103    pub screen_reader_compatible: bool,
104}
105
106/// Visual performance optimization settings
107#[derive(Debug, Clone, Serialize, Deserialize)]
108pub struct VisualPerformanceSettings {
109    /// Target frame rate
110    pub target_fps: f32,
111
112    /// Quality level (0.0-1.0)
113    pub quality_level: f32,
114
115    /// Level of detail (LOD) enable
116    pub lod_enabled: bool,
117
118    /// Culling distance
119    pub culling_distance: f32,
120
121    /// Maximum particle count
122    pub max_particles: usize,
123
124    /// Anti-aliasing level
125    pub anti_aliasing: u8,
126
127    /// Adaptive quality
128    pub adaptive_quality: bool,
129}
130
131// Default implementations
132
133impl Default for VisualAudioConfig {
134    fn default() -> Self {
135        Self {
136            enabled: true,
137            master_intensity: 0.8,
138            audio_mapping: AudioVisualMapping::default(),
139            sync_settings: VisualSyncSettings::default(),
140            distance_attenuation: VisualDistanceAttenuation::default(),
141            color_scheme: ColorScheme::default(),
142            accessibility: VisualAccessibilitySettings::default(),
143            performance: VisualPerformanceSettings::default(),
144        }
145    }
146}
147
148impl Default for ColorScheme {
149    fn default() -> Self {
150        Self {
151            scheme_type: ColorSchemeType::Default,
152            source_colors: HashMap::new(),
153            ambient_color: ColorRGBA {
154                r: 0.1,
155                g: 0.1,
156                b: 0.2,
157                a: 1.0,
158            },
159            color_temperature: 6500.0, // Daylight white
160            saturation: 0.8,
161            brightness: 0.7,
162        }
163    }
164}
165
166impl Default for VisualAccessibilitySettings {
167    fn default() -> Self {
168        Self {
169            high_contrast: false,
170            color_blind_friendly: false,
171            reduced_motion: false,
172            indicator_scaling: 1.0,
173            text_scaling: 1.0,
174            audio_description_mode: false,
175            screen_reader_compatible: false,
176        }
177    }
178}
179
180impl Default for VisualPerformanceSettings {
181    fn default() -> Self {
182        Self {
183            target_fps: 60.0,
184            quality_level: 0.8,
185            lod_enabled: true,
186            culling_distance: 50.0,
187            max_particles: 1000,
188            anti_aliasing: 4,
189            adaptive_quality: true,
190        }
191    }
192}