diff --git a/examples/playing-audio-with-sdl2-mixer/playing-audio-with-sdl2-mixer.go b/examples/playing-audio-with-sdl2-mixer/playing-audio-with-sdl2-mixer.go new file mode 100644 index 0000000..0afbd67 --- /dev/null +++ b/examples/playing-audio-with-sdl2-mixer/playing-audio-with-sdl2-mixer.go @@ -0,0 +1,73 @@ +package main + +import "C" +import ( + "log" + "os" + "os/signal" + "syscall" + + "github.com/veandco/go-sdl2/mix" + "github.com/veandco/go-sdl2/sdl" +) + +func main() { + // Initialize SDL2 + if err := sdl.Init(sdl.INIT_AUDIO); err != nil { + log.Println(err) + return + } + defer sdl.Quit() + + // Initialize SDL2 mixer + if err := mix.Init(mix.INIT_MP3); err != nil { + log.Println(err) + return + } + defer mix.Quit() + + // Open default playback device + if err := mix.OpenAudio(mix.DEFAULT_FREQUENCY, mix.DEFAULT_FORMAT, mix.DEFAULT_CHANNELS, mix.DEFAULT_CHUNKSIZE); err != nil { + log.Println(err) + return + } + defer mix.CloseAudio() + + // Load compressed audio file (like MP3) with long duration as *mix.Music + music, err := mix.LoadMUS("../../assets/test.mp3") + if err != nil { + log.Println(err) + } + defer music.Free() + + // Load WAV file with short duration as *mix.Chunk + chunk, err := mix.LoadWAV("../../assets/test.wav") + if err != nil { + log.Println(err) + } + defer chunk.Free() + + // Play the music once. Change 0 to -1 for infinite playback!. + if err := music.Play(0); err != nil { + log.Println(err) + } + + // Play the chunk once. Change 0 to -1 for infinite playback! + if _, err := chunk.Play(-1, 0); err != nil { + log.Println(err) + } + + // Listen to OS signals + c := make(chan os.Signal, 1) + signal.Notify(c, os.Interrupt, syscall.SIGTERM) + + // Run infinite loop until we receive SIGINT or SIGTERM! + running := true + for running { + select { + case sig := <-c: + log.Printf("Received signal %v. Exiting.\n", sig) + running = false + } + } +}