use super::audio::FrequencyFilterSettings;
use super::types::*;
use crate::Position3D;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SpatialTelepresenceSettings {
pub spatial_enabled: bool,
pub spatial_quality: SpatialQualityLevel,
pub head_tracking: HeadTrackingSettings,
pub environmental_awareness: EnvironmentalAwarenessSettings,
pub presence_indicators: PresenceIndicatorSettings,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HeadTrackingSettings {
pub enabled: bool,
pub tracking_source: TrackingSource,
pub prediction: TrackingPredictionSettings,
pub smoothing: TrackingSmoothingSettings,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TrackingPredictionSettings {
pub enabled: bool,
pub horizon: f32,
pub algorithm: PredictionAlgorithm,
pub confidence_threshold: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TrackingSmoothingSettings {
pub position_smoothing: f32,
pub orientation_smoothing: f32,
pub velocity_smoothing: f32,
pub jitter_reduction: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EnvironmentalAwarenessSettings {
pub enabled: bool,
pub ambient_sharing: AmbientSharingSettings,
pub background_noise: BackgroundNoiseSettings,
pub acoustic_echo: AcousticEchoSettings,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AmbientSharingSettings {
pub enabled: bool,
pub level: f32,
pub frequency_filtering: FrequencyFilterSettings,
pub spatial_processing: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BackgroundNoiseSettings {
pub suppression_level: f32,
pub adaptive_suppression: bool,
pub gate_threshold: f32,
pub noise_profiling: NoiseProfilingSettings,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NoiseProfilingSettings {
pub enabled: bool,
pub duration: f32,
pub update_interval: f32,
pub adaptation_rate: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AcousticEchoSettings {
pub detection_sensitivity: f32,
pub suppression_strength: f32,
pub path_modeling: bool,
pub nonlinear_processing: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PresenceIndicatorSettings {
pub enabled: bool,
pub visual_indicators: VisualPresenceSettings,
pub audio_indicators: AudioPresenceSettings,
pub breathing_room: BreathingRoomSettings,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VisualPresenceSettings {
pub speaking_indicator: bool,
pub position_indicator: bool,
pub attention_indicator: bool,
pub indicator_style: IndicatorStyle,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AudioPresenceSettings {
pub breathing_sounds: bool,
pub footsteps: bool,
pub movement_sounds: bool,
pub presence_level: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BreathingRoomSettings {
pub enabled: bool,
pub personal_space: f32,
pub comfort_distance: f32,
pub proximity_adjustments: ProximityAdjustments,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProximityAdjustments {
pub volume_adjustment: f32,
pub frequency_adjustment: super::audio::FrequencyResponseAdjustment,
pub reverb_adjustment: f32,
pub intimacy_enhancement: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UserPosition {
pub user_id: String,
pub position: Position3D,
pub orientation: Orientation,
pub movement_constraints: MovementConstraints,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SpatialAudioInfo {
pub position: Position3D,
pub orientation: Orientation,
pub velocity: Option<Velocity>,
pub distance: f32,
pub spatial_quality: SpatialQualityLevel,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SpatialQualitySettings {
pub hrtf_quality: HrtfQualityLevel,
pub room_quality: RoomQualityLevel,
pub distance_precision: DistancePrecisionLevel,
pub update_rate: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SpatialAudioStats {
pub position_updates: u64,
pub spatial_accuracy: f32,
pub hrtf_efficiency: f32,
pub room_sim_performance: f32,
pub distance_calculations: u64,
}
impl Default for SpatialTelepresenceSettings {
fn default() -> Self {
Self {
spatial_enabled: true,
spatial_quality: SpatialQualityLevel::Full3D,
head_tracking: HeadTrackingSettings::default(),
environmental_awareness: EnvironmentalAwarenessSettings::default(),
presence_indicators: PresenceIndicatorSettings::default(),
}
}
}
impl Default for HeadTrackingSettings {
fn default() -> Self {
Self {
enabled: true,
tracking_source: TrackingSource::VRHeadset,
prediction: TrackingPredictionSettings::default(),
smoothing: TrackingSmoothingSettings::default(),
}
}
}
impl Default for TrackingPredictionSettings {
fn default() -> Self {
Self {
enabled: true,
horizon: 50.0, algorithm: PredictionAlgorithm::Kalman,
confidence_threshold: 0.7,
}
}
}
impl Default for TrackingSmoothingSettings {
fn default() -> Self {
Self {
position_smoothing: 0.8,
orientation_smoothing: 0.85,
velocity_smoothing: 0.7,
jitter_reduction: 0.9,
}
}
}
impl Default for EnvironmentalAwarenessSettings {
fn default() -> Self {
Self {
enabled: true,
ambient_sharing: AmbientSharingSettings::default(),
background_noise: BackgroundNoiseSettings::default(),
acoustic_echo: AcousticEchoSettings::default(),
}
}
}
impl Default for AmbientSharingSettings {
fn default() -> Self {
Self {
enabled: false,
level: 0.3,
frequency_filtering: FrequencyFilterSettings::default(),
spatial_processing: true,
}
}
}
impl Default for BackgroundNoiseSettings {
fn default() -> Self {
Self {
suppression_level: 0.8,
adaptive_suppression: true,
gate_threshold: -40.0, noise_profiling: NoiseProfilingSettings::default(),
}
}
}
impl Default for NoiseProfilingSettings {
fn default() -> Self {
Self {
enabled: true,
duration: 5.0, update_interval: 30.0, adaptation_rate: 0.1,
}
}
}
impl Default for AcousticEchoSettings {
fn default() -> Self {
Self {
detection_sensitivity: 0.7,
suppression_strength: 0.8,
path_modeling: true,
nonlinear_processing: true,
}
}
}
impl Default for PresenceIndicatorSettings {
fn default() -> Self {
Self {
enabled: true,
visual_indicators: VisualPresenceSettings::default(),
audio_indicators: AudioPresenceSettings::default(),
breathing_room: BreathingRoomSettings::default(),
}
}
}
impl Default for VisualPresenceSettings {
fn default() -> Self {
Self {
speaking_indicator: true,
position_indicator: true,
attention_indicator: false,
indicator_style: IndicatorStyle::Standard,
}
}
}
impl Default for AudioPresenceSettings {
fn default() -> Self {
Self {
breathing_sounds: false,
footsteps: false,
movement_sounds: false,
presence_level: 0.2,
}
}
}
impl Default for BreathingRoomSettings {
fn default() -> Self {
Self {
enabled: true,
personal_space: 1.0, comfort_distance: 2.0, proximity_adjustments: ProximityAdjustments::default(),
}
}
}
impl Default for ProximityAdjustments {
fn default() -> Self {
Self {
volume_adjustment: -3.0, frequency_adjustment: super::audio::FrequencyResponseAdjustment::default(),
reverb_adjustment: -0.2,
intimacy_enhancement: true,
}
}
}
impl Default for SpatialQualitySettings {
fn default() -> Self {
Self {
hrtf_quality: HrtfQualityLevel::High,
room_quality: RoomQualityLevel::Standard,
distance_precision: DistancePrecisionLevel::High,
update_rate: 90.0, }
}
}