kdemmengine.cpp

来自「Amarok是一款在LINUX或其他类UNIX操作系统中运行的音频播放器软件。 」· C++ 代码 · 共 262 行

CPP
262
字号
/***************************************************************************         kdemmengine.cpp  -  KDE Multimedia (KDEMM) interface                         -------------------begin                : 2004-10-01copyright            : (C) 2004 by Roland Gigleremail                : rolandg@web.dewhat                 : interface to the KDE Multimedia interface (KDEMM)***************************************************************************//*************************************************************************** *                                                                         * *   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 "enginebase.h"#include "engineobserver.h"#include <assert.h>#include <math.h>            //setVolume(), timerEvent()#include <string>#include <vector>#include <qdir.h>#include <qdom.h>#include <qfile.h>#include <qlayout.h>#include <qstring.h>#include <qtextstream.h>#include <qtimer.h>#include <kapplication.h>#include <kconfig.h>#include <kdebug.h>#include <kfileitem.h>#include <kgenericfactory.h>#include <klocale.h>#include <kmessagebox.h>#include <kmimetype.h>#include <kstandarddirs.h>#include <kurl.h>#include <kdemm/simpleplayer.h>#include "kdemmengine.h"#define KDEMM_TIMER 250AMAROK_EXPORT_PLUGIN( KDEMMEngine )using namespace KDE::Multimedia;KDEMMEngine::KDEMMEngine( )        : Engine::Base()//        , m_scopeId( 0 )//        , m_xfadeFadeout( false )//        , m_xfadeValue( 0.0 )//        , m_xfadeCurrent( "invalue2" )        , m_state( Engine::Empty )	, m_pPlayingTimer( new QTimer( this ) ){    kdDebug() << k_funcinfo << endl;    m_player = new SimplePlayer();}KDEMMEngine::~KDEMMEngine(){    kdDebug() << "BEGIN " << k_funcinfo << endl;    m_pPlayingTimer->stop();    delete m_player;    kdDebug() << "END " << k_funcinfo << endl;}bool KDEMMEngine::init(){    kdDebug() << "BEGIN " << k_funcinfo << endl;   /*    m_scopeSize = 1 << scopeSize;    m_restoreEffects = restoreEffects;    m_mixerHW = -1;   //initialize    */    connect ( m_pPlayingTimer, SIGNAL( timeout() ), this, SLOT( playingTimeout() ) );    kdDebug() << "END " << k_funcinfo << endl;    return true;}////////////////////////////////////////////////////////////////////////////////// PUBLIC METHODS////////////////////////////////////////////////////////////////////////////////bool KDEMMEngine::canDecode( const KURL &url ) const{    static QStringList list;    kdDebug() << "BEGIN " << k_funcinfo << endl;    kdDebug() << "  Param: url: " << url << endl;    //kdDebug() << "  url.protocol()   >" << url.protocol() <<"<"<< endl;    if (url.protocol() == "http" ) return false;    // TODO determine list of supported MimeTypes/Extensions from KDEMM    list += QString("audio/x-mp3");    KFileItem fileItem( KFileItem::Unknown, KFileItem::Unknown, url, false ); //false = determineMimeType straight away    KMimeType::Ptr mimetype = fileItem.determineMimeType();    kdDebug() << "mimetype: " << mimetype->name().latin1() << endl;    return list.contains( mimetype->name().latin1() );}  // canDecodebool KDEMMEngine::load( const KURL& url, bool stream ){    kdDebug() << "BEGIN " << k_funcinfo << endl;    m_isStream = stream;    kdDebug() << "  m_url: " << m_url << endl;    kdDebug() << "  Param: stream: " << stream << endl;    kdDebug() << "  Param: url " << url << endl;    if ( !url.isLocalFile() ) {         // for now       return false;    }    if ( m_url == url ) {       return true;    } else {       stop();   }    m_url = url;    // the KDEMM  SimplePlayer dows the loading in the play method    m_state = Engine::Idle;    kdDebug() << "END " << k_funcinfo << endl;    return true;}   // loadbool KDEMMEngine::play( unsigned int offset){    kdDebug() << "BEGIN " << k_funcinfo << endl;    kdDebug() << "  param: offset " << offset << endl;    m_player->play(m_url);    m_pPlayingTimer->start(KDEMM_TIMER, false);    m_state = Engine::Playing;    emit stateChanged( Engine::Playing );    kdDebug() << "END " << k_funcinfo << endl;    return true;}   // play/* * return current position in milli seconds*/uint KDEMMEngine::position() const{    uint pos=0;    //kdDebug() << "BEGIN " << k_funcinfo << endl;    //kdDebug() << "  totalTime: " << m_player->totalTime() << endl;    //kdDebug() << "  currentTime: " << m_player->currentTime() << endl;    pos = m_player->currentTime();    //kdDebug() << "END " << k_funcinfo << endl;    return (pos);}   // position//////////////////////////////////////////////////////////////////////void KDEMMEngine::stop(){    kdDebug() << "BEGIN " << k_funcinfo << endl;    //switch xfade channels/*    m_xfadeCurrent = ( m_xfadeCurrent == "invalue1" ) ? "invalue2" : "invalue1";    if ( m_xfadeValue == 0.0 )        m_xfadeValue = 1.0;*/    m_player->stop();    m_pPlayingTimer->stop();    m_state = Engine::Idle;     // Empty    emit stateChanged( m_state );    kdDebug() << "END " << k_funcinfo << endl;}void KDEMMEngine::pause(){    kdDebug() << "BEGIN " << k_funcinfo << endl;    // KDEMM: pause() cannot do un-pause, do it manually    if (m_state == Engine::Paused){        m_player->play(m_url);        m_pPlayingTimer->start(KDEMM_TIMER, false);        m_state = Engine::Playing;    } else {        m_player->pause();        m_pPlayingTimer->stop();        m_state = Engine::Paused;    }    emit stateChanged( m_state );    kdDebug() << "END " << k_funcinfo << endl;}   // pausevoid KDEMMEngine::seek( unsigned int ms ){    kdDebug() << "BEGIN " << k_funcinfo << endl;    kdDebug() << "  param: ms " << ms << endl;    m_player->seek(ms);    kdDebug() << "END " << k_funcinfo << endl;}   // seekvoid KDEMMEngine::setVolumeSW( unsigned int percent ){    kdDebug() << "BEGIN " << k_funcinfo << endl;    kdDebug() << "  Param: percent " << percent << endl;    float vol = percent*0.01;    kdDebug() << " setting vol to " << vol << endl;    m_player->setVolume(vol);    kdDebug() << "END " << k_funcinfo << endl;}   // setVolumeSW////////////////////////////////////////////////////////////////////////////////// PRIVATE METHODS////////////////////////////////////////////////////////////////////////////////void KDEMMEngine::playingTimeout() //SLOT{    //kdDebug() << "BEGIN " << k_funcinfo << endl;    if( !m_player->isPlaying() ) {        m_pPlayingTimer->stop();        m_state = Engine::Idle;        emit trackEnded();    }    //kdDebug() << "END " << k_funcinfo << endl;}   // playingTimeout#include "kdemmengine.moc"

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?