diff --git a/src/libtomahawk/audio/AudioEngine.cpp b/src/libtomahawk/audio/AudioEngine.cpp index d518c57e1..2f40e3605 100644 --- a/src/libtomahawk/audio/AudioEngine.cpp +++ b/src/libtomahawk/audio/AudioEngine.cpp @@ -182,6 +182,7 @@ AudioEngine::AudioEngine() d->waitingOnNewTrack = false; d->state = Stopped; d->coverTempFile = 0; + d->audioEffect = 0; d->s_instance = this; tDebug() << "Init AudioEngine"; @@ -191,7 +192,7 @@ AudioEngine::AudioEngine() d->mediaObject = new Phonon::MediaObject( this ); d->audioOutput = new Phonon::AudioOutput( Phonon::MusicCategory, this ); - Phonon::createPath( d->mediaObject, d->audioOutput ); + d->audioPath = Phonon::createPath( d->mediaObject, d->audioOutput ); d->mediaObject->setTickInterval( 150 ); connect( d->mediaObject, SIGNAL( stateChanged( Phonon::State, Phonon::State ) ), d_func(), SLOT( onStateChanged( Phonon::State, Phonon::State ) ) ); @@ -207,6 +208,8 @@ AudioEngine::AudioEngine() onVolumeChanged( d->audioOutput->volume() ); setVolume( TomahawkSettings::instance()->volume() ); + + initEqualizer(); } @@ -1231,3 +1234,55 @@ AudioEngine::setCurrentTrackPlaylist( const playlistinterface_ptr& playlist ) emit currentTrackPlaylistChanged( d->currentTrackPlaylist ); } } + + +void +AudioEngine::initEqualizer() +{ + Q_D( AudioEngine ); + + QList< Phonon::EffectDescription > effectDescriptions = Phonon::BackendCapabilities::availableAudioEffects(); + foreach ( Phonon::EffectDescription effectDesc, effectDescriptions ) + { + if ( effectDesc.name().toLower().contains( "eq" ) ) + { + d->audioEffect = new Phonon::Effect( effectDesc ); + d->audioPath.insertEffect( d->audioEffect ); + break; + } + } +} + + +int +AudioEngine::equalizerBandCount() +{ + Q_D( AudioEngine ); + + if ( d->audioEffect ) + { + QList< Phonon::EffectParameter > params = d->audioEffect->parameters(); + return params.size(); + } + + return 0; +} + + +bool +AudioEngine::setEqualizerBand( int band, int value ) +{ + Q_D( AudioEngine ); + + if ( d->audioEffect ) + { + QList< Phonon::EffectParameter > params = d->audioEffect->parameters(); + if ( band < params.size() ) + { + d->audioEffect->setParameterValue( params.at( band ), value ); + return true; + } + } + + return false; +} diff --git a/src/libtomahawk/audio/AudioEngine.h b/src/libtomahawk/audio/AudioEngine.h index 0544fe120..db069fb97 100644 --- a/src/libtomahawk/audio/AudioEngine.h +++ b/src/libtomahawk/audio/AudioEngine.h @@ -62,6 +62,9 @@ public: qint64 currentTime() const; qint64 currentTrackTotalTime() const; + int equalizerBandCount(); + bool setEqualizerBand( int band, int value ); + public slots: void playPause(); void play(); @@ -145,6 +148,7 @@ private: void queueState( AudioState state ); void setState( AudioState state ); void setCurrentTrackPlaylist( const Tomahawk::playlistinterface_ptr& playlist ); + void initEqualizer(); Q_DECLARE_PRIVATE( AudioEngine ); AudioEnginePrivate* d_ptr; diff --git a/src/libtomahawk/audio/AudioEngine_p.h b/src/libtomahawk/audio/AudioEngine_p.h index 5102e86c4..2c1d8f963 100644 --- a/src/libtomahawk/audio/AudioEngine_p.h +++ b/src/libtomahawk/audio/AudioEngine_p.h @@ -1,7 +1,10 @@ #include #include +#include #include +#include +#include #include @@ -37,6 +40,8 @@ private: Phonon::MediaObject* mediaObject; Phonon::AudioOutput* audioOutput; + Phonon::Path audioPath; + Phonon::Effect* audioEffect; unsigned int timeElapsed; bool expectStop;