1#![allow(clippy::cast_precision_loss)] #![allow(clippy::cast_possible_truncation)] #![allow(clippy::cast_sign_loss)] #![allow(clippy::missing_errors_doc)] #![allow(clippy::missing_panics_doc)] #![allow(clippy::unused_self)] #![allow(clippy::must_use_candidate)] #![allow(clippy::doc_markdown)] #![allow(clippy::unnecessary_wraps)] #![allow(clippy::float_cmp)] #![allow(clippy::match_same_arms)] #![allow(clippy::module_name_repetitions)] #![allow(clippy::struct_excessive_bools)] #![allow(clippy::too_many_lines)] #![allow(clippy::needless_pass_by_value)] #![allow(clippy::similar_names)] #![allow(clippy::unused_async)] #![allow(clippy::needless_range_loop)] #![allow(clippy::uninlined_format_args)] #![allow(clippy::manual_clamp)] #![allow(clippy::return_self_not_must_use)] #![allow(clippy::cast_possible_wrap)] #![allow(clippy::cast_lossless)] #![allow(clippy::wildcard_imports)] #![allow(clippy::format_push_string)] #![allow(clippy::redundant_closure_for_method_calls)] #![deny(unsafe_code)]
219#![warn(missing_docs)]
220
221pub mod ambisonics;
222pub mod automotive;
223pub mod backends;
225pub mod beamforming;
226pub mod binaural;
227pub mod compression;
228pub mod config;
229pub mod core;
230pub mod gaming;
231pub mod gestures;
232pub mod gpu;
233pub mod haptic;
234pub mod hrtf;
235pub mod memory;
236pub mod mobile;
237pub mod multiuser;
238pub mod neural;
239pub mod performance;
240pub mod performance_targets;
241pub mod platforms;
242pub mod plugins;
243pub mod position;
244pub mod power;
245pub mod public_spaces;
246pub mod realtime; pub mod room;
248pub mod smart_speakers;
249pub mod technical_testing;
250pub mod telepresence;
251pub mod types;
252pub mod utils;
253pub mod validation;
254pub mod visual_audio;
255pub mod webxr;
256pub mod wfs;
257
258pub use ambisonics::{
260 channel_count, AmbisonicsDecoder, AmbisonicsEncoder, AmbisonicsOrder, AmbisonicsProcessor,
261 ChannelOrdering, NormalizationScheme, SpeakerConfiguration, SphericalCoordinate,
262 SphericalHarmonics,
263};
264pub use automotive::{
265 AcousticTreatment, AdaptiveVolumeConfig, AudioZone, DashboardSide, DriverProtectionConfig,
266 EmergencyAlertType, EmergencyAudioConfig, EngineNoiseCompensation, EngineType,
267 ExternalAwarenessConfig, ExternalConditions, FrequencyBand, FrequencyWeighting, GearPosition,
268 HearingCharacteristics, HvacConfig, HvacState, InteriorMaterials, LegalComplianceConfig,
269 MaterialType, NoiseCompensationConfig, PassengerActivity, PassengerConfig, PassengerInfo,
270 PassengerPreferences, PrecipitationType, ResourceUsage, RoadNoiseCompensation, SafetyConfig,
271 SeatPosition, SpatialPreferences, SpeakerCharacteristics, SpeakerMounting, SpeakerType,
272 SurfaceType, TimeLimits, TireNoiseModel, TireType, VehicleAcousticConfig, VehicleAudioConfig,
273 VehicleAudioConfigBuilder, VehicleAudioMetrics, VehicleAudioProcessor, VehicleSide,
274 VehicleSpeaker, VehicleSpeakerConfig, VehicleState, VehicleType, VentPosition,
275 WindNoiseCompensation, WindowConfig, WindowState, WindowTinting, ZoneAudioSource,
276};
277pub use beamforming::{
278 AdaptationConfig, BeamPattern, BeamformerWeights, BeamformingAlgorithm, BeamformingConfig,
279 BeamformingProcessor, DoaResult, SpatialSmoothingConfig,
280};
281pub use binaural::{BinauralConfig, BinauralMetrics, BinauralRenderer, SourceType};
282pub use compression::{
283 AdaptiveParams, CompressedFrame, CompressionCodec, CompressionQuality, CompressionStats,
284 PerceptualParams, SourceClustering, SpatialCompressionConfig, SpatialCompressor,
285 SpatialMetadata, SpatialParams, TemporalMasking,
286};
287pub use config::{SpatialConfig, SpatialConfigBuilder};
288pub use core::{SpatialProcessor, SpatialProcessorBuilder};
289pub use gaming::{
290 console, AttenuationCurve, AttenuationSettings, AudioCategory, GameAudioSource, GameEngine,
291 GamingAudioManager, GamingConfig, GamingMetrics,
292};
293pub use gestures::{
294 AudioAction, GestureBuilder, GestureConfidence, GestureConfig, GestureController, GestureData,
295 GestureDirection, GestureEvent, GestureEventType, GestureRecognitionMethod, GestureType, Hand,
296};
297pub use gpu::{
298 GpuAmbisonics, GpuConfig, GpuConvolution, GpuDevice, GpuResourceManager, GpuSpatialMath,
299};
300pub use haptic::{
301 AudioHapticMapping, DistanceAttenuation, HapticAccessibilitySettings, HapticAudioConfig,
302 HapticAudioProcessor, HapticCapabilities, HapticComfortSettings, HapticDevice,
303 HapticEffectType, HapticElement, HapticMetrics, HapticPattern, PatternStyle,
304};
305pub use hrtf::{
306 ai_personalization::{
307 AdaptationStrategy, AiHrtfPersonalizer, AnthropometricMeasurements, HrtfModifications,
308 PerceptualFeedback, PersonalizationConfig, PersonalizationMetadata, PersonalizedHrtf,
309 TrainingResults,
310 },
311 HrtfDatabase, HrtfProcessor,
312};
313pub use memory::{
314 cache_optimization, Array2Pool, BufferPool, CacheManager, CachePolicy, MemoryConfig,
315 MemoryManager, MemoryStatistics,
316};
317pub use mobile::{
318 android, ios, MobileConfig, MobileDevice, MobileMetrics, MobileOptimizer, MobilePlatform,
319 PowerState, QualityPreset,
320};
321pub use multiuser::{
322 AccessibilitySettings, AcousticSettings, AudioEffect, AudioEffectsProcessor,
323 AudioQualityMetrics, AudioSourceType, BandwidthSettings, CodecState, CodecTiming,
324 CompensationMethod, ConnectionStatus, DirectionalPattern, DisconnectReason,
325 InterpolationMethod, LatencyCompensator, LowBandwidthMode, MicrophoneSettings, MixerConfig,
326 MultiUserAttenuationCurve, MultiUserAudioProcessor, MultiUserAudioSource, MultiUserConfig,
327 MultiUserConfigBuilder, MultiUserEnvironment, MultiUserEvent, MultiUserMetrics, MultiUserUser,
328 NetworkEventType, NetworkStats, OptimizationLevel, Permission, PermissionSystem,
329 PositionInterpolator, PositionSnapshot, RoomId, SourceAccessControl, SourceId,
330 SourceProcessingState, SourceQualitySettings, SourceVisibility, SpatialAudioMixer,
331 SpatialProperties, SpatialZone, SynchronizationManager, SynchronizedClock, UserId, UserRole,
332 VadAlgorithm, VadState, VadThresholds, VoiceActivityDetector, ZoneAudioProperties, ZoneBounds,
333 ZoneType,
334};
335pub use neural::{
336 AdaptiveQualityController, AugmentationConfig, ConvolutionalModel, FeedforwardModel,
337 LossFunction, NeuralInputFeatures, NeuralModel, NeuralModelType, NeuralPerformanceMetrics,
338 NeuralSpatialConfig, NeuralSpatialConfigBuilder, NeuralSpatialOutput, NeuralSpatialProcessor,
339 NeuralTrainer, NeuralTrainingResults, OptimizerType, RealtimeConstraints, TrainingConfig,
340 TransformerModel,
341};
342pub use performance::{
343 PerformanceConfig, PerformanceMetrics, PerformanceReport, PerformanceSummary,
344 PerformanceTargetResult, PerformanceTestSuite, ResourceMonitor, ResourceStatistics,
345};
346pub use performance_targets::{
347 LatencyMeasurements, PerformanceTargetReport, PerformanceTargetValidator, PerformanceTargets,
348 PerformanceValidationResult, QualityMeasurements, QualityTargets, RealtimeTargets,
349 ResourceMeasurements, ResourceTargets, ResourceUsageStats, ScalabilityMeasurements,
350 ScalabilityTargets, TargetCategory, TargetComparison,
351};
352pub use platforms::{
353 ARCorePlatform, ARKitPlatform, DeviceInfo, EyeData, EyeTrackingData, GenericPlatform, HandData,
354 HandGesture, HandTrackingData, OculusPlatform, PlatformCapabilities, PlatformFactory,
355 PlatformIntegration, PlatformTrackingData, PoseData, TrackingConfig, TrackingQuality,
356 TrackingState, WMRPlatform,
357};
358
359#[cfg(feature = "steamvr")]
360pub use platforms::SteamVRPlatform;
361pub use plugins::{
362 PluginCapabilities, PluginConfig, PluginManager, PluginParameter, PluginParameters,
363 PluginState, ProcessingChain, ProcessingContext, ReverbPlugin, SpatialPlugin,
364};
365pub use position::{
366 advanced_prediction::{
367 AdaptationPhase, AdvancedPredictiveTracker, ModelSelectionStrategy, MotionPattern,
368 MotionPatternType, PatternRecognitionConfig, PredictedPosition, PredictionMetrics,
369 PredictionModelType, PredictiveTrackingConfig,
370 },
371 Box3D, CalibrationData, ComfortSettings, DopplerProcessor, DynamicSource, DynamicSourceManager,
372 HeadTracker, Listener, ListenerMovementSystem, MotionPredictor, MotionSnapshot,
373 MovementConstraints, MovementMetrics, NavigationMode, OcclusionDetector, OcclusionMaterial,
374 OcclusionMethod, OcclusionResult, PlatformData, PlatformType, SoundSource,
375 SpatialSourceManager,
376};
377pub use power::{
378 DeviceType, PowerConfig, PowerMetrics, PowerOptimizer, PowerProfile, PowerStrategy,
379};
380pub use room::{
381 adaptive_acoustics::{
382 AdaptationAction, AdaptationController, AdaptationMetrics, AdaptationTrigger,
383 AdaptiveAcousticEnvironment, AdaptiveAcousticsConfig, EnvironmentSensors,
384 EnvironmentSnapshot, EnvironmentType, SensorConfig, UserFeedback,
385 },
386 ConnectionAcousticProperties, ConnectionState, ConnectionType, GlobalAcousticConfig,
387 MultiRoomEnvironment, Room, RoomAcoustics, RoomConnection, RoomSimulator,
388};
389pub use smart_speakers::{
390 ArrayMetrics, ArrayTopology, AudioFormat, AudioRoute, AudioRouter, AudioSource, AudioSpecs,
391 CalibrationEngine, CalibrationMethod, CalibrationResults, CalibrationStatus, ClockSource,
392 CompressionConfig, DeviceFilter, DirectivityPattern, DiscoveryProtocol, DiscoveryService,
393 DspFeature, EQFilter, FilterType, LimitingConfig, MixSettings, NetworkConfig, NetworkInfo,
394 NetworkProtocol, ProcessingConfig, ProcessingStep, RoomCorrection, SmartSpeaker,
395 SpeakerArrayConfig, SpeakerArrayConfigBuilder, SpeakerArrayManager, SpeakerCapabilities,
396 SyncConfig,
397};
398pub use technical_testing::{
399 create_standard_technical_configs, LatencyAnalysis, MemoryConstraints, PlatformAnalysis,
400 PlatformTestResult, StabilityAnalysis, StressTestParams, TechnicalSuccessCriteria,
401 TechnicalTestConfig, TechnicalTestParameters, TechnicalTestReport, TechnicalTestResult,
402 TechnicalTestSuite, TechnicalTestType, TestOutcome,
403};
404pub use telepresence::{
405 AcousticEchoSettings, AcousticMatchingSettings, AcousticProperties, AdaptiveQualitySettings,
406 AirAbsorptionSettings, AnonymizationMethod, AnonymizationSettings, AudioCodec,
407 AudioDeviceConfig, AudioEnhancementSettings, AudioFormat as TelepresenceAudioFormat,
408 AudioMetadata, AudioPresenceSettings, AudioQualityPreferences, AudioQualitySettings,
409 BandwidthConstraints, BandwidthExtensionSettings, CodecPreferences, CompressionSettings,
410 ConsentManagementSettings, CrossRoomSettings, DataCollectionSettings, DistanceModelingSettings,
411 DopplerEffectsSettings, EchoCancellationSettings, EnvironmentalAwarenessSettings,
412 EqualizationSettings, HeadTrackingSettings, HrtfPersonalizationSettings, NetworkSettings,
413 NoiseSuppressionSettings, Orientation, PresenceIndicatorSettings, PrivacySettings,
414 QualityLevel, QualitySettings, ReceivedAudio, RoomSimulationSettings, SessionJoinResult,
415 SessionState, SessionStatistics, SpatialTelepresenceSettings, TelepresenceAudioSettings,
416 TelepresenceConfig, TelepresenceProcessor, TelepresenceSession, TrackingPredictionSettings,
417 UserConfig, VadSettings, Velocity, VirtualRoomParameters, VisualPresenceSettings,
418 VoiceProcessingSettings, VoiceSpatializationSettings,
419};
420pub use types::{
421 AudioChannel, BinauraAudio, Position3D, SIMDSpatialOps, SpatialEffect, SpatialRequest,
422 SpatialResult,
423};
424pub use validation::{
425 create_standard_test_configs, create_test_subjects, AccuracyMetrics, AudioExpertise,
426 ExperienceLevel, Gender, HearingAbility, PerceptualTestSuite, PopulationAnalysis, ResponseData,
427 StimulusData, SubjectiveRatings, SuccessCriteria, TestParameters, TestStatistics, TestSubject,
428 ValidationReport, ValidationTestConfig, ValidationTestResult, ValidationTestType,
429};
430pub use visual_audio::{
431 AnimationParams, AnimationType, AudioVisualMapping, ColorRGBA, ColorScheme, ColorSchemeType,
432 DirectionZone, DirectionalCueMapping, EasingFunction, EventTriggerMapping,
433 FrequencyVisualMapping, OnsetTrigger, RhythmTrigger, ScalingCurve, ShapeType, SilenceTrigger,
434 SpectralTrigger, VisualAccessibilitySettings, VisualAudioConfig, VisualAudioMetrics,
435 VisualAudioProcessor, VisualDisplay, VisualDisplayCapabilities, VisualDistanceAttenuation,
436 VisualEffect, VisualElement, VisualElementType, VisualPerformanceSettings, VisualResourceUsage,
437 VisualSyncSettings,
438};
439pub use webxr::{
440 utils as webxr_utils, BrowserType, WebXRCapabilities, WebXRConfig, WebXRMetrics, WebXRPose,
441 WebXRProcessor, WebXRSessionType, WebXRSourceType,
442};
443pub use wfs::{
444 ArrayGeometry, PreEmphasisConfig, WfsArrayBuilder, WfsConfig, WfsDrivingFunction, WfsProcessor,
445 WfsSource, WfsSourceType,
446};
447
448pub type Result<T> = std::result::Result<T, Error>;
450
451#[derive(Debug, thiserror::Error)]
453pub enum Error {
454 #[error("Configuration error: {0}")]
456 Config(#[from] ConfigError),
457
458 #[error("Processing error: {0}")]
460 Processing(#[from] ProcessingError),
461
462 #[error("HRTF error: {0}")]
464 Hrtf(#[from] HrtfError),
465
466 #[error("Position error: {0}")]
468 Position(#[from] PositionError),
469
470 #[error("Room acoustics error: {0}")]
472 Room(#[from] RoomError),
473
474 #[error("Audio error: {0}")]
476 Audio(#[from] AudioError),
477
478 #[error("Memory error: {0}")]
480 Memory(#[from] MemoryError),
481
482 #[error("GPU error: {0}")]
484 Gpu(#[from] GpuError),
485
486 #[error("Platform error: {0}")]
488 Platform(#[from] PlatformError),
489
490 #[error("Validation error: {0}")]
492 Validation(#[from] ValidationError),
493
494 #[error("I/O error: {0}")]
496 Io(#[from] std::io::Error),
497
498 #[error("Serialization error: {0}")]
500 Serialization(#[from] serde_json::Error),
501
502 #[error("Candle error: {0}")]
504 Candle(#[from] candle_core::Error),
505
506 #[error("Error: {message}")]
508 Generic {
509 message: String,
511 code: ErrorCode,
513 context: Option<Box<ErrorContext>>,
515 },
516
517 #[error("Configuration error: {0}")]
519 LegacyConfig(String),
520
521 #[error("Processing error: {0}")]
523 LegacyProcessing(String),
524
525 #[error("HRTF error: {0}")]
527 LegacyHrtf(String),
528
529 #[error("Position error: {0}")]
531 LegacyPosition(String),
532
533 #[error("Room acoustics error: {0}")]
535 LegacyRoom(String),
536
537 #[error("Audio error: {0}")]
539 LegacyAudio(String),
540
541 #[error("Validation error: {0}")]
543 LegacyValidation(String),
544}
545
546#[derive(Debug, thiserror::Error)]
548pub enum ConfigError {
549 #[error("Invalid parameter '{parameter}': {message}. Expected: {expected}")]
551 InvalidParameter {
552 parameter: String,
554 message: String,
556 expected: String,
558 },
559
560 #[error("Missing required parameter: {parameter}")]
562 MissingParameter {
563 parameter: String,
565 },
566
567 #[error("Conflicting parameters: {params:?}. {resolution}")]
569 ConflictingParameters {
570 params: Vec<String>,
572 resolution: String,
574 },
575
576 #[error("Configuration file not found: {path}")]
578 FileNotFound {
579 path: String,
581 },
582}
583
584#[derive(Debug, thiserror::Error)]
586pub enum ProcessingError {
587 #[error("Buffer size mismatch: expected {expected}, got {actual}")]
589 BufferSizeMismatch {
590 expected: usize,
592 actual: usize,
594 },
595
596 #[error("Sample rate mismatch: expected {expected}Hz, got {actual}Hz")]
598 SampleRateMismatch {
599 expected: u32,
601 actual: u32,
603 },
604
605 #[error("Real-time processing constraint violated: {duration_ms}ms > {max_ms}ms")]
607 RealtimeViolation {
608 duration_ms: f64,
610 max_ms: f64,
612 },
613
614 #[error("Resource exhausted: {resource}. Usage: {usage}/{limit}")]
616 ResourceExhausted {
617 resource: String,
619 usage: u64,
621 limit: u64,
623 },
624}
625
626#[derive(Debug, thiserror::Error)]
628pub enum HrtfError {
629 #[error("Failed to load HRTF database from {path}: {reason}")]
631 DatabaseLoadFailed {
632 path: String,
634 reason: String,
636 },
637
638 #[error("Invalid position for HRTF lookup: azimuth={azimuth}°, elevation={elevation}°")]
640 InvalidPosition {
641 azimuth: f32,
643 elevation: f32,
645 },
646
647 #[error("HRTF interpolation failed: {reason}")]
649 InterpolationFailed {
650 reason: String,
652 },
653}
654
655#[derive(Debug, thiserror::Error)]
657pub enum PositionError {
658 #[error("Invalid coordinates: x={x}, y={y}, z={z}. {constraint}")]
660 InvalidCoordinates {
661 x: f32,
663 y: f32,
665 z: f32,
667 constraint: String,
669 },
670
671 #[error("Tracking system unavailable: {system}")]
673 TrackingUnavailable {
674 system: String,
676 },
677
678 #[error("Calibration required for {component}: {instructions}")]
680 CalibrationRequired {
681 component: String,
683 instructions: String,
685 },
686}
687
688#[derive(Debug, thiserror::Error)]
690pub enum RoomError {
691 #[error("Invalid room dimensions: {width}x{height}x{depth}m. {constraint}")]
693 InvalidDimensions {
694 width: f32,
696 height: f32,
698 depth: f32,
700 constraint: String,
702 },
703
704 #[error("Invalid material properties: {material}. {issue}")]
706 InvalidMaterial {
707 material: String,
709 issue: String,
711 },
712
713 #[error("Ray tracing computation failed: {reason}")]
715 RayTracingFailed {
716 reason: String,
718 },
719}
720
721#[derive(Debug, thiserror::Error)]
723pub enum AudioError {
724 #[error("Unsupported audio format: {format}. Supported: {supported:?}")]
726 UnsupportedFormat {
727 format: String,
729 supported: Vec<String>,
731 },
732
733 #[error("Audio clipping detected: {severity}% samples above threshold")]
735 ClippingDetected {
736 severity: f32,
738 },
739
740 #[error("Audio buffer {kind}: {samples} samples")]
742 BufferIssue {
743 kind: AudioBufferIssue,
745 samples: usize,
747 },
748}
749
750#[derive(Debug, thiserror::Error)]
752pub enum MemoryError {
753 #[error("Out of memory: requested {requested}MB, available {available}MB")]
755 OutOfMemory {
756 requested: u64,
758 available: u64,
760 },
761
762 #[error("Memory pool exhausted: {pool_type}, size={size}")]
764 PoolExhausted {
765 pool_type: String,
767 size: usize,
769 },
770
771 #[error("Cache miss: {cache_type}, key={key}")]
773 CacheMiss {
774 cache_type: String,
776 key: String,
778 },
779}
780
781#[derive(Debug, thiserror::Error)]
783pub enum GpuError {
784 #[error("GPU not available: {reason}")]
786 NotAvailable {
787 reason: String,
789 },
790
791 #[error("CUDA error: {message}")]
793 Cuda {
794 message: String,
796 },
797
798 #[error("GPU memory allocation failed: requested {requested}MB")]
800 AllocationFailed {
801 requested: u64,
803 },
804}
805
806#[derive(Debug, thiserror::Error)]
808pub enum PlatformError {
809 #[error("Platform not supported: {platform}")]
811 NotSupported {
812 platform: String,
814 },
815
816 #[error("SDK initialization failed: {sdk}, reason: {reason}")]
818 SdkInitFailed {
819 sdk: String,
821 reason: String,
823 },
824
825 #[error("Feature not available: {feature} on {platform}")]
827 FeatureUnavailable {
828 feature: String,
830 platform: String,
832 },
833}
834
835#[derive(Debug, thiserror::Error)]
837pub enum ValidationError {
838 #[error("Schema validation failed: {field}. {message}")]
840 SchemaFailed {
841 field: String,
843 message: String,
845 },
846
847 #[error("Value out of range: {field}={value}, expected [{min}, {max}]")]
849 RangeError {
850 field: String,
852 value: f64,
854 min: f64,
856 max: f64,
858 },
859
860 #[error("Test failed: {test_name}. Expected: {expected}, Got: {actual}")]
862 TestFailed {
863 test_name: String,
865 expected: String,
867 actual: String,
869 },
870}
871
872#[derive(Debug, Clone, Copy, PartialEq, Eq)]
874pub enum ErrorCode {
875 ConfigInvalidParameter = 1001,
878 ConfigMissingParameter = 1002,
880 ConfigConflictingParameters = 1003,
882 ConfigFileNotFound = 1004,
884
885 ProcessingBufferSizeMismatch = 2001,
888 ProcessingSampleRateMismatch = 2002,
890 ProcessingRealtimeViolation = 2003,
892 ProcessingResourceExhausted = 2004,
894
895 HrtfDatabaseLoadFailed = 3001,
898 HrtfInvalidPosition = 3002,
900 HrtfInterpolationFailed = 3003,
902
903 PositionInvalidCoordinates = 4001,
906 PositionTrackingUnavailable = 4002,
908 PositionCalibrationRequired = 4003,
910
911 RoomInvalidDimensions = 5001,
914 RoomInvalidMaterial = 5002,
916 RoomRayTracingFailed = 5003,
918
919 AudioUnsupportedFormat = 6001,
922 AudioClippingDetected = 6002,
924 AudioBufferIssue = 6003,
926
927 MemoryOutOfMemory = 7001,
930 MemoryPoolExhausted = 7002,
932 MemoryCacheMiss = 7003,
934
935 GpuNotAvailable = 8001,
938 GpuCudaError = 8002,
940 GpuAllocationFailed = 8003,
942
943 PlatformNotSupported = 9001,
946 PlatformSdkInitFailed = 9002,
948 PlatformFeatureUnavailable = 9003,
950
951 Generic = 10000,
954}
955
956#[derive(Debug, Clone, Copy, PartialEq, Eq)]
958pub enum AudioBufferIssue {
959 Underrun,
961 Overrun,
963 Corruption,
965}
966
967impl std::fmt::Display for AudioBufferIssue {
968 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
969 match self {
970 AudioBufferIssue::Underrun => write!(f, "underrun"),
971 AudioBufferIssue::Overrun => write!(f, "overrun"),
972 AudioBufferIssue::Corruption => write!(f, "corruption"),
973 }
974 }
975}
976
977#[derive(Debug, Clone)]
979pub struct ErrorContext {
980 pub module: String,
982 pub function: String,
984 pub line: Option<u32>,
986 pub data: std::collections::HashMap<String, String>,
988 pub recovery_suggestions: Vec<String>,
990 pub related_errors: Vec<String>,
992}
993
994impl ErrorContext {
995 pub fn new(module: &str, function: &str) -> Self {
997 Self {
998 module: module.to_string(),
999 function: function.to_string(),
1000 line: None,
1001 data: std::collections::HashMap::new(),
1002 recovery_suggestions: Vec::new(),
1003 related_errors: Vec::new(),
1004 }
1005 }
1006
1007 pub fn with_data(mut self, key: &str, value: &str) -> Self {
1009 self.data.insert(key.to_string(), value.to_string());
1010 self
1011 }
1012
1013 pub fn with_suggestion(mut self, suggestion: &str) -> Self {
1015 self.recovery_suggestions.push(suggestion.to_string());
1016 self
1017 }
1018
1019 pub fn with_related_error(mut self, error: &str) -> Self {
1021 self.related_errors.push(error.to_string());
1022 self
1023 }
1024}
1025
1026impl Error {
1027 pub fn config(message: &str) -> Self {
1029 Self::Config(ConfigError::InvalidParameter {
1030 parameter: "unknown".to_string(),
1031 message: message.to_string(),
1032 expected: "valid configuration".to_string(),
1033 })
1034 }
1035
1036 pub fn processing(message: &str) -> Self {
1038 Self::Processing(ProcessingError::ResourceExhausted {
1039 resource: "processing".to_string(),
1040 usage: 0,
1041 limit: 0,
1042 })
1043 }
1044
1045 pub fn hrtf(message: &str) -> Self {
1047 Self::Hrtf(HrtfError::InterpolationFailed {
1048 reason: message.to_string(),
1049 })
1050 }
1051
1052 pub fn room(message: &str) -> Self {
1054 Self::Room(RoomError::RayTracingFailed {
1055 reason: message.to_string(),
1056 })
1057 }
1058
1059 pub fn code(&self) -> ErrorCode {
1061 match self {
1062 Error::Config(config_err) => match config_err {
1063 ConfigError::InvalidParameter { .. } => ErrorCode::ConfigInvalidParameter,
1064 ConfigError::MissingParameter { .. } => ErrorCode::ConfigMissingParameter,
1065 ConfigError::ConflictingParameters { .. } => ErrorCode::ConfigConflictingParameters,
1066 ConfigError::FileNotFound { .. } => ErrorCode::ConfigFileNotFound,
1067 },
1068 Error::LegacyConfig(_) => ErrorCode::ConfigInvalidParameter,
1070 Error::LegacyProcessing(_) => ErrorCode::ProcessingResourceExhausted,
1071 Error::LegacyHrtf(_) => ErrorCode::HrtfInterpolationFailed,
1072 Error::LegacyPosition(_) => ErrorCode::PositionInvalidCoordinates,
1073 Error::LegacyRoom(_) => ErrorCode::RoomRayTracingFailed,
1074 Error::LegacyAudio(_) => ErrorCode::AudioBufferIssue,
1075 Error::LegacyValidation(_) => ErrorCode::Generic,
1076 Error::Processing(processing_err) => match processing_err {
1077 ProcessingError::BufferSizeMismatch { .. } => {
1078 ErrorCode::ProcessingBufferSizeMismatch
1079 }
1080 ProcessingError::SampleRateMismatch { .. } => {
1081 ErrorCode::ProcessingSampleRateMismatch
1082 }
1083 ProcessingError::RealtimeViolation { .. } => ErrorCode::ProcessingRealtimeViolation,
1084 ProcessingError::ResourceExhausted { .. } => ErrorCode::ProcessingResourceExhausted,
1085 },
1086 Error::Hrtf(hrtf_err) => match hrtf_err {
1087 HrtfError::DatabaseLoadFailed { .. } => ErrorCode::HrtfDatabaseLoadFailed,
1088 HrtfError::InvalidPosition { .. } => ErrorCode::HrtfInvalidPosition,
1089 HrtfError::InterpolationFailed { .. } => ErrorCode::HrtfInterpolationFailed,
1090 },
1091 Error::Position(position_err) => match position_err {
1092 PositionError::InvalidCoordinates { .. } => ErrorCode::PositionInvalidCoordinates,
1093 PositionError::TrackingUnavailable { .. } => ErrorCode::PositionTrackingUnavailable,
1094 PositionError::CalibrationRequired { .. } => ErrorCode::PositionCalibrationRequired,
1095 },
1096 Error::Room(room_err) => match room_err {
1097 RoomError::InvalidDimensions { .. } => ErrorCode::RoomInvalidDimensions,
1098 RoomError::InvalidMaterial { .. } => ErrorCode::RoomInvalidMaterial,
1099 RoomError::RayTracingFailed { .. } => ErrorCode::RoomRayTracingFailed,
1100 },
1101 Error::Audio(audio_err) => match audio_err {
1102 AudioError::UnsupportedFormat { .. } => ErrorCode::AudioUnsupportedFormat,
1103 AudioError::ClippingDetected { .. } => ErrorCode::AudioClippingDetected,
1104 AudioError::BufferIssue { .. } => ErrorCode::AudioBufferIssue,
1105 },
1106 Error::Memory(memory_err) => match memory_err {
1107 MemoryError::OutOfMemory { .. } => ErrorCode::MemoryOutOfMemory,
1108 MemoryError::PoolExhausted { .. } => ErrorCode::MemoryPoolExhausted,
1109 MemoryError::CacheMiss { .. } => ErrorCode::MemoryCacheMiss,
1110 },
1111 Error::Gpu(gpu_err) => match gpu_err {
1112 GpuError::NotAvailable { .. } => ErrorCode::GpuNotAvailable,
1113 GpuError::Cuda { .. } => ErrorCode::GpuCudaError,
1114 GpuError::AllocationFailed { .. } => ErrorCode::GpuAllocationFailed,
1115 },
1116 Error::Platform(platform_err) => match platform_err {
1117 PlatformError::NotSupported { .. } => ErrorCode::PlatformNotSupported,
1118 PlatformError::SdkInitFailed { .. } => ErrorCode::PlatformSdkInitFailed,
1119 PlatformError::FeatureUnavailable { .. } => ErrorCode::PlatformFeatureUnavailable,
1120 },
1121 Error::Validation(validation_err) => match validation_err {
1122 ValidationError::SchemaFailed { .. } => ErrorCode::Generic,
1123 ValidationError::RangeError { .. } => ErrorCode::Generic,
1124 ValidationError::TestFailed { .. } => ErrorCode::Generic,
1125 },
1126 Error::Generic { code, .. } => *code,
1127 _ => ErrorCode::Generic,
1128 }
1129 }
1130
1131 pub fn with_context(message: &str, code: ErrorCode, context: ErrorContext) -> Self {
1133 Error::Generic {
1134 message: message.to_string(),
1135 code,
1136 context: Some(Box::new(context)),
1137 }
1138 }
1139
1140 pub fn is_recoverable(&self) -> bool {
1142 match self {
1143 Error::Config(_) => false, Error::Processing(ProcessingError::RealtimeViolation { .. }) => true,
1145 Error::Processing(ProcessingError::ResourceExhausted { .. }) => true,
1146 Error::Memory(_) => true, Error::Gpu(_) => true, Error::Position(PositionError::TrackingUnavailable { .. }) => true,
1149 Error::Audio(AudioError::BufferIssue { .. }) => true,
1150 _ => false,
1151 }
1152 }
1153
1154 pub fn recovery_suggestions(&self) -> Vec<String> {
1156 match self {
1157 Error::Processing(ProcessingError::RealtimeViolation { max_ms, .. }) => {
1158 vec![
1159 "Reduce buffer size to improve latency".to_string(),
1160 format!("Increase processing timeout above {}ms", max_ms),
1161 "Consider using GPU acceleration".to_string(),
1162 ]
1163 }
1164 Error::Memory(MemoryError::OutOfMemory { .. }) => {
1165 vec![
1166 "Clear cache memory".to_string(),
1167 "Reduce buffer pool sizes".to_string(),
1168 "Close unused audio sources".to_string(),
1169 ]
1170 }
1171 Error::Gpu(GpuError::NotAvailable { .. }) => {
1172 vec![
1173 "Fallback to CPU processing".to_string(),
1174 "Check GPU drivers".to_string(),
1175 "Verify CUDA installation".to_string(),
1176 ]
1177 }
1178 Error::Generic {
1179 context: Some(ctx), ..
1180 } => ctx.recovery_suggestions.clone(),
1181 _ => vec!["Check configuration and retry".to_string()],
1182 }
1183 }
1184}
1185
1186pub mod prelude {
1188 pub use crate::{
1189 ambisonics::{
1190 channel_count, AmbisonicsDecoder, AmbisonicsEncoder, AmbisonicsOrder,
1191 AmbisonicsProcessor, ChannelOrdering, NormalizationScheme, SpeakerConfiguration,
1192 SphericalCoordinate, SphericalHarmonics,
1193 },
1194 beamforming::{
1195 AdaptationConfig, BeamPattern, BeamformerWeights, BeamformingAlgorithm,
1196 BeamformingConfig, BeamformingProcessor, DoaResult, SpatialSmoothingConfig,
1197 },
1198 binaural::{BinauralConfig, BinauralMetrics, BinauralRenderer, SourceType},
1199 compression::{
1200 AdaptiveParams, CompressedFrame, CompressionCodec, CompressionQuality,
1201 CompressionStats, PerceptualParams, SourceClustering, SpatialCompressionConfig,
1202 SpatialCompressor, SpatialMetadata, SpatialParams, TemporalMasking,
1203 },
1204 config::{SpatialConfig, SpatialConfigBuilder},
1205 core::{SpatialProcessor, SpatialProcessorBuilder},
1206 gaming::{
1207 console, AttenuationCurve, AttenuationSettings, AudioCategory, GameAudioSource,
1208 GameEngine, GamingAudioManager, GamingConfig, GamingMetrics,
1209 },
1210 gestures::{
1211 AudioAction, GestureBuilder, GestureConfidence, GestureConfig, GestureController,
1212 GestureData, GestureDirection, GestureEvent, GestureEventType,
1213 GestureRecognitionMethod, GestureType, Hand,
1214 },
1215 gpu::{
1216 GpuAmbisonics, GpuConfig, GpuConvolution, GpuDevice, GpuResourceManager, GpuSpatialMath,
1217 },
1218 haptic::{
1219 AudioHapticMapping, DistanceAttenuation, HapticAccessibilitySettings,
1220 HapticAudioConfig, HapticAudioProcessor, HapticCapabilities, HapticComfortSettings,
1221 HapticDevice, HapticEffectType, HapticElement, HapticMetrics, HapticPattern,
1222 PatternStyle,
1223 },
1224 hrtf::{
1225 ai_personalization::{
1226 AdaptationStrategy, AiHrtfPersonalizer, AnthropometricMeasurements,
1227 HrtfModifications, PerceptualFeedback, PersonalizationConfig,
1228 PersonalizationMetadata, PersonalizedHrtf, TrainingResults,
1229 },
1230 HrtfDatabase, HrtfProcessor,
1231 },
1232 multiuser::{
1233 AccessibilitySettings, AcousticSettings, AudioEffect, AudioEffectsProcessor,
1234 AudioQualityMetrics, AudioSourceType, BandwidthSettings, CodecState, CodecTiming,
1235 CompensationMethod, ConnectionStatus, DirectionalPattern, DisconnectReason,
1236 InterpolationMethod, LatencyCompensator, LowBandwidthMode, MicrophoneSettings,
1237 MixerConfig, MultiUserAttenuationCurve, MultiUserAudioProcessor, MultiUserAudioSource,
1238 MultiUserConfig, MultiUserConfigBuilder, MultiUserEnvironment, MultiUserEvent,
1239 MultiUserMetrics, MultiUserUser, NetworkEventType, NetworkStats, OptimizationLevel,
1240 Permission, PermissionSystem, PositionInterpolator, PositionSnapshot, RoomId,
1241 SourceAccessControl, SourceId, SourceProcessingState, SourceQualitySettings,
1242 SourceVisibility, SpatialAudioMixer, SpatialProperties, SpatialZone,
1243 SynchronizationManager, SynchronizedClock, UserId, UserRole, VadAlgorithm, VadState,
1244 VadThresholds, VoiceActivityDetector, ZoneAudioProperties, ZoneBounds, ZoneType,
1245 },
1246 neural::{
1247 AdaptiveQualityController, AugmentationConfig, ConvolutionalModel, FeedforwardModel,
1248 LossFunction, NeuralInputFeatures, NeuralModel, NeuralModelType,
1249 NeuralPerformanceMetrics, NeuralSpatialConfig, NeuralSpatialConfigBuilder,
1250 NeuralSpatialOutput, NeuralSpatialProcessor, NeuralTrainer, NeuralTrainingResults,
1251 OptimizerType, RealtimeConstraints, TrainingConfig, TransformerModel,
1252 },
1253 performance::{
1254 PerformanceConfig, PerformanceMetrics, PerformanceReport, PerformanceSummary,
1255 PerformanceTargetResult, PerformanceTestSuite, ResourceMonitor, ResourceStatistics,
1256 },
1257 platforms::{
1258 ARCorePlatform, ARKitPlatform, DeviceInfo, EyeData, EyeTrackingData, GenericPlatform,
1259 HandData, HandGesture, HandTrackingData, OculusPlatform, PlatformCapabilities,
1260 PlatformFactory, PlatformIntegration, PlatformTrackingData, PoseData, TrackingConfig,
1261 TrackingQuality, TrackingState, WMRPlatform,
1262 },
1263 plugins::{
1264 PluginCapabilities, PluginConfig, PluginManager, PluginParameter, PluginParameters,
1265 PluginState, ProcessingChain, ProcessingContext, ReverbPlugin, SpatialPlugin,
1266 },
1267 position::{
1268 advanced_prediction::{
1269 AdaptationPhase, AdvancedPredictiveTracker, ModelSelectionStrategy, MotionPattern,
1270 MotionPatternType, PatternRecognitionConfig, PredictedPosition, PredictionMetrics,
1271 PredictionModelType, PredictiveTrackingConfig,
1272 },
1273 Box3D, CalibrationData, ComfortSettings, DopplerProcessor, DynamicSource,
1274 DynamicSourceManager, HeadTracker, Listener, ListenerMovementSystem, MotionPredictor,
1275 MotionSnapshot, MovementConstraints, MovementMetrics, NavigationMode,
1276 OcclusionDetector, OcclusionMaterial, OcclusionMethod, OcclusionResult, PlatformData,
1277 PlatformType, SoundSource, SpatialSourceManager,
1278 },
1279 room::{
1280 adaptive_acoustics::{
1281 AdaptationAction, AdaptationController, AdaptationMetrics, AdaptationTrigger,
1282 AdaptiveAcousticEnvironment, AdaptiveAcousticsConfig, EnvironmentSensors,
1283 EnvironmentSnapshot, EnvironmentType, SensorConfig, UserFeedback,
1284 },
1285 ConnectionAcousticProperties, ConnectionState, ConnectionType, GlobalAcousticConfig,
1286 MultiRoomEnvironment, Room, RoomAcoustics, RoomConnection, RoomSimulator,
1287 },
1288 smart_speakers::{
1289 ArrayMetrics, ArrayTopology, AudioFormat, AudioRoute, AudioRouter, AudioSource,
1290 AudioSpecs, CalibrationEngine, CalibrationMethod, CalibrationResults,
1291 CalibrationStatus, ClockSource, CompressionConfig, DeviceFilter, DirectivityPattern,
1292 DiscoveryProtocol, DiscoveryService, DspFeature, EQFilter, FilterType, LimitingConfig,
1293 MixSettings, NetworkConfig, NetworkInfo, NetworkProtocol, ProcessingConfig,
1294 ProcessingStep, RoomCorrection, SmartSpeaker, SpeakerArrayConfig,
1295 SpeakerArrayConfigBuilder, SpeakerArrayManager, SpeakerCapabilities, SyncConfig,
1296 },
1297 technical_testing::{
1298 create_standard_technical_configs, LatencyAnalysis, MemoryConstraints,
1299 PlatformAnalysis, PlatformTestResult, StabilityAnalysis, StressTestParams,
1300 TechnicalSuccessCriteria, TechnicalTestConfig, TechnicalTestParameters,
1301 TechnicalTestReport, TechnicalTestResult, TechnicalTestSuite, TechnicalTestType,
1302 TestOutcome,
1303 },
1304 telepresence::{
1305 AcousticEchoSettings, AcousticMatchingSettings, AcousticProperties,
1306 AdaptiveQualitySettings, AirAbsorptionSettings, AnonymizationMethod,
1307 AnonymizationSettings, AudioCodec, AudioDeviceConfig, AudioEnhancementSettings,
1308 AudioFormat as TelepresenceAudioFormat, AudioMetadata, AudioPresenceSettings,
1309 AudioQualityPreferences, AudioQualitySettings, BandwidthConstraints,
1310 BandwidthExtensionSettings, CodecPreferences, CompressionSettings,
1311 ConsentManagementSettings, CrossRoomSettings, DataCollectionSettings,
1312 DistanceModelingSettings, DopplerEffectsSettings, EchoCancellationSettings,
1313 EnvironmentalAwarenessSettings, EqualizationSettings, HeadTrackingSettings,
1314 HrtfPersonalizationSettings, NetworkSettings, NoiseSuppressionSettings, Orientation,
1315 PresenceIndicatorSettings, PrivacySettings, QualityLevel, QualitySettings,
1316 ReceivedAudio, RoomSimulationSettings, SessionJoinResult, SessionState,
1317 SessionStatistics, SpatialTelepresenceSettings, TelepresenceAudioSettings,
1318 TelepresenceConfig, TelepresenceProcessor, TelepresenceSession,
1319 TrackingPredictionSettings, UserConfig, VadSettings, Velocity, VirtualRoomParameters,
1320 VisualPresenceSettings, VoiceProcessingSettings, VoiceSpatializationSettings,
1321 },
1322 types::{
1323 AudioChannel, BinauraAudio, Position3D, SIMDSpatialOps, SpatialEffect, SpatialRequest,
1324 SpatialResult,
1325 },
1326 validation::{
1327 create_standard_test_configs, create_test_subjects, AccuracyMetrics, AudioExpertise,
1328 ExperienceLevel, Gender, HearingAbility, PerceptualTestSuite, PopulationAnalysis,
1329 ResponseData, StimulusData, SubjectiveRatings, SuccessCriteria, TestParameters,
1330 TestStatistics, TestSubject, ValidationReport, ValidationTestConfig,
1331 ValidationTestResult, ValidationTestType,
1332 },
1333 visual_audio::{
1334 AnimationParams, AnimationType, AudioVisualMapping, ColorRGBA, ColorScheme,
1335 ColorSchemeType, DirectionZone, DirectionalCueMapping, EasingFunction,
1336 EventTriggerMapping, FrequencyVisualMapping, OnsetTrigger, RhythmTrigger, ScalingCurve,
1337 ShapeType, SilenceTrigger, SpectralTrigger, VisualAccessibilitySettings,
1338 VisualAudioConfig, VisualAudioMetrics, VisualAudioProcessor, VisualDisplay,
1339 VisualDisplayCapabilities, VisualDistanceAttenuation, VisualEffect, VisualElement,
1340 VisualElementType, VisualPerformanceSettings, VisualResourceUsage, VisualSyncSettings,
1341 },
1342 wfs::{
1343 ArrayGeometry, PreEmphasisConfig, WfsArrayBuilder, WfsConfig, WfsDrivingFunction,
1344 WfsProcessor, WfsSource, WfsSourceType,
1345 },
1346 Error, Result,
1347 };
1348}