46 lines
712 B
Go
46 lines
712 B
Go
//go:build linux
|
|
|
|
package audio
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"sync"
|
|
|
|
"github.com/gordonklaus/portaudio"
|
|
)
|
|
|
|
var (
|
|
paMu sync.Mutex
|
|
paRefCount int
|
|
)
|
|
|
|
func initPortAudio() error {
|
|
paMu.Lock()
|
|
defer paMu.Unlock()
|
|
|
|
if paRefCount == 0 {
|
|
if err := portaudio.Initialize(); err != nil {
|
|
return err
|
|
}
|
|
|
|
devices, err := portaudio.Devices()
|
|
if err == nil {
|
|
fmt.Fprintf(os.Stderr, "[Audio] Linux/PortAudio initialized globally. Devices found: %d\n", len(devices))
|
|
}
|
|
}
|
|
paRefCount++
|
|
return nil
|
|
}
|
|
|
|
func terminatePortAudio() {
|
|
paMu.Lock()
|
|
defer paMu.Unlock()
|
|
|
|
paRefCount--
|
|
if paRefCount == 0 {
|
|
fmt.Fprintf(os.Stderr, "[Audio] Linux/PortAudio terminating globally...\n")
|
|
portaudio.Terminate()
|
|
}
|
|
}
|