diff options
Diffstat (limited to 'src/rhlibrary/player.go')
-rw-r--r-- | src/rhlibrary/player.go | 92 |
1 files changed, 0 insertions, 92 deletions
diff --git a/src/rhlibrary/player.go b/src/rhlibrary/player.go deleted file mode 100644 index 983198f..0000000 --- a/src/rhlibrary/player.go +++ /dev/null @@ -1,92 +0,0 @@ -// -// rhlibrary -// -// The Radio Helsinki Rivendell Library -// -// -// Copyright (C) 2016 Christian Pointner <equinox@helsinki.at> -// -// This file is part of rhlibrary. -// -// rhlibrary is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// any later version. -// -// rhlibrary is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with rhlibrary. If not, see <http://www.gnu.org/licenses/>. -// - -package main - -import ( - "fmt" - "github.com/spreadspace/go-gstreamer" - "path" -) - -func init() { - gst.Init(nil) -} - -type Player struct { - pipe *gst.Element - bus *gst.Bus - basepath string -} - -func (p *Player) onMessage(bus *gst.Bus, msg *gst.Message) { - switch msg.GetType() { - case gst.MESSAGE_EOS: - rhdl.Printf("GStreamer Pipeline: EOS reached!") - p.pipe.SetState(gst.STATE_NULL) - case gst.MESSAGE_WARNING: - warn, _ := msg.ParseWarning() - rhdl.Printf("GStreamer Pipeline Warning: %s", warn) - case gst.MESSAGE_ERROR: - p.pipe.SetState(gst.STATE_NULL) - err, _ := msg.ParseError() - rhdl.Printf("GStreamer Pipeline Error: %s", err) - case gst.MESSAGE_ASYNC_DONE: - len, ok := p.pipe.QueryDuration(gst.FORMAT_TIME) - if ok { - rhdl.Printf("GStreamer Pipeline: loaded file has length: %d.%d s", len/1000000000, len%1000000000) - } else { - rhdl.Printf("GStreamer Pipeline Error: unable to query duration of file") - } - case gst.MESSAGE_STATE_CHANGED: - default: - rhdl.Printf("GStreamer Message: unknown type '%s'", msg.GetTypeName()) - } -} - -func (p *Player) Play(cart, cut uint) (err error) { - filename := path.Join(p.basepath, fmt.Sprintf("%06d_%03d.wav", cart, cut)) - rhdl.Printf("trying to play file: %s", filename) - - p.pipe.SetProperty("uri", "file://"+filename) - p.pipe.SetState(gst.STATE_PLAYING) - return -} - -func NewPlayer(basepath string) (p *Player, err error) { - p = &Player{} - p.basepath = path.Clean(basepath) - - if p.pipe, err = gst.ElementFactoryMake("playbin", "autoplay"); err != nil { - return - } - if p.bus, err = p.pipe.GetBus(); err != nil { - return - } - - p.bus.AddSignalWatch() - p.bus.Connect("message", func(bus *gst.Bus, msg *gst.Message) { p.onMessage(bus, msg) }) - - return -} |