2020-01-31 23:18:11 -05:00
|
|
|
package d2audio
|
|
|
|
|
|
|
|
import (
|
|
|
|
"errors"
|
|
|
|
)
|
|
|
|
|
2020-02-01 20:39:28 -05:00
|
|
|
var singleton AudioProvider
|
2020-01-31 23:18:11 -05:00
|
|
|
|
|
|
|
var (
|
2020-02-01 21:51:49 -05:00
|
|
|
ErrHasInit = errors.New("audio system is already initialized")
|
|
|
|
ErrNotInit = errors.New("audio system has not been initialized")
|
2020-01-31 23:18:11 -05:00
|
|
|
)
|
|
|
|
|
2020-02-01 20:39:28 -05:00
|
|
|
type SoundEffect interface {
|
|
|
|
Play()
|
|
|
|
Stop()
|
|
|
|
}
|
|
|
|
|
|
|
|
type AudioProvider interface {
|
|
|
|
PlayBGM(song string)
|
|
|
|
LoadSoundEffect(sfx string) (SoundEffect, error)
|
|
|
|
SetVolumes(bgmVolume, sfxVolume float64)
|
|
|
|
}
|
|
|
|
|
2020-01-31 23:18:11 -05:00
|
|
|
// CreateManager creates a sound provider
|
2020-02-01 20:39:28 -05:00
|
|
|
func Initialize(audioProvider AudioProvider) error {
|
2020-01-31 23:18:11 -05:00
|
|
|
if singleton != nil {
|
|
|
|
return ErrHasInit
|
|
|
|
}
|
|
|
|
singleton = audioProvider
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// PlayBGM plays an infinitely looping background track
|
|
|
|
func PlayBGM(song string) error {
|
|
|
|
if singleton == nil {
|
|
|
|
return ErrNotInit
|
|
|
|
}
|
|
|
|
singleton.PlayBGM(song)
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2020-02-01 20:39:28 -05:00
|
|
|
func LoadSoundEffect(sfx string) (SoundEffect, error) {
|
2020-01-31 23:18:11 -05:00
|
|
|
if singleton == nil {
|
|
|
|
return nil, ErrNotInit
|
|
|
|
}
|
|
|
|
return singleton.LoadSoundEffect(sfx)
|
|
|
|
}
|
|
|
|
|
|
|
|
func SetVolumes(bgmVolume, sfxVolume float64) error {
|
|
|
|
if singleton == nil {
|
|
|
|
return ErrNotInit
|
|
|
|
}
|
|
|
|
singleton.SetVolumes(bgmVolume, sfxVolume)
|
|
|
|
return nil
|
|
|
|
}
|