kvm/internal/audio/core_config_constants.go

778 lines
40 KiB
Go

package audio
import (
"time"
"github.com/jetkvm/kvm/internal/logging"
)
// AudioConfigConstants centralizes all hardcoded values used across audio components.
// This configuration system allows runtime tuning of audio performance, quality, and resource usage.
type AudioConfigConstants struct {
// Audio Quality Presets
MaxAudioFrameSize int // Maximum audio frame size in bytes (default: 4096)
MaxPCMBufferSize int // Maximum PCM buffer size in bytes for separate buffer optimization
// Opus Encoding Parameters
OpusBitrate int // Target bitrate for Opus encoding in bps (default: 128000)
OpusComplexity int // Computational complexity 0-10 (default: 10 for best quality)
OpusVBR int // Variable Bit Rate: 0=CBR, 1=VBR (default: 1)
OpusVBRConstraint int // VBR constraint: 0=unconstrained, 1=constrained (default: 0)
OpusDTX int // Discontinuous Transmission: 0=disabled, 1=enabled (default: 0)
// Audio Parameters
SampleRate int // Audio sampling frequency in Hz (default: 48000)
Channels int // Number of audio channels: 1=mono, 2=stereo (default: 2)
FrameSize int // Samples per audio frame (default: 960 for 20ms at 48kHz)
MaxPacketSize int // Maximum encoded packet size in bytes (default: 4000)
// Audio Quality Bitrates (kbps)
AudioQualityLowOutputBitrate int // Low-quality output bitrate (default: 32)
AudioQualityLowInputBitrate int // Low-quality input bitrate (default: 16)
AudioQualityMediumOutputBitrate int // Medium-quality output bitrate (default: 64)
AudioQualityMediumInputBitrate int // Medium-quality input bitrate (default: 32)
AudioQualityHighOutputBitrate int // High-quality output bitrate (default: 128)
AudioQualityHighInputBitrate int // High-quality input bitrate (default: 64)
AudioQualityUltraOutputBitrate int // Ultra-quality output bitrate (default: 192)
AudioQualityUltraInputBitrate int // Ultra-quality input bitrate (default: 96)
// Audio Quality Sample Rates (Hz)
AudioQualityLowSampleRate int // Low-quality sample rate (default: 22050)
AudioQualityMediumSampleRate int // Medium-quality sample rate (default: 44100)
AudioQualityMicLowSampleRate int // Low-quality microphone sample rate (default: 16000)
// Audio Quality Frame Sizes
AudioQualityLowFrameSize time.Duration // Low-quality frame duration (default: 40ms)
AudioQualityMediumFrameSize time.Duration // Medium-quality frame duration (default: 20ms)
AudioQualityHighFrameSize time.Duration // High-quality frame duration (default: 20ms)
AudioQualityUltraFrameSize time.Duration // Ultra-quality frame duration (default: 10ms)
// Audio Quality Channels
AudioQualityLowChannels int // Low-quality channel count (default: 1)
AudioQualityMediumChannels int // Medium-quality channel count (default: 2)
AudioQualityHighChannels int // High-quality channel count (default: 2)
AudioQualityUltraChannels int // Ultra-quality channel count (default: 2)
// Audio Quality OPUS Encoder Parameters
AudioQualityLowOpusComplexity int // Low-quality OPUS complexity (default: 1)
AudioQualityLowOpusVBR int // Low-quality OPUS VBR setting (default: 0)
AudioQualityLowOpusSignalType int // Low-quality OPUS signal type (default: 3001)
AudioQualityLowOpusBandwidth int // Low-quality OPUS bandwidth (default: 1101)
AudioQualityLowOpusDTX int // Low-quality OPUS DTX setting (default: 1)
AudioQualityMediumOpusComplexity int // Medium-quality OPUS complexity (default: 5)
AudioQualityMediumOpusVBR int // Medium-quality OPUS VBR setting (default: 1)
AudioQualityMediumOpusSignalType int // Medium-quality OPUS signal type (default: 3002)
AudioQualityMediumOpusBandwidth int // Medium-quality OPUS bandwidth (default: 1103)
AudioQualityMediumOpusDTX int // Medium-quality OPUS DTX setting (default: 0)
AudioQualityHighOpusComplexity int // High-quality OPUS complexity (default: 8)
AudioQualityHighOpusVBR int // High-quality OPUS VBR setting (default: 1)
AudioQualityHighOpusSignalType int // High-quality OPUS signal type (default: 3002)
AudioQualityHighOpusBandwidth int // High-quality OPUS bandwidth (default: 1104)
AudioQualityHighOpusDTX int // High-quality OPUS DTX setting (default: 0)
AudioQualityUltraOpusComplexity int // Ultra-quality OPUS complexity (default: 10)
AudioQualityUltraOpusVBR int // Ultra-quality OPUS VBR setting (default: 1)
AudioQualityUltraOpusSignalType int // Ultra-quality OPUS signal type (default: 3002)
AudioQualityUltraOpusBandwidth int // Ultra-quality OPUS bandwidth (default: 1105)
AudioQualityUltraOpusDTX int // Ultra-quality OPUS DTX setting (default: 0)
// CGO Audio Constants
CGOOpusBitrate int // Native Opus encoder bitrate in bps (default: 96000)
CGOOpusComplexity int // Computational complexity for native Opus encoder (0-10)
CGOOpusVBR int // Variable Bit Rate in native Opus encoder (0=CBR, 1=VBR)
CGOOpusVBRConstraint int // Constrained VBR in native encoder (0/1)
CGOOpusSignalType int // Signal type hint for native Opus encoder
CGOOpusBandwidth int // Frequency bandwidth for native Opus encoder
CGOOpusDTX int // Discontinuous Transmission in native encoder (0/1)
CGOSampleRate int // Sample rate for native audio processing (Hz)
CGOChannels int // Channel count for native audio processing
CGOFrameSize int // Frame size for native Opus processing (samples)
CGOMaxPacketSize int // Maximum packet size for native encoding (bytes)
// Input IPC Constants
InputIPCSampleRate int // Sample rate for input IPC audio processing (Hz)
InputIPCChannels int // Channel count for input IPC audio processing
InputIPCFrameSize int // Frame size for input IPC processing (samples)
// Output IPC Constants
OutputMaxFrameSize int // Maximum frame size for output processing (bytes)
OutputHeaderSize int // Size of output message headers (bytes)
OutputMessagePoolSize int // Output message pool size (128)
// Socket Buffer Constants
SocketOptimalBuffer int // Optimal socket buffer size (128KB)
SocketMaxBuffer int // Maximum socket buffer size (256KB)
SocketMinBuffer int // Minimum socket buffer size (32KB)
// Process Management
MaxRestartAttempts int // Maximum restart attempts (5)
RestartWindow time.Duration // Restart attempt window (5m)
RestartDelay time.Duration // Initial restart delay (2s)
MaxRestartDelay time.Duration // Maximum restart delay (30s)
// Buffer Management
PreallocSize int
MaxPoolSize int
MessagePoolSize int
OptimalSocketBuffer int
MaxSocketBuffer int
MinSocketBuffer int
ChannelBufferSize int
AudioFramePoolSize int
PageSize int
InitialBufferFrames int
BytesToMBDivisor int
MinReadEncodeBuffer int
MaxDecodeWriteBuffer int
MinBatchSizeForThreadPinning int
GoroutineMonitorInterval time.Duration
MagicNumber uint32
MaxFrameSize int
WriteTimeout time.Duration
HeaderSize int
MetricsUpdateInterval time.Duration
WarmupSamples int
MetricsChannelBuffer int
LatencyHistorySize int
MaxCPUPercent float64
MinCPUPercent float64
DefaultClockTicks float64
DefaultMemoryGB int
MaxWarmupSamples int
WarmupCPUSamples int
LogThrottleIntervalSec int
MinValidClockTicks int
MaxValidClockTicks int
CPUFactor float64
MemoryFactor float64
LatencyFactor float64
// Adaptive Buffer Configuration
AdaptiveMinBufferSize int // Minimum buffer size in frames for adaptive buffering
AdaptiveMaxBufferSize int // Maximum buffer size in frames for adaptive buffering
AdaptiveDefaultBufferSize int // Default buffer size in frames for adaptive buffering
// Timing Configuration
RetryDelay time.Duration // Retry delay
MaxRetryDelay time.Duration // Maximum retry delay
BackoffMultiplier float64 // Backoff multiplier
MaxConsecutiveErrors int // Maximum consecutive errors
DefaultSleepDuration time.Duration // 100ms
ShortSleepDuration time.Duration // 10ms
LongSleepDuration time.Duration // 200ms
DefaultTickerInterval time.Duration // 100ms
BufferUpdateInterval time.Duration // 500ms
InputSupervisorTimeout time.Duration // 5s
OutputSupervisorTimeout time.Duration // 5s
BatchProcessingDelay time.Duration // 10ms
AdaptiveOptimizerStability time.Duration // 10s
LatencyMonitorTarget time.Duration // 50ms
// Adaptive Buffer Configuration
// LowCPUThreshold defines CPU usage threshold for buffer size reduction.
LowCPUThreshold float64 // 20% CPU threshold for buffer optimization
// HighCPUThreshold defines CPU usage threshold for buffer size increase.
HighCPUThreshold float64 // 60% CPU threshold
LowMemoryThreshold float64 // 50% memory threshold
HighMemoryThreshold float64 // 75% memory threshold
AdaptiveBufferTargetLatency time.Duration // 20ms target latency
CooldownPeriod time.Duration // 30s cooldown period
RollbackThreshold time.Duration // 300ms rollback threshold
AdaptiveOptimizerLatencyTarget time.Duration // 50ms latency target
MaxLatencyThreshold time.Duration // 200ms max latency
JitterThreshold time.Duration // 20ms jitter threshold
LatencyOptimizationInterval time.Duration // 5s optimization interval
LatencyAdaptiveThreshold float64 // 0.8 adaptive threshold
MicContentionTimeout time.Duration // 200ms contention timeout
PreallocPercentage int // 20% preallocation percentage
BackoffStart time.Duration // 50ms initial backoff
InputMagicNumber uint32 // Magic number for input IPC messages (0x4A4B4D49 "JKMI")
OutputMagicNumber uint32 // Magic number for output IPC messages (0x4A4B4F55 "JKOU")
// Calculation Constants
PercentageMultiplier float64 // Multiplier for percentage calculations (100.0)
AveragingWeight float64 // Weight for weighted averaging (0.7)
ScalingFactor float64 // General scaling factor (1.5)
SmoothingFactor float64 // Smoothing factor for adaptive buffers (0.3)
CPUMemoryWeight float64 // Weight for CPU factor in calculations (0.5)
MemoryWeight float64 // Weight for memory factor (0.3)
LatencyWeight float64 // Weight for latency factor (0.2)
PoolGrowthMultiplier int // Multiplier for pool size growth (2)
LatencyScalingFactor float64 // Scaling factor for latency calculations (2.0)
OptimizerAggressiveness float64 // Aggressiveness level for optimization (0.7)
// CGO Audio Processing Constants
CGOUsleepMicroseconds int // Sleep duration for CGO usleep calls (1000μs)
CGOPCMBufferSize int // PCM buffer size for CGO audio processing
CGONanosecondsPerSecond float64 // Nanoseconds per second conversion
FrontendOperationDebounceMS int // Frontend operation debounce delay
FrontendSyncDebounceMS int // Frontend sync debounce delay
FrontendSampleRate int // Frontend sample rate
FrontendRetryDelayMS int // Frontend retry delay
FrontendShortDelayMS int // Frontend short delay
FrontendLongDelayMS int // Frontend long delay
FrontendSyncDelayMS int // Frontend sync delay
FrontendMaxRetryAttempts int // Frontend max retry attempts
FrontendAudioLevelUpdateMS int // Frontend audio level update interval
FrontendFFTSize int // Frontend FFT size
FrontendAudioLevelMax int // Frontend max audio level
FrontendReconnectIntervalMS int // Frontend reconnect interval
FrontendSubscriptionDelayMS int // Frontend subscription delay
FrontendDebugIntervalMS int // Frontend debug interval
// Process Monitoring Constants
ProcessMonitorDefaultMemoryGB int // Default memory size for fallback (4GB)
ProcessMonitorKBToBytes int // KB to bytes conversion factor (1024)
ProcessMonitorDefaultClockHz float64 // Default system clock frequency (250.0 Hz)
ProcessMonitorFallbackClockHz float64 // Fallback clock frequency (1000.0 Hz)
ProcessMonitorTraditionalHz float64 // Traditional system clock frequency (100.0 Hz)
// Batch Processing Constants
BatchProcessorFramesPerBatch int // Frames processed per batch (4)
BatchProcessorTimeout time.Duration // Batch processing timeout (5ms)
BatchProcessorMaxQueueSize int // Maximum batch queue size (16)
BatchProcessorAdaptiveThreshold float64 // Adaptive batch sizing threshold (0.8)
BatchProcessorThreadPinningThreshold int // Thread pinning threshold (8 frames)
// Output Streaming Constants
OutputStreamingFrameIntervalMS int // Output frame interval (20ms for 50 FPS)
// IPC Constants
IPCInitialBufferFrames int // Initial IPC buffer size (500 frames)
EventTimeoutSeconds int
EventTimeFormatString string
EventSubscriptionDelayMS int
InputProcessingTimeoutMS int
AdaptiveBufferCPUMultiplier int
AdaptiveBufferMemoryMultiplier int
InputSocketName string
OutputSocketName string
AudioInputComponentName string
AudioOutputComponentName string
AudioServerComponentName string
AudioRelayComponentName string
AudioEventsComponentName string
TestSocketTimeout time.Duration
TestBufferSize int
TestRetryDelay time.Duration
LatencyHistogramMaxSamples int
LatencyPercentile50 int
LatencyPercentile95 int
LatencyPercentile99 int
BufferPoolMaxOperations int
HitRateCalculationBase float64
MaxLatency time.Duration
MinMetricsUpdateInterval time.Duration
MaxMetricsUpdateInterval time.Duration
MinSampleRate int
MaxSampleRate int
MaxChannels int
// CGO Constants
CGOMaxBackoffMicroseconds int // Maximum CGO backoff time (500ms)
CGOMaxAttempts int // Maximum CGO retry attempts (5)
// Frame Duration Validation
MinFrameDuration time.Duration // Minimum frame duration (10ms)
MaxFrameDuration time.Duration // Maximum frame duration (100ms)
// Valid Sample Rates
// Validation Constants
ValidSampleRates []int // Supported sample rates (8kHz to 48kHz)
MinOpusBitrate int // Minimum Opus bitrate (6000 bps)
MaxOpusBitrate int // Maximum Opus bitrate (510000 bps)
MaxValidationTime time.Duration // Validation timeout (5s)
MinFrameSize int // Minimum frame size (64 bytes)
FrameSizeTolerance int // Frame size tolerance (512 bytes)
// Latency Histogram Buckets
LatencyBucket10ms time.Duration // 10ms latency bucket
LatencyBucket25ms time.Duration // 25ms latency bucket
LatencyBucket50ms time.Duration // 50ms latency bucket
LatencyBucket100ms time.Duration // 100ms latency bucket
LatencyBucket250ms time.Duration // 250ms latency bucket
LatencyBucket500ms time.Duration // 500ms latency bucket
LatencyBucket1s time.Duration // 1s latency bucket
LatencyBucket2s time.Duration // 2s latency bucket
MaxAudioProcessorWorkers int
MaxAudioReaderWorkers int
AudioProcessorQueueSize int
AudioReaderQueueSize int
WorkerMaxIdleTime time.Duration
// Connection Retry Configuration
MaxConnectionAttempts int // Maximum connection retry attempts
ConnectionRetryDelay time.Duration // Initial connection retry delay
MaxConnectionRetryDelay time.Duration // Maximum connection retry delay
ConnectionBackoffFactor float64 // Connection retry backoff factor
ConnectionTimeoutDelay time.Duration // Connection timeout for each attempt
ReconnectionInterval time.Duration // Interval for automatic reconnection attempts
HealthCheckInterval time.Duration // Health check interval for connections
// Quality Change Timeout Configuration
QualityChangeSupervisorTimeout time.Duration // Timeout for supervisor stop during quality changes
QualityChangeTickerInterval time.Duration // Ticker interval for supervisor stop polling
QualityChangeSettleDelay time.Duration // Delay for quality change to settle
QualityChangeRecoveryDelay time.Duration // Delay before attempting recovery
// Graceful Degradation Configuration
CongestionMildReductionFactor float64 // Buffer reduction factor for mild congestion (0.75)
CongestionModerateReductionFactor float64 // Buffer reduction factor for moderate congestion (0.5)
CongestionThresholdMultiplier float64 // Multiplier for congestion threshold calculations (0.8)
CongestionRecoveryTimeout time.Duration // Timeout for congestion recovery (5 seconds)
// Buffer Pool Cache Configuration
BufferPoolCacheSize int // Buffers per goroutine cache (4)
BufferPoolCacheTTL time.Duration // Cache TTL for aggressive cleanup (5s)
BufferPoolMaxCacheEntries int // Maximum cache entries to prevent memory bloat (128)
BufferPoolCacheCleanupInterval time.Duration // Cleanup interval for frequent cleanup (15s)
BufferPoolCacheWarmupThreshold int // Warmup threshold for faster startup (25)
BufferPoolCacheHitRateTarget float64 // Target hit rate for balanced performance (0.80)
BufferPoolMaxCacheSize int // Maximum goroutine caches (256)
BufferPoolCleanupInterval int64 // Cleanup interval in seconds (15)
BufferPoolBufferTTL int64 // Buffer TTL in seconds (30)
BufferPoolControlSize int // Control pool buffer size (512)
BufferPoolMinPreallocBuffers int // Minimum preallocation buffers
BufferPoolMaxPoolSize int // Maximum pool size
BufferPoolChunkBufferCount int // Buffers per chunk
BufferPoolMinChunkSize int // Minimum chunk size (64KB)
BufferPoolInitialChunkCapacity int // Initial chunk capacity
BufferPoolAdaptiveResizeThreshold int // Threshold for adaptive resize
BufferPoolHighHitRateThreshold float64 // High hit rate threshold
BufferPoolOptimizeCacheThreshold int // Threshold for cache optimization
BufferPoolCounterResetThreshold int // Counter reset threshold
}
// DefaultAudioConfig returns the default configuration constants
// These values are carefully chosen based on JetKVM's embedded ARM environment,
// real-time audio requirements, and extensive testing for optimal performance.
func DefaultAudioConfig() *AudioConfigConstants {
return &AudioConfigConstants{
// Audio Quality Presets
MaxAudioFrameSize: 4096,
MaxPCMBufferSize: 8192, // Default PCM buffer size (2x MaxAudioFrameSize for safety)
// Opus Encoding Parameters
OpusBitrate: 128000,
OpusComplexity: 10,
OpusVBR: 1,
OpusVBRConstraint: 0,
OpusDTX: 0,
// Audio Parameters
SampleRate: 48000,
Channels: 2,
FrameSize: 960,
MaxPacketSize: 4000,
AudioQualityLowOutputBitrate: 32,
AudioQualityLowInputBitrate: 16,
AudioQualityMediumOutputBitrate: 48,
AudioQualityMediumInputBitrate: 24,
AudioQualityHighOutputBitrate: 64,
AudioQualityHighInputBitrate: 32,
AudioQualityUltraOutputBitrate: 96,
AudioQualityUltraInputBitrate: 48,
AudioQualityLowSampleRate: 48000,
AudioQualityMediumSampleRate: 48000,
AudioQualityMicLowSampleRate: 16000,
AudioQualityLowFrameSize: 20 * time.Millisecond,
AudioQualityMediumFrameSize: 20 * time.Millisecond,
AudioQualityHighFrameSize: 20 * time.Millisecond,
AudioQualityUltraFrameSize: 20 * time.Millisecond, // Ultra-quality frame duration
// Audio Quality Channels
AudioQualityLowChannels: 1, // Mono for low quality
AudioQualityMediumChannels: 2, // Stereo for medium quality
AudioQualityHighChannels: 2, // Stereo for high quality
AudioQualityUltraChannels: 2, // Stereo for ultra quality
// Audio Quality OPUS Parameters
AudioQualityLowOpusComplexity: 0, // Low complexity
AudioQualityLowOpusVBR: 1, // VBR enabled
AudioQualityLowOpusSignalType: 3001, // OPUS_SIGNAL_VOICE
AudioQualityLowOpusBandwidth: 1101, // OPUS_BANDWIDTH_NARROWBAND
AudioQualityLowOpusDTX: 1, // DTX enabled
AudioQualityMediumOpusComplexity: 1, // Low complexity
AudioQualityMediumOpusVBR: 1, // VBR enabled
AudioQualityMediumOpusSignalType: 3001, // OPUS_SIGNAL_VOICE
AudioQualityMediumOpusBandwidth: 1102, // OPUS_BANDWIDTH_MEDIUMBAND
AudioQualityMediumOpusDTX: 1, // DTX enabled
AudioQualityHighOpusComplexity: 2, // Medium complexity
AudioQualityHighOpusVBR: 1, // VBR enabled
AudioQualityHighOpusSignalType: 3002, // OPUS_SIGNAL_MUSIC
AudioQualityHighOpusBandwidth: 1103, // OPUS_BANDWIDTH_WIDEBAND
AudioQualityHighOpusDTX: 0, // DTX disabled
AudioQualityUltraOpusComplexity: 3, // Higher complexity
AudioQualityUltraOpusVBR: 1, // VBR enabled
AudioQualityUltraOpusSignalType: 3002, // OPUS_SIGNAL_MUSIC
AudioQualityUltraOpusBandwidth: 1103, // OPUS_BANDWIDTH_WIDEBAND
AudioQualityUltraOpusDTX: 0, // DTX disabled
// CGO Audio Constants - Optimized for RV1106 native audio processing
CGOOpusBitrate: 64000, // Reduced for RV1106 efficiency
CGOOpusComplexity: 2, // Minimal complexity for RV1106
CGOOpusVBR: 1,
CGOOpusVBRConstraint: 1,
CGOOpusSignalType: 3002, // OPUS_SIGNAL_MUSIC
CGOOpusBandwidth: 1103, // OPUS_BANDWIDTH_WIDEBAND for RV1106
CGOOpusDTX: 0,
CGOSampleRate: 48000,
CGOChannels: 2,
CGOFrameSize: 960,
CGOMaxPacketSize: 1200, // Reduced for RV1106 memory efficiency
// Input IPC Constants
InputIPCSampleRate: 48000, // Input IPC sample rate (48kHz)
InputIPCChannels: 2, // Input IPC channels (stereo)
InputIPCFrameSize: 960, // Input IPC frame size (960 samples)
// Output IPC Constants
OutputMaxFrameSize: 4096, // Maximum output frame size
OutputHeaderSize: 17, // Output frame header size
OutputMessagePoolSize: 128, // Output message pool size
// Socket Buffer Constants
SocketOptimalBuffer: 131072, // 128KB optimal socket buffer
SocketMaxBuffer: 262144, // 256KB maximum socket buffer
SocketMinBuffer: 32768, // 32KB minimum socket buffer
// Process Management
MaxRestartAttempts: 5, // Maximum restart attempts
RestartWindow: 5 * time.Minute, // Time window for restart attempt counting
RestartDelay: 1 * time.Second, // Initial delay before restart attempts
MaxRestartDelay: 30 * time.Second, // Maximum delay for exponential backoff
// Buffer Management
PreallocSize: 1024 * 1024, // 1MB buffer preallocation
MaxPoolSize: 100, // Maximum object pool size
MessagePoolSize: 1024, // Significantly increased message pool for quality change bursts
OptimalSocketBuffer: 262144, // 256KB optimal socket buffer
MaxSocketBuffer: 1048576, // 1MB maximum socket buffer
MinSocketBuffer: 8192, // 8KB minimum socket buffer
ChannelBufferSize: 2048, // Significantly increased channel buffer for quality change bursts
AudioFramePoolSize: 1500, // Audio frame object pool size
PageSize: 4096, // Memory page size for alignment
InitialBufferFrames: 1000, // Increased initial buffer size during startup
BytesToMBDivisor: 1024 * 1024, // Byte to megabyte conversion
MinReadEncodeBuffer: 1276, // Minimum CGO read/encode buffer
MaxDecodeWriteBuffer: 4096, // Maximum CGO decode/write buffer
// IPC Configuration - Balanced for stability
MagicNumber: 0xDEADBEEF, // IPC message validation header
MaxFrameSize: 4096, // Maximum audio frame size (4KB)
WriteTimeout: 1000 * time.Millisecond, // Further increased timeout to handle quality change bursts
HeaderSize: 8, // IPC message header size
// Monitoring and Metrics - Balanced for stability
MetricsUpdateInterval: 1000 * time.Millisecond, // Stable metrics collection frequency
WarmupSamples: 10, // Adequate warmup samples for accuracy
MetricsChannelBuffer: 100, // Adequate metrics data channel buffer
LatencyHistorySize: 100, // Adequate latency measurements to keep
// Process Monitoring Constants
MaxCPUPercent: 100.0, // Maximum CPU percentage
MinCPUPercent: 0.01, // Minimum CPU percentage
DefaultClockTicks: 250.0, // Default clock ticks for embedded ARM systems
DefaultMemoryGB: 8, // Default memory in GB
MaxWarmupSamples: 3, // Maximum warmup samples
WarmupCPUSamples: 2, // CPU warmup samples
LogThrottleIntervalSec: 10, // Log throttle interval in seconds
MinValidClockTicks: 50, // Minimum valid clock ticks
MaxValidClockTicks: 1000, // Maximum valid clock ticks
// Performance Tuning
CPUFactor: 0.7, // CPU weight in performance calculations
MemoryFactor: 0.8, // Memory weight in performance calculations
LatencyFactor: 0.9, // Latency weight in performance calculations
// Error Handling
RetryDelay: 100 * time.Millisecond, // Initial retry delay
MaxRetryDelay: 5 * time.Second, // Maximum retry delay
BackoffMultiplier: 2.0, // Exponential backoff multiplier
MaxConsecutiveErrors: 5, // Consecutive error threshold
// Connection Retry Configuration
MaxConnectionAttempts: 15, // Maximum connection retry attempts
ConnectionRetryDelay: 50 * time.Millisecond, // Initial connection retry delay
MaxConnectionRetryDelay: 2 * time.Second, // Maximum connection retry delay
ConnectionBackoffFactor: 1.5, // Connection retry backoff factor
ConnectionTimeoutDelay: 5 * time.Second, // Connection timeout for each attempt
ReconnectionInterval: 30 * time.Second, // Interval for automatic reconnection attempts
HealthCheckInterval: 10 * time.Second, // Health check interval for connections
// Quality Change Timeout Configuration
QualityChangeSupervisorTimeout: 5 * time.Second, // Timeout for supervisor stop during quality changes
QualityChangeTickerInterval: 100 * time.Millisecond, // Ticker interval for supervisor stop polling
QualityChangeSettleDelay: 2 * time.Second, // Delay for quality change to settle
QualityChangeRecoveryDelay: 1 * time.Second, // Delay before attempting recovery
// Graceful Degradation Configuration
CongestionMildReductionFactor: 0.75, // Buffer reduction factor for mild congestion (0.75)
CongestionModerateReductionFactor: 0.5, // Buffer reduction factor for moderate congestion (0.5)
CongestionThresholdMultiplier: 0.8, // Multiplier for congestion threshold calculations (0.8)
CongestionRecoveryTimeout: 5 * time.Second, // Timeout for congestion recovery (5 seconds)
// Buffer Pool Cache Configuration
BufferPoolCacheSize: 4, // Buffers per goroutine cache
BufferPoolCacheTTL: 5 * time.Second, // Cache TTL for aggressive cleanup
BufferPoolMaxCacheEntries: 128, // Maximum cache entries to prevent memory bloat
BufferPoolCacheCleanupInterval: 15 * time.Second, // Cleanup interval for frequent cleanup
BufferPoolCacheWarmupThreshold: 25, // Warmup threshold for faster startup
BufferPoolCacheHitRateTarget: 0.80, // Target hit rate for balanced performance
BufferPoolMaxCacheSize: 256, // Maximum goroutine caches
BufferPoolCleanupInterval: 15, // Cleanup interval in seconds
BufferPoolBufferTTL: 30, // Buffer TTL in seconds
BufferPoolControlSize: 512, // Control pool buffer size
BufferPoolMinPreallocBuffers: 16, // Minimum preallocation buffers (reduced from 50)
BufferPoolMaxPoolSize: 128, // Maximum pool size (reduced from 256)
BufferPoolChunkBufferCount: 8, // Buffers per chunk (reduced from 64 to prevent large allocations)
BufferPoolMinChunkSize: 8192, // Minimum chunk size (8KB, reduced from 64KB)
BufferPoolInitialChunkCapacity: 4, // Initial chunk capacity
BufferPoolAdaptiveResizeThreshold: 100, // Threshold for adaptive resize
BufferPoolHighHitRateThreshold: 0.95, // High hit rate threshold
BufferPoolOptimizeCacheThreshold: 100, // Threshold for cache optimization
BufferPoolCounterResetThreshold: 10000, // Counter reset threshold
// Timing Constants - Optimized for quality change stability
DefaultSleepDuration: 100 * time.Millisecond, // Balanced polling interval
ShortSleepDuration: 10 * time.Millisecond, // Balanced high-frequency polling
LongSleepDuration: 200 * time.Millisecond, // Balanced background task delay
DefaultTickerInterval: 100 * time.Millisecond, // Balanced periodic task interval
BufferUpdateInterval: 250 * time.Millisecond, // Faster buffer size update frequency
InputSupervisorTimeout: 5 * time.Second, // Input monitoring timeout
OutputSupervisorTimeout: 5 * time.Second, // Output monitoring timeout
BatchProcessingDelay: 5 * time.Millisecond, // Reduced batch processing delay
AdaptiveOptimizerStability: 5 * time.Second, // Faster adaptive stability period
LatencyMonitorTarget: 50 * time.Millisecond, // Balanced target latency for monitoring
// Adaptive Buffer Configuration - Optimized for low latency
LowCPUThreshold: 0.30,
HighCPUThreshold: 0.70,
LowMemoryThreshold: 0.60,
HighMemoryThreshold: 0.80,
AdaptiveBufferTargetLatency: 10 * time.Millisecond, // Aggressive target latency for responsiveness
// Adaptive Buffer Size Configuration - Optimized for quality change bursts
AdaptiveMinBufferSize: 256, // Further increased minimum to prevent emergency mode
AdaptiveMaxBufferSize: 1024, // Much higher maximum for quality changes
AdaptiveDefaultBufferSize: 512, // Higher default for stability during bursts
// Adaptive Optimizer Configuration - Faster response
CooldownPeriod: 15 * time.Second, // Reduced cooldown period
RollbackThreshold: 200 * time.Millisecond, // Lower rollback threshold
AdaptiveOptimizerLatencyTarget: 30 * time.Millisecond, // Reduced latency target
// Latency Monitor Configuration - More aggressive monitoring
MaxLatencyThreshold: 150 * time.Millisecond, // Lower max latency threshold
JitterThreshold: 15 * time.Millisecond, // Reduced jitter threshold
LatencyOptimizationInterval: 3 * time.Second, // More frequent optimization
LatencyAdaptiveThreshold: 0.7, // More aggressive adaptive threshold
// Microphone Contention Configuration
MicContentionTimeout: 200 * time.Millisecond,
// Buffer Pool Configuration
PreallocPercentage: 20,
// Sleep and Backoff Configuration
BackoffStart: 50 * time.Millisecond,
// Protocol Magic Numbers
InputMagicNumber: 0x4A4B4D49, // "JKMI" (JetKVM Microphone Input)
OutputMagicNumber: 0x4A4B4F55, // "JKOU" (JetKVM Output)
// Calculation Constants
PercentageMultiplier: 100.0, // Standard percentage conversion (0.5 * 100 = 50%)
AveragingWeight: 0.7, // Weight for smoothing values (70% recent, 30% historical)
ScalingFactor: 1.5, // General scaling factor for adaptive adjustments
SmoothingFactor: 0.3, // For adaptive buffer smoothing
CPUMemoryWeight: 0.5, // CPU factor weight in combined calculations
MemoryWeight: 0.3, // Memory factor weight in combined calculations
LatencyWeight: 0.2, // Latency factor weight in combined calculations
PoolGrowthMultiplier: 2, // Pool growth multiplier
LatencyScalingFactor: 2.0, // Latency ratio scaling factor
OptimizerAggressiveness: 0.7, // Optimizer aggressiveness factor
// CGO Audio Processing Constants - Balanced for stability
CGOUsleepMicroseconds: 1000, // 1000 microseconds (1ms) for stable CGO usleep calls
CGOPCMBufferSize: 1920, // 1920 samples for PCM buffer (max 2ch*960)
CGONanosecondsPerSecond: 1000000000.0, // 1000000000.0 for nanosecond conversions
// Frontend Constants - Balanced for stability
FrontendOperationDebounceMS: 1000, // 1000ms debounce for frontend operations
FrontendSyncDebounceMS: 1000, // 1000ms debounce for sync operations
FrontendSampleRate: 48000, // 48000Hz sample rate for frontend audio
FrontendRetryDelayMS: 500, // 500ms retry delay
FrontendShortDelayMS: 200, // 200ms short delay
FrontendLongDelayMS: 300, // 300ms long delay
FrontendSyncDelayMS: 500, // 500ms sync delay
FrontendMaxRetryAttempts: 3, // 3 maximum retry attempts
FrontendAudioLevelUpdateMS: 100, // 100ms audio level update interval
FrontendFFTSize: 256, // 256 FFT size for audio analysis
FrontendAudioLevelMax: 100, // 100 maximum audio level
FrontendReconnectIntervalMS: 3000, // 3000ms reconnect interval
FrontendSubscriptionDelayMS: 100, // 100ms subscription delay
FrontendDebugIntervalMS: 5000, // 5000ms debug interval
// Process Monitor Constants
ProcessMonitorDefaultMemoryGB: 4, // 4GB default memory for fallback
ProcessMonitorKBToBytes: 1024, // 1024 conversion factor
ProcessMonitorDefaultClockHz: 250.0, // 250.0 Hz default for ARM systems
ProcessMonitorFallbackClockHz: 1000.0, // 1000.0 Hz fallback clock
ProcessMonitorTraditionalHz: 100.0, // 100.0 Hz traditional clock
// Batch Processing Constants - Optimized for quality change bursts
BatchProcessorFramesPerBatch: 16, // Larger batches for quality changes
BatchProcessorTimeout: 20 * time.Millisecond, // Longer timeout for bursts
BatchProcessorMaxQueueSize: 64, // Larger queue for quality changes
BatchProcessorAdaptiveThreshold: 0.6, // Lower threshold for faster adaptation
BatchProcessorThreadPinningThreshold: 8, // Lower threshold for better performance
// Output Streaming Constants - Balanced for stability
OutputStreamingFrameIntervalMS: 20, // 20ms frame interval (50 FPS) for stability
// IPC Constants
IPCInitialBufferFrames: 500, // 500 frames for initial buffer
// Event Constants - Balanced for stability
EventTimeoutSeconds: 2, // 2 seconds for event timeout
EventTimeFormatString: "2006-01-02T15:04:05.000Z", // "2006-01-02T15:04:05.000Z" time format
EventSubscriptionDelayMS: 100, // 100ms subscription delay
// Goroutine Pool Configuration
MaxAudioProcessorWorkers: 16, // 16 workers for audio processing tasks
MaxAudioReaderWorkers: 8, // 8 workers for audio reading tasks
AudioProcessorQueueSize: 64, // 64 tasks queue size for processor pool
AudioReaderQueueSize: 32, // 32 tasks queue size for reader pool
WorkerMaxIdleTime: 60 * time.Second, // 60s maximum idle time before worker termination
// Input Processing Constants - Balanced for stability
InputProcessingTimeoutMS: 10, // 10ms processing timeout threshold
// Adaptive Buffer Constants
AdaptiveBufferCPUMultiplier: 100, // 100 multiplier for CPU percentage
AdaptiveBufferMemoryMultiplier: 100, // 100 multiplier for memory percentage
// Socket Names
InputSocketName: "audio_input.sock", // Socket name for audio input IPC
OutputSocketName: "audio_output.sock", // Socket name for audio output IPC
// Component Names
AudioInputComponentName: "audio-input", // Component name for input logging
AudioOutputComponentName: "audio-output", // Component name for output logging
AudioServerComponentName: "audio-server", // Component name for server logging
AudioRelayComponentName: "audio-relay", // Component name for relay logging
AudioEventsComponentName: "audio-events", // Component name for events logging
// Test Configuration
TestSocketTimeout: 100 * time.Millisecond, // 100ms timeout for test socket operations
TestBufferSize: 4096, // 4096 bytes buffer size for test operations
TestRetryDelay: 200 * time.Millisecond, // 200ms delay between test retry attempts
// Latency Histogram Configuration
LatencyHistogramMaxSamples: 1000, // 1000 samples for latency tracking
LatencyPercentile50: 50, // 50th percentile calculation factor
LatencyPercentile95: 95, // 95th percentile calculation factor
LatencyPercentile99: 99, // 99th percentile calculation factor
// Buffer Pool Efficiency Constants
BufferPoolMaxOperations: 1000, // 1000 operations for efficiency tracking
HitRateCalculationBase: 100.0, // 100.0 base for hit rate percentage calculation
// Validation Constants
MaxLatency: 500 * time.Millisecond, // 500ms maximum allowed latency
MinMetricsUpdateInterval: 100 * time.Millisecond, // 100ms minimum metrics update interval
MaxMetricsUpdateInterval: 10 * time.Second, // 10s maximum metrics update interval
MinSampleRate: 8000, // 8kHz minimum sample rate
MaxSampleRate: 48000, // 48kHz maximum sample rate
MaxChannels: 8, // 8 maximum audio channels
// CGO Constants
CGOMaxBackoffMicroseconds: 500000, // 500ms maximum backoff in microseconds
CGOMaxAttempts: 5, // 5 maximum retry attempts
// Validation Frame Size Limits
MinFrameDuration: 10 * time.Millisecond, // 10ms minimum frame duration
MaxFrameDuration: 100 * time.Millisecond, // 100ms maximum frame duration
// Valid Sample Rates
ValidSampleRates: []int{8000, 12000, 16000, 22050, 24000, 44100, 48000}, // Supported sample rates
// Opus Bitrate Validation Constants
MinOpusBitrate: 6000, // 6000 bps minimum Opus bitrate
MaxOpusBitrate: 510000, // 510000 bps maximum Opus bitrate
// Validation Configuration
MaxValidationTime: 5 * time.Second, // 5s maximum validation timeout
MinFrameSize: 1, // 1 byte minimum frame size (allow small frames)
FrameSizeTolerance: 512, // 512 bytes frame size tolerance
// Removed device health monitoring configuration - functionality not used
// Latency Histogram Bucket Configuration
LatencyBucket10ms: 10 * time.Millisecond, // 10ms latency bucket
LatencyBucket25ms: 25 * time.Millisecond, // 25ms latency bucket
LatencyBucket50ms: 50 * time.Millisecond, // 50ms latency bucket
LatencyBucket100ms: 100 * time.Millisecond, // 100ms latency bucket
LatencyBucket250ms: 250 * time.Millisecond, // 250ms latency bucket
LatencyBucket500ms: 500 * time.Millisecond, // 500ms latency bucket
LatencyBucket1s: 1 * time.Second, // 1s latency bucket
LatencyBucket2s: 2 * time.Second, // 2s latency bucket
// Batch Audio Processing Configuration
MinBatchSizeForThreadPinning: 5, // Minimum batch size to pin thread
// Goroutine Monitoring Configuration
GoroutineMonitorInterval: 30 * time.Second, // 30s monitoring interval
// Performance Configuration Flags - Production optimizations
}
}
// Global configuration instance
var Config = DefaultAudioConfig()
// UpdateConfig allows runtime configuration updates
func UpdateConfig(newConfig *AudioConfigConstants) {
// Validate the new configuration before applying it
if err := ValidateAudioConfigConstants(newConfig); err != nil {
// Log validation error and keep current configuration
logger := logging.GetDefaultLogger().With().Str("component", "AudioConfig").Logger()
logger.Error().Err(err).Msg("Configuration validation failed, keeping current configuration")
return
}
Config = newConfig
logger := logging.GetDefaultLogger().With().Str("component", "AudioConfig").Logger()
logger.Info().Msg("Audio configuration updated successfully")
}
// GetConfig returns the current configuration
func GetConfig() *AudioConfigConstants {
return Config
}