1use crate::types::Position3D;
4use serde::{Deserialize, Serialize};
5use std::collections::HashMap;
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
9pub struct NeuralSpatialConfig {
10 pub model_type: NeuralModelType,
12 pub hidden_dims: Vec<usize>,
14 pub input_dim: usize,
16 pub output_channels: usize,
18 pub sample_rate: u32,
20 pub buffer_size: usize,
22 pub use_gpu: bool,
24 pub quality: f32,
26 pub realtime_constraints: RealtimeConstraints,
28 pub training_config: Option<TrainingConfig>,
30}
31
32#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
34pub enum NeuralModelType {
35 Feedforward,
37 Convolutional,
39 Recurrent,
41 Transformer,
43 GAN,
45 VAE,
47 Diffusion,
49 Hybrid,
51}
52
53#[derive(Debug, Clone, Serialize, Deserialize)]
55pub struct RealtimeConstraints {
56 pub max_latency_ms: f32,
58 pub max_cpu_usage: f32,
60 pub max_memory_mb: usize,
62 pub target_fps: u32,
64 pub adaptive_quality: bool,
66}
67
68#[derive(Debug, Clone, Serialize, Deserialize)]
70pub struct TrainingConfig {
71 pub learning_rate: f64,
73 pub batch_size: usize,
75 pub epochs: usize,
77 pub validation_split: f32,
79 pub loss_function: LossFunction,
81 pub optimizer: OptimizerType,
83 pub early_stopping_patience: usize,
85 pub augmentation: AugmentationConfig,
87}
88
89#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
91pub enum LossFunction {
92 MSE,
94 MAE,
96 SpectralLoss,
98 PerceptualLoss,
100 MultiScaleSpectralLoss,
102 Combined,
104}
105
106#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
108pub enum OptimizerType {
109 Adam,
111 SGD,
113 AdamW,
115 RMSprop,
117}
118
119#[derive(Debug, Clone, Serialize, Deserialize)]
121pub struct AugmentationConfig {
122 pub noise_injection: bool,
124 pub time_stretching: bool,
126 pub pitch_shifting: bool,
128 pub reverb_augmentation: bool,
130 pub gain_variation: f32,
132}
133
134#[derive(Debug, Clone)]
136pub struct NeuralInputFeatures {
137 pub position: Position3D,
139 pub listener_orientation: [f32; 4],
141 pub audio_features: Vec<f32>,
143 pub room_features: Vec<f32>,
145 pub hrtf_features: Option<Vec<f32>>,
147 pub temporal_context: Vec<f32>,
149 pub user_features: Option<Vec<f32>>,
151}
152
153#[derive(Debug, Clone)]
155pub struct NeuralSpatialOutput {
156 pub binaural_audio: Vec<Vec<f32>>,
158 pub confidence: f32,
160 pub latency_ms: f32,
162 pub quality_score: f32,
164 pub metadata: HashMap<String, f32>,
166}
167
168#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
170pub struct NeuralPerformanceMetrics {
171 pub frames_processed: u64,
173 pub avg_processing_time_ms: f32,
175 pub peak_processing_time_ms: f32,
177 pub memory_usage_mb: f32,
179 pub gpu_utilization: f32,
181 pub inference_time_ms: f32,
183 pub quality_degradations: u32,
185 pub realtime_violations: u32,
187 pub last_updated: u64,
189}
190
191#[derive(Debug, Clone)]
193pub struct NeuralTrainingResults {
194 pub training_loss: Vec<f32>,
196 pub validation_loss: Vec<f32>,
198 pub final_accuracy: f32,
200 pub training_duration_secs: f32,
202 pub epochs_completed: usize,
204 pub early_stopped: bool,
206}
207
208pub struct NeuralSpatialConfigBuilder {
210 config: NeuralSpatialConfig,
211}
212
213impl Default for NeuralSpatialConfig {
214 fn default() -> Self {
215 Self {
216 model_type: NeuralModelType::Feedforward,
217 hidden_dims: vec![512, 256, 128],
218 input_dim: 128,
219 output_channels: 2,
220 sample_rate: 48000,
221 buffer_size: 1024,
222 use_gpu: true,
223 quality: 0.8,
224 realtime_constraints: RealtimeConstraints {
225 max_latency_ms: 20.0,
226 max_cpu_usage: 25.0,
227 max_memory_mb: 512,
228 target_fps: 60,
229 adaptive_quality: true,
230 },
231 training_config: None,
232 }
233 }
234}
235
236impl Default for RealtimeConstraints {
237 fn default() -> Self {
238 Self {
239 max_latency_ms: 20.0,
240 max_cpu_usage: 25.0,
241 max_memory_mb: 512,
242 target_fps: 60,
243 adaptive_quality: true,
244 }
245 }
246}
247
248impl Default for TrainingConfig {
249 fn default() -> Self {
250 Self {
251 learning_rate: 0.001,
252 batch_size: 32,
253 epochs: 100,
254 validation_split: 0.2,
255 loss_function: LossFunction::MultiScaleSpectralLoss,
256 optimizer: OptimizerType::Adam,
257 early_stopping_patience: 10,
258 augmentation: AugmentationConfig::default(),
259 }
260 }
261}
262
263impl Default for AugmentationConfig {
264 fn default() -> Self {
265 Self {
266 noise_injection: true,
267 time_stretching: true,
268 pitch_shifting: true,
269 reverb_augmentation: true,
270 gain_variation: 0.1,
271 }
272 }
273}
274
275impl NeuralSpatialConfigBuilder {
276 pub fn new() -> Self {
278 Self {
279 config: NeuralSpatialConfig::default(),
280 }
281 }
282
283 pub fn model_type(mut self, model_type: NeuralModelType) -> Self {
285 self.config.model_type = model_type;
286 self
287 }
288
289 pub fn hidden_dims(mut self, dims: Vec<usize>) -> Self {
291 self.config.hidden_dims = dims;
292 self
293 }
294
295 pub fn input_dim(mut self, dim: usize) -> Self {
297 self.config.input_dim = dim;
298 self
299 }
300
301 pub fn output_channels(mut self, channels: usize) -> Self {
303 self.config.output_channels = channels;
304 self
305 }
306
307 pub fn sample_rate(mut self, rate: u32) -> Self {
309 self.config.sample_rate = rate;
310 self
311 }
312
313 pub fn buffer_size(mut self, size: usize) -> Self {
315 self.config.buffer_size = size;
316 self
317 }
318
319 pub fn use_gpu(mut self, use_gpu: bool) -> Self {
321 self.config.use_gpu = use_gpu;
322 self
323 }
324
325 pub fn quality(mut self, quality: f32) -> Self {
327 self.config.quality = quality.clamp(0.0, 1.0);
328 self
329 }
330
331 pub fn max_latency_ms(mut self, latency: f32) -> Self {
333 self.config.realtime_constraints.max_latency_ms = latency;
334 self
335 }
336
337 pub fn training_config(mut self, training_config: TrainingConfig) -> Self {
339 self.config.training_config = Some(training_config);
340 self
341 }
342
343 pub fn build(self) -> NeuralSpatialConfig {
345 self.config
346 }
347}
348
349impl Default for NeuralSpatialConfigBuilder {
350 fn default() -> Self {
351 Self::new()
352 }
353}