mirror of https://github.com/jetkvm/kvm.git
65 lines
1.7 KiB
Go
65 lines
1.7 KiB
Go
package audio
|
|
|
|
import (
|
|
"sync"
|
|
)
|
|
|
|
var (
|
|
globalNonBlockingManager *NonBlockingAudioManager
|
|
managerMutex sync.Mutex
|
|
)
|
|
|
|
// StartNonBlockingAudioStreaming starts the non-blocking audio streaming system
|
|
func StartNonBlockingAudioStreaming(send func([]byte)) error {
|
|
managerMutex.Lock()
|
|
defer managerMutex.Unlock()
|
|
|
|
if globalNonBlockingManager != nil && globalNonBlockingManager.IsRunning() {
|
|
return ErrAudioAlreadyRunning
|
|
}
|
|
|
|
globalNonBlockingManager = NewNonBlockingAudioManager()
|
|
return globalNonBlockingManager.StartAudioOutput(send)
|
|
}
|
|
|
|
// StartNonBlockingAudioInput starts the non-blocking audio input system
|
|
func StartNonBlockingAudioInput(receiveChan <-chan []byte) error {
|
|
managerMutex.Lock()
|
|
defer managerMutex.Unlock()
|
|
|
|
if globalNonBlockingManager == nil {
|
|
globalNonBlockingManager = NewNonBlockingAudioManager()
|
|
}
|
|
|
|
return globalNonBlockingManager.StartAudioInput(receiveChan)
|
|
}
|
|
|
|
// StopNonBlockingAudioStreaming stops the non-blocking audio streaming system
|
|
func StopNonBlockingAudioStreaming() {
|
|
managerMutex.Lock()
|
|
defer managerMutex.Unlock()
|
|
|
|
if globalNonBlockingManager != nil {
|
|
globalNonBlockingManager.Stop()
|
|
globalNonBlockingManager = nil
|
|
}
|
|
}
|
|
|
|
// GetNonBlockingAudioStats returns statistics from the non-blocking audio system
|
|
func GetNonBlockingAudioStats() NonBlockingAudioStats {
|
|
managerMutex.Lock()
|
|
defer managerMutex.Unlock()
|
|
|
|
if globalNonBlockingManager != nil {
|
|
return globalNonBlockingManager.GetStats()
|
|
}
|
|
return NonBlockingAudioStats{}
|
|
}
|
|
|
|
// IsNonBlockingAudioRunning returns true if the non-blocking audio system is running
|
|
func IsNonBlockingAudioRunning() bool {
|
|
managerMutex.Lock()
|
|
defer managerMutex.Unlock()
|
|
|
|
return globalNonBlockingManager != nil && globalNonBlockingManager.IsRunning()
|
|
} |