diff options
author | Christian Pointner <equinox@helsinki.at> | 2016-01-13 17:04:04 (GMT) |
---|---|---|
committer | Christian Pointner <equinox@helsinki.at> | 2016-01-13 17:04:04 (GMT) |
commit | a0816652bf083e2934f2fca748338391ac3de757 (patch) | |
tree | a1e7cbdb282628b983da5e965006876e882a1210 /src/rhlibrary | |
parent | 72c7c990622c347c5462fa37bc0da989e220eb97 (diff) |
moved audio player to rhrd-go
Diffstat (limited to 'src/rhlibrary')
-rw-r--r-- | src/rhlibrary/main.go | 5 | ||||
-rw-r--r-- | src/rhlibrary/player.go | 92 |
2 files changed, 3 insertions, 94 deletions
diff --git a/src/rhlibrary/main.go b/src/rhlibrary/main.go index 5dea4ca..c6ab425 100644 --- a/src/rhlibrary/main.go +++ b/src/rhlibrary/main.go @@ -25,6 +25,7 @@ package main import ( + "code.helsinki.at/rhrd-go/player" "code.helsinki.at/rhrd-go/rddb" "flag" "fmt" @@ -83,12 +84,12 @@ func main() { } defer db.Cleanup() - player, err := NewPlayer("/home/equinox/helsinki/rivenhell/contrib/rhlibrary/snd") + p, err := player.NewPlayer("/home/equinox/helsinki/rivenhell/contrib/rhlibrary/snd") if err != nil { rhl.Println("Error initializing Player:", err) return } - player.Play(1, 1) + p.Play(1, 1) mw, err := NewMainWindow(640, 360) if err != nil { 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 -} |