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"
|
|
)
|
|
|
|
// RunAudioOutputServer runs the audio output server subprocess
|
|
// This should be called from main() when the subprocess is detected
|
|
func RunAudioOutputServer() error {
|
|
logger := logging.GetDefaultLogger().With().Str("component", "audio-output-server").Logger()
|
|
logger.Info().Msg("Starting audio output server subprocess")
|
|
|
|
// Create audio server
|
|
server, err := NewAudioServer()
|
|
if err != nil {
|
|
logger.Error().Err(err).Msg("failed to create audio server")
|
|
return err
|
|
}
|
|
defer server.Close()
|
|
|
|
// Start accepting connections
|
|
if err := server.Start(); err != nil {
|
|
logger.Error().Err(err).Msg("failed to start audio server")
|
|
return err
|
|
}
|
|
|
|
// Initialize audio processing
|
|
err = StartNonBlockingAudioStreaming(func(frame []byte) {
|
|
if err := server.SendFrame(frame); err != nil {
|
|
logger.Warn().Err(err).Msg("failed to send audio frame")
|
|
RecordFrameDropped()
|
|
}
|
|
})
|
|
if err != nil {
|
|
logger.Error().Err(err).Msg("failed to start audio processing")
|
|
return err
|
|
}
|
|
|
|
logger.Info().Msg("Audio output 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 output server")
|
|
StopNonBlockingAudioStreaming()
|
|
|
|
// Give some time for cleanup
|
|
time.Sleep(GetConfig().DefaultSleepDuration)
|
|
|
|
logger.Info().Msg("Audio output server subprocess stopped")
|
|
return nil
|
|
}
|