Changeset 651 for trunk/src/3rdparty/phonon/mmf/audioequalizer.cpp
- Timestamp:
- Mar 8, 2010, 12:52:58 PM (15 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo changed
/branches/vendor/nokia/qt/4.6.2 (added) merged: 650 /branches/vendor/nokia/qt/current merged: 649 /branches/vendor/nokia/qt/4.6.1 removed
- Property svn:mergeinfo changed
-
trunk/src/3rdparty/phonon/mmf/audioequalizer.cpp
r561 r651 29 29 */ 30 30 31 AudioEqualizer::AudioEqualizer(QObject *parent) : AbstractAudioEffect::AbstractAudioEffect(parent, createParams()) 31 // Define functions which depend on concrete native effect class name 32 PHONON_MMF_DEFINE_EFFECT_FUNCTIONS(AudioEqualizer) 33 34 AudioEqualizer::AudioEqualizer(QObject *parent, const QList<EffectParameter>& parameters) 35 : AbstractAudioEffect::AbstractAudioEffect(parent, parameters) 32 36 { 37 33 38 } 34 39 35 void AudioEqualizer::parameterChanged(const int pid,40 int AudioEqualizer::effectParameterChanged(const EffectParameter ¶m, 36 41 const QVariant &value) 37 42 { 38 if (m_effect.data()) { 39 const int band = pid; 40 const int level = value.toInt(); 41 setBandLevel(band, level); 42 } 43 const int band = param.id() - ParameterBase + 1; 44 45 const qreal externalLevel = value.toReal(); 46 const int internalLevel = param.toInternalValue(externalLevel); 47 48 TRAPD(err, concreteEffect()->SetBandLevelL(band, internalLevel)); 49 return err; 43 50 } 44 51 45 void AudioEqualizer::connectAudioPlayer(AudioPlayer::NativePlayer *player) 52 53 //----------------------------------------------------------------------------- 54 // Static functions 55 //----------------------------------------------------------------------------- 56 57 const char* AudioEqualizer::description() 46 58 { 47 CAudioEqualizer *ptr = 0; 48 QT_TRAP_THROWING(ptr = CAudioEqualizer::NewL(*player)); 49 m_effect.reset(ptr); 59 return "Audio equalizer"; 50 60 } 51 61 52 void AudioEqualizer::applyParameters() 62 bool AudioEqualizer::getParameters(CMdaAudioOutputStream *stream, 63 QList<EffectParameter>& parameters) 53 64 { 54 if (m_effect.data()) { 55 EffectParameter param; 56 foreach (param, parameters()) { 57 const int band = param.id(); 58 const int level = parameterValue(param).toInt(); 59 setBandLevel(band, level); 65 bool supported = false; 66 67 QScopedPointer<CAudioEqualizer> effect; 68 TRAPD(err, effect.reset(CAudioEqualizer::NewL(*stream))); 69 70 if (KErrNone == err) { 71 supported = true; 72 73 TInt32 dbMin; 74 TInt32 dbMax; 75 effect->DbLevelLimits(dbMin, dbMax); 76 77 const int bandCount = effect->NumberOfBands(); 78 79 for (int i = 0; i < bandCount; ++i) { 80 // For some reason, band IDs are 1-based, as opposed to the 81 // 0-based indices used in just about other Symbian API...! 82 const int band = i + 1; 83 84 const qint32 hz = effect->CenterFrequency(band); 85 86 // We pass a floating-point parameter range of -1.0 to +1.0 for 87 // each band in order to work around a limitation in 88 // Phonon::EffectWidget. See documentation of EffectParameter 89 // for more details. 90 EffectParameter param( 91 /* parameterId */ ParameterBase + i, 92 /* name */ tr("%1 Hz").arg(hz), 93 /* hints */ EffectParameter::LogarithmicHint, 94 /* defaultValue */ QVariant(qreal(0.0)), 95 /* minimumValue */ QVariant(qreal(-1.0)), 96 /* maximumValue */ QVariant(qreal(+1.0))); 97 98 param.setInternalRange(dbMin, dbMax); 99 parameters.append(param); 60 100 } 61 101 } 62 }63 102 64 void AudioEqualizer::setBandLevel(int band, int level) 65 { 66 CAudioEqualizer *const effect = static_cast<CAudioEqualizer *>(m_effect.data()); 67 // TODO: handle audio effect errors 68 TRAP_IGNORE(effect->SetBandLevelL(band, level)); 69 } 70 71 QList<EffectParameter> AudioEqualizer::createParams() 72 { 73 QList<EffectParameter> retval; 74 75 // We temporarily create an AudioPlayer, and run the effect on it, so 76 // we can extract the readonly data we need. 77 AudioPlayer dummyPlayer; 78 79 CAudioEqualizer *eqPtr = 0; 80 QT_TRAP_THROWING(eqPtr = CAudioEqualizer::NewL(*dummyPlayer.nativePlayer())); 81 QScopedPointer<CAudioEqualizer> e(eqPtr); 82 83 TInt32 dbMin; 84 TInt32 dbMax; 85 e->DbLevelLimits(dbMin, dbMax); 86 87 const int bandCount = e->NumberOfBands(); 88 89 for (int i = 0; i < bandCount; ++i) { 90 const qint32 hz = e->CenterFrequency(i); 91 92 const qint32 defVol = e->BandLevel(i); 93 94 retval.append(EffectParameter(i, 95 tr("Frequency band, %1 Hz").arg(hz), 96 EffectParameter::LogarithmicHint, 97 QVariant(qint32(defVol)), 98 QVariant(qint32(dbMin)), 99 QVariant(qint32(dbMax)), 100 QVariantList(), 101 QString())); 102 } 103 104 return retval; 103 return supported; 105 104 } 106 105
Note:
See TracChangeset
for help on using the changeset viewer.