// +build windows package main import ( "fmt" "path/filepath" "syscall" "unsafe" ) const ( SND_SYNC uint = 0x0000 /* play synchronously (default) */ SND_ASYNC uint = 0x0001 /* play asynchronously */ SND_NODEFAULT uint = 0x0002 /* silence (!default) if sound not found */ SND_MEMORY uint = 0x0004 /* pszSound points to a memory file */ SND_LOOP uint = 0x0008 /* loop the sound until next sndPlaySound */ SND_NOSTOP uint = 0x0010 /* don't stop any currently playing sound */ SND_NOWAIT uint = 0x00002000 /* don't wait if the driver is busy */ SND_ALIAS uint = 0x00010000 /* name is a registry alias */ SND_ALIAS_ID uint = 0x00110000 /* alias is a predefined ID */ SND_FILENAME uint = 0x00020000 /* name is file name */ SND_RESOURCE uint = 0x00040004 /* name is resource name or atom */ SND_PURGE uint = 0x0040 /* purge non-static events for task */ SND_APPLICATION uint = 0x0080 /* look for application specific association */ SND_SENTRY uint = 0x00080000 /* Generate a SoundSentry event with this sound */ SND_RING uint = 0x00100000 /* Treat this as a "ring" from a communications app - don't duck me */ SND_SYSTEM uint = 0x00200000 /* Treat this as a system sound */ SND_ALIAS_START uint = 0 /* alias base */ ) var ( mmsystem = syscall.MustLoadDLL("winmm.dll") playSound = mmsystem.MustFindProc("PlaySound") sndPlaySoundA = mmsystem.MustFindProc("sndPlaySoundA") sndPlaySoundW = mmsystem.MustFindProc("sndPlaySoundW") ) // PlaySound play sound in Windows func PlaySound(sound string, hmod int, flags uint) { s16, _ := syscall.UTF16PtrFromString(sound) playSound.Call(uintptr(unsafe.Pointer(s16)), uintptr(hmod), uintptr(flags)) } // SndPlaySoundA play sound file in Windows func SndPlaySoundA(sound string, flags uint) { b := append([]byte(sound), 0) sndPlaySoundA.Call(uintptr(unsafe.Pointer(&b[0])), uintptr(flags)) } // SndPlaySoundW play sound file in Windows func SndPlaySoundW(sound string, flags uint) { s16, _ := syscall.UTF16PtrFromString(sound) sndPlaySoundW.Call(uintptr(unsafe.Pointer(s16)), uintptr(flags)) } func init() { fmt.Println("initializing ...") } func main() { fmt.Println("Getting files: ") files, err := filepath.Glob("*.wav") if err != nil { panic(err) } for _, file := range files { fmt.Printf("Playing %s ... ", file) SndPlaySoundW(file, SND_SYNC) fmt.Println("done") } fmt.Println("Bye") }