|
|
Classification: |
C++ |
Category: |
Applications |
Created: |
07/09/2003 |
Modified: |
10/16/2003 |
Number: |
FAQ-0892 |
Platform: |
Symbian OS v6.0, Symbian OS v6.1, Symbian OS v7.0, Symbian OS v7.0s |
|
Question: CEikonEnv::Beep() is deprecated. In order to play beeps you have to use CMdaAudioToneUtility However this is a bit fiddly. Is there an easier way?
Answer: From Symbian OS v6.1, CEikonEnv::Beep() and User::Beep() are deprecated. CBeep, below, shows the implementation of a simple wrapper around CMdaAudioToneUtility that you can use instead. The class allows you to create a CBeep with a duration and a frequency like this:
TTimeIntervalMicroSeconds d1(500000); iBeep1=CBeep::NewL(440, d1); and then produce a beep by calling iBeep1->Play();
You can create more than one of these objects, each with a different tone & duration, and call Play() as required.
The class definition and implementation are provided below:
class CBeep : public CBase, public MMdaAudioToneObserver { public: static CBeep* NewL(TInt aFrequency, TTimeIntervalMicroSeconds iDuration); void Play(); ~CBeep(); private: void ConstructL(TInt aFrequency, TTimeIntervalMicroSeconds iDuration); void MatoPrepareComplete(TInt aError); void MatoPlayComplete(TInt aError); private: typedef enum TBeepState { EBeepNotPrepared, EBeepPrepared, EBeepPlaying }; private: CMdaAudioToneUtility* iToneUtil; TBeepState iState; TInt iFrequency; TTimeIntervalMicroSeconds iDuration; };
CBeep::~CBeep() { delete iToneUtil; }
CBeep* CBeep::NewL(TInt aFrequency, TTimeIntervalMicroSeconds aDuration) { CBeep* self=new (ELeave) CBeep(); CleanupStack::PushL(self); self->ConstructL(aFrequency, aDuration); CleanupStack::Pop(); return self; };
void CBeep::ConstructL(TInt aFrequency, TTimeIntervalMicroSeconds aDuration) { iToneUtil=CMdaAudioToneUtility::NewL(*this); iState=EBeepNotPrepared; iFrequency=aFrequency; iDuration=aDuration; iToneUtil->PrepareToPlayTone(iFrequency,iDuration); }
void CBeep::Play() { if (iState!=EBeepNotPrepared) { if (iState==EBeepPlaying) { iToneUtil->CancelPlay(); iState=EBeepPrepared; } } iToneUtil->Play(); iState=EBeepPlaying; }
void CBeep::MatoPrepareComplete(TInt aError) { if (aError==KErrNone) iState=EBeepPrepared; }
void CBeep::MatoPlayComplete(TInt aError) { iState=EBeepPrepared; }
|
|
|