diff --git a/audio_win.go b/audio_win.go new file mode 100644 index 0000000..643ddad --- /dev/null +++ b/audio_win.go @@ -0,0 +1,103 @@ +// +build windows + +package audio + +import ( + "log" + "time" + + "bitbucket.org/StephenPatrick/go-winaudio/winaudio" +) + +type Player struct { + player winaudio.Audio + duration time.Duration + src string + format int + samplesPerSecond int64 + Paused bool +} + +func notImplemented(msg string) { + log.Println("[WARNING] " + msg + " is not implemented on Windows") +} + +func NewPlayer(src string, format int, samplesPerSecond int64) (*Player, error) { + winaudio.InitWinAudio() + wavfile, err := winaudio.LoadWav(src) + if err != nil { + panic(err) + } + wavfile.SetLooping(true) + return &Player{player: wavfile, src: src, format: format, samplesPerSecond: samplesPerSecond}, nil +} + +func NewSimplePlayer(src string) (*Player, error) { + return NewPlayer(src, 0, 0) +} + +func (p *Player) Close() error { + notImplemented("close") + return nil +} + +func (p *Player) Current() time.Duration { + dur, _ := time.ParseDuration("3000ms") + return dur +} + +func (p *Player) Play() error { + err := p.player.Play() + if err != nil { + panic(err) + } + p.Paused = false + return nil +} + +func (p *Player) Seek(offset time.Duration) error { + notImplemented("seek") + return nil +} + +func (p *Player) Pause() error { + p.player.Pause() + p.Paused = true + return nil +} + +func (p *Player) SetVolume(volume float64) error { + p.player.SetVolume(int32(volume)) + return nil +} + +func (p *Player) Volume() int32 { + vol, _ := p.player.GetVolume() + return vol +} + +func (p *Player) State() State { + if p.Paused { + return Paused + } else { + return Playing + } +} + +func (p *Player) Stop() error { + notImplemented("stop") + return nil +} + +func (p *Player) Total(bg bool) time.Duration { + //TODO: Use the bg parameter + return p.duration +} + +func (p *Player) Rewind() { + notImplemented("rewind") +} + +func (p *Player) PlaySources() { + notImplemented("playSources") +} diff --git a/demos/assets/48hz16bit2ch.wav b/demos/assets/48hz16bit2ch.wav new file mode 100644 index 0000000..bcfeb09 Binary files /dev/null and b/demos/assets/48hz16bit2ch.wav differ diff --git a/demos/hello.go b/demos/hello.go index f139276..1ddc410 100644 --- a/demos/hello.go +++ b/demos/hello.go @@ -9,7 +9,7 @@ import ( ) func main() { - player, err := audio.NewSimplePlayer("assets/birds.wav") + player, err := audio.NewSimplePlayer("assets/48hz16bit2ch.wav") if err != nil { panic(err) }