A simple audio engine for Go with an SDL2 back-end and others to come eventually.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

78 lines
1.7 KiB

// Package sdl implements an audio engine using libSDL2.
package sdl
import "github.com/veandco/go-sdl2/mix"
// Engine is the SDL2 audio engine.
type Engine struct {
initFlags int
}
// New initializes an SDL2 Mixer for the audio engine.
//
// Pass the SDL2 Mixer flags for its initialization. The flags are an OR'd
// value made up of:
// mix.INIT_MP3
// mix.INIT_OGG
// mix.INIT_FLAC
// mix.INIT_MOD
func New(flags int) (*Engine, error) {
return &Engine{
initFlags: flags,
}, nil
}
// Setup initializes SDL2 Mixer.
func (e *Engine) Setup() error {
// Initialize SDL2 mixer.
if err := mix.Init(e.initFlags); err != nil {
return err
}
// Open the audio mixer.
// the '2' is stereo (two channels), '1' would be mono.
// 4096 is the chunk size.
// https://www.libsdl.org/projects/SDL_mixer/docs/SDL_mixer_11.html
return mix.OpenAudio(mix.DEFAULT_FREQUENCY, mix.DEFAULT_FORMAT, 2, 4096)
}
// Playing returns if either music or sounds are currently playing.
func (e *Engine) Playing() bool {
if mix.PlayingMusic() {
return true
}
return mix.Playing(-1) > 0
}
// PlayingMusic returns if music is currently playing.
func (e *Engine) PlayingMusic() bool {
return mix.PlayingMusic()
}
// PlayingSound returns if sounds are playing.
func (e *Engine) PlayingSound() bool {
return mix.Playing(-1) > 0
}
// StopAll stops all music and sounds.
func (e *Engine) StopAll() {
e.StopMusic()
e.StopSounds()
}
// StopMusic stops all music.
func (e *Engine) StopMusic() {
mix.HaltMusic()
}
// StopSounds stops all sounds.
func (e *Engine) StopSounds() {
mix.HaltChannel(-1)
}
// Teardown closes the SDL mixer.
func (e *Engine) Teardown() error {
mix.CloseAudio()
mix.Quit()
return nil
}