/*************************************************************************** copyright : (C) 2004 by Allan Sandfeld Jensen email : kde@carewolf.com ***************************************************************************/ /*************************************************************************** * * * This program 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 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include <config.h> #ifdef HAVE_AKODE #include <kdebug.h> #include <tqfile.h> #include <akode/player.h> #include <akode/decoder.h> #include "akodeplayer.h" using namespace aKode; //////////////////////////////////////////////////////////////////////////////// // public methods //////////////////////////////////////////////////////////////////////////////// aKodePlayer::aKodePlayer() : Player(), m_player(0), m_volume(1.0) {} aKodePlayer::~aKodePlayer() { delete m_player; } void aKodePlayer::play(const FileHandle &file) { kdDebug( 65432 ) << k_funcinfo << endl; if (file.isNull()) { // null FileHandle file means unpause if (paused()) m_player->resume(); else stop(); return; } TQString filename = file.absFilePath(); kdDebug( 65432 ) << "Opening: " << filename << endl; if (m_player) m_player->stop(); else { m_player = new aKode::Player(); m_player->open("auto"); m_player->setVolume(m_volume); } if (m_player->load(filename.local8Bit().data())) m_player->play(); } void aKodePlayer::pause() { if (m_player) m_player->pause(); } void aKodePlayer::stop() { if (m_player) { m_player->stop(); m_player->unload(); } } void aKodePlayer::setVolume(float volume) { m_volume = volume; if (m_player) m_player->setVolume(m_volume); } float aKodePlayer::volume() const { return m_volume; } ///////////////////////////////////////////////////////////////////////////////// // m_player status functions ///////////////////////////////////////////////////////////////////////////////// bool aKodePlayer::playing() const { if (m_player && m_player->decoder() && m_player->state() == aKode::Player::Playing) return !m_player->decoder()->eof(); else return false; } bool aKodePlayer::paused() const { return m_player && (m_player->state() == aKode::Player::Paused); } int aKodePlayer::totalTime() const { if (m_player) { Decoder *d = m_player->decoder(); if (d) return d->length() / 1000; } return -1; } int aKodePlayer::currentTime() const { if (m_player) { Decoder *d = m_player->decoder(); if (d) return d->position() / 1000; } return -1; } int aKodePlayer::position() const { if (m_player) { Decoder *d = m_player->decoder(); if (d && d->length()) return (d->position()*1000)/(d->length()); else return -1; } else return -1; } ///////////////////////////////////////////////////////////////////////////////// // m_player seek functions ///////////////////////////////////////////////////////////////////////////////// void aKodePlayer::seek(int seekTime) { // seek time in seconds? if (m_player) m_player->decoder()->seek(seekTime*1000); } void aKodePlayer::seekPosition(int position) { // position unit is 1/1000th if (m_player) m_player->decoder()->seek((position * m_player->decoder()->length())/1000); } #include "akodeplayer.moc" #endif