?? akode-engine.cpp
字號(hào):
/*************************************************************************** * Copyright (C) 2005 Max Howell <max.howell@methylblue.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 <akode-engine.h>#include <akode/decoder.h>#include <akode/player.h>#include <klocale.h>#include <qapplication.h>AMAROK_EXPORT_PLUGIN( AkodeEngine )namespace Amarok{ class Manager : public aKode::Player::Manager { AkodeEngine *m_engine; /// Called for all stateChanges virtual void stateChangeEvent( aKode::Player::State ) { QApplication::postEvent( m_engine, new QCustomEvent( 3000 ) ); } /// Called when a decoder reaches end of file virtual void eofEvent() { QApplication::postEvent( m_engine, new QCustomEvent( 3001 ) ); } /// Called when a decoder encounters a fatal error virtual void errorEvent() { QApplication::postEvent( m_engine, new QCustomEvent( 3002 ) ); } public: Manager( AkodeEngine *engine ) : m_engine( engine ) {} };}AkodeEngine::AkodeEngine() : m_player( 0 ){}AkodeEngine::~AkodeEngine(){ if( m_player ) m_player->close();}boolAkodeEngine::init(){// startTimer( 20 ); m_player = new aKode::Player(); m_player->setManager( new Amarok::Manager( this ) ); m_player->setMonitor( &m_scope ); return m_player->open( "auto" );}boolAkodeEngine::load( const KURL &url, bool isStream ){ Engine::Base::load( url, isStream ); return m_player->load( url.path().local8Bit().data() );}boolAkodeEngine::play( uint /*offset*/ ){ //FIXME this seemed to crash Amarok //m_player->decoder()->seek( offset ); m_player->play(); return true;}voidAkodeEngine::unpause(){ m_player->play();}boolAkodeEngine::canDecode( const KURL &url ) const{ const QString ext = url.path().right( 4 ).lower(); return ext == ".mp3" || ext == ".ogg" || ext == ".wav" || ext ==".mpc" || ext == "flac";}uintAkodeEngine::position() const{ if( !m_player->decoder() ) return 0; const int pos = m_player->decoder()->position(); return pos >= 0 ? pos : 0;}voidAkodeEngine::stop(){ m_player->stop(); m_player->unload();}voidAkodeEngine::pause(){ switch( m_player->state() ) { case aKode::Player::Playing: m_player->pause(); break; case aKode::Player::Paused: m_player->play(); break; default: ; }}voidAkodeEngine::setVolumeSW( uint v ){ m_player->setVolume( (float)v / 100.0 );}voidAkodeEngine::seek( uint ms ){ m_player->decoder()->seek( ms );}Engine::StateAkodeEngine::state() const{ switch( m_player->state() ) { case aKode::Player::Open: case aKode::Player::Closed: return Engine::Empty; default: case aKode::Player::Loaded: return Engine::Idle; case aKode::Player::Playing: return Engine::Playing; case aKode::Player::Paused: return Engine::Paused; }}boolAkodeEngine::event( QEvent *e ){ switch( e->type() ) { /* case QEvent::Timer: if( m_player->decoder() && m_player->decoder()->eof() ) { m_player->stop(); emit trackEnded(); } break; */ case 3000: emit stateChanged( state() ); break; case 3001: m_player->stop(); emit trackEnded(); break; case 3002: m_player->stop(); emit trackEnded(); emit infoMessage( i18n("Unable to decode <i>%1</i>").arg( m_url.prettyURL()) ); break; default: return false; } return true;}const Engine::Scope& AkodeEngine::scope(){ return m_scope.scope();}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -