mirror of
https://github.com/jetkvm/kvm.git
synced 2025-09-16 08:38:14 +00:00
Replace hardcoded values with centralized config constants for better maintainability and flexibility. This includes sleep durations, buffer sizes, thresholds, and various audio processing parameters. The changes affect multiple components including buffer pools, latency monitoring, IPC, and audio processing. This refactoring makes it easier to adjust parameters without modifying individual files. Key changes: - Replace hardcoded sleep durations with config values - Centralize buffer sizes and pool configurations - Move thresholds and limits to config - Update audio quality presets to use config values
72 lines
1.8 KiB
Go
72 lines
1.8 KiB
Go
package audio
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
"time"
|
|
|
|
"github.com/jetkvm/kvm/internal/logging"
|
|
)
|
|
|
|
// RunAudioInputServer runs the audio input server subprocess
|
|
// This should be called from main() when the subprocess is detected
|
|
func RunAudioInputServer() error {
|
|
logger := logging.GetDefaultLogger().With().Str("component", "audio-input-server").Logger()
|
|
logger.Info().Msg("Starting audio input server subprocess")
|
|
|
|
// Start adaptive buffer management for optimal performance
|
|
StartAdaptiveBuffering()
|
|
defer StopAdaptiveBuffering()
|
|
|
|
// Initialize CGO audio system
|
|
err := CGOAudioPlaybackInit()
|
|
if err != nil {
|
|
logger.Error().Err(err).Msg("Failed to initialize CGO audio playback")
|
|
return err
|
|
}
|
|
defer CGOAudioPlaybackClose()
|
|
|
|
// Create and start the IPC server
|
|
server, err := NewAudioInputServer()
|
|
if err != nil {
|
|
logger.Error().Err(err).Msg("Failed to create audio input server")
|
|
return err
|
|
}
|
|
defer server.Close()
|
|
|
|
err = server.Start()
|
|
if err != nil {
|
|
logger.Error().Err(err).Msg("Failed to start audio input server")
|
|
return err
|
|
}
|
|
|
|
logger.Info().Msg("Audio input server started, waiting for connections")
|
|
|
|
// Set up signal handling for graceful shutdown
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
defer cancel()
|
|
|
|
sigChan := make(chan os.Signal, 1)
|
|
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
|
|
|
|
// Wait for shutdown signal
|
|
select {
|
|
case sig := <-sigChan:
|
|
logger.Info().Str("signal", sig.String()).Msg("Received shutdown signal")
|
|
case <-ctx.Done():
|
|
logger.Info().Msg("Context cancelled")
|
|
}
|
|
|
|
// Graceful shutdown
|
|
logger.Info().Msg("Shutting down audio input server")
|
|
server.Stop()
|
|
|
|
// Give some time for cleanup
|
|
time.Sleep(GetConfig().DefaultSleepDuration)
|
|
|
|
logger.Info().Msg("Audio input server subprocess stopped")
|
|
return nil
|
|
}
|