audiostubs/devsoundextensions_stubs/mmfdevsoundadaptation_stub/src/ToneGenerator.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/audiostubs/devsoundextensions_stubs/mmfdevsoundadaptation_stub/src/ToneGenerator.h Thu Jan 14 07:14:53 2010 +0200
@@ -0,0 +1,438 @@
+/*
+* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Audio Stubs -
+*
+*/
+
+
+
+#ifndef TONEGENERATOR_H
+#define TONEGENERATOR_H
+
+// INCLUDES
+#include <e32base.h>
+
+// CONSTANTS
+const TInt KMaxSineTable = 256;
+const TUint KToneBufferSize = 8192;
+// one second in microseconds
+const TInt KOneMillionMicroSeconds = 1000000;
+const TInt KMaxSequenceStack = 6;
+const TInt KBufferLength = 0x1000;
+
+// CLASS DECLARATION
+
+/**
+* Utility class used by DevSound Adaptation to generage PCM data for playing
+* back tone on WINSCW Reference Implementation..
+*
+* @lib MmfDevSoundAdaptation.lib
+* @since Series 60 3.0
+*/
+class TSineGen
+ {
+ public:
+
+ /**
+ * Sets frequency and amplitude.
+ * @since Series 60 3.0
+ * @param TInt aFrequency Frequency to generate PCM data.
+ * @param TInt aAmplitude Amplitude to generate PCM data.
+ * @return void
+ */
+ void SetFrequency(TInt aFrequency,TInt aAmplitude);
+
+ /**
+ * Returns the next sample.
+ * @since Series 60 3.0
+ * @return TInt Sample.
+ */
+ TInt NextSample();
+
+ private:
+
+ TUint iPosition;
+ TUint iStep;
+ TInt iAmplitude;
+ static const TInt16 SineTable[KMaxSineTable];
+ static const TInt16 IncTable[KMaxSineTable];
+ };
+
+/**
+* Utility class used by DevSound Adaptation to generage PCM data for playing
+* back tone on WINSCW Reference Implementation..
+*
+* @lib MmfDevSoundAdaptation.lib
+* @since Series 60 3.0
+*/
+class TSineWave
+ {
+ public:
+
+ /**
+ * Generate Sine wave representing tone.
+ * @since Series 60 3.0
+ * @param TInt16* aDest Destination
+ * @param TInt aCount Count
+ * @return void
+ */
+ void Generate(TInt16* aDest,TInt aCount);
+
+ /**
+ * Set frequency amplitude.
+ * @since Series 60 3.0
+ * @param TInt aFrequency Frequency to generate PCM data.
+ * @param TInt aAmplitude Amplitude to generate PCM data.
+ * @return void
+ */
+ void SetFrequency(TInt aFrequency,TInt aAmplitude);
+
+ /**
+ * Set frequency amplitude.
+ * @since Series 60 3.0
+ * @param TInt aFrequency1 Frequency to generate PCM data.
+ * @param TInt aAmplitude1 Amplitude to generate PCM data.
+ * @param TInt aFrequency2 Frequency to generate PCM data.
+ * @param TInt aAmplitude2 Amplitude to generate PCM data.
+ * @return void
+ */
+ void SetFrequency(TInt aFrequency1,TInt aAmplitude1,TInt aFrequency2,TInt aAmplitude2);
+
+ private:
+ TSineGen iGen1;
+ TSineGen iGen2;
+ };
+
+
+/**
+* Tone synthesis interface
+* Defines the abstract interface for tone synthesis
+* Capable of filling buffers with audio data
+*
+* @lib MmfDevSoundAdaptation.lib
+* @since Series 60 3.0
+*/
+class MMdaToneSynthesis
+ {
+ public:
+
+ /**
+ * Allocate necessary resources for this kind of synthesis
+ * @since Series 60 3.0
+ * @param TInt aRate Sampling rate.
+ * @param TInt aChannels Mono/Stereo.
+ * @param TInt aRepeats Tone repeats.
+ * @param TInt aSilence Silence duration between repetation.
+ * @param TInt aRampUp Volume ramping duration.
+ * @return void
+ */
+ virtual void Configure(TInt aRate,
+ TInt aChannels,
+ TInt aRepeats,
+ TInt aSilence,
+ TInt aRampUp)=0;
+
+ /**
+ * Reset generator
+ * @since Series 60 3.0
+ * @return void
+ */
+ virtual void Reset()=0;
+
+ /**
+ * Fill supplied buffer with next block of 16bit PCM audio data
+ * @since Series 60 3.0
+ * @param TDes8& aBuffer A descriptor reference to buffer where data need
+ * to be filled.
+ * @return KErrNone if successfull, else corresponding error code
+ */
+ virtual TInt FillBuffer(TDes8& aBuffer)=0;
+ };
+
+
+/**
+* Tone generator base class
+*
+* @lib MmfDevSoundAdaptation.lib
+* @since Series 60 3.0
+*/
+class TMdaToneGenerator : public MMdaToneSynthesis
+ {
+ public:
+
+ /**
+ * Configures Tone generator.
+ * @since Series 60 3.0
+ * @param TInt aRate Sampling rate.
+ * @param TInt aChannels Mono/Stereo.
+ * @param TInt aRepeats Tone repeats.
+ * @param TInt aSilence Silence duration between repetation.
+ * @param TInt aRampUp Volume ramping duration.
+ * @return void
+ */
+ virtual void Configure(TInt aRate,
+ TInt aChannels,
+ TInt aRepeats,
+ TInt aSilence,
+ TInt aRampUp);
+
+ /**
+ * Fill supplied buffer with next block of 16bit PCM audio data
+ * @since Series 60 3.0
+ * @param TDes8& aBuffer A descriptor reference to buffer where data need
+ * to be filled.
+ * @return KErrNone if successfull, else corresponding error code
+ */
+ virtual TInt FillBuffer(TDes8& aBuffer);
+
+ protected:
+
+ /**
+ * Gets the next tone buffer
+ * @since Series 60 3.0
+ * @return KErrNone if successfull, else corresponding error code
+ */
+ virtual TInt GetNextTone()=0;
+
+ /**
+ * Converts duration to PCM samples.
+ * @since Series 60 3.0
+ * @param const TTimeIntervalMicroSeconds& aDuration Duration.
+ * @return KErrNone if successfull, else corresponding error code
+ */
+ TInt DurationToSamples(const TTimeIntervalMicroSeconds& aDuration);
+
+ protected:
+ TSineWave iSineWave;
+ TInt iRate;
+ TInt iChannels;
+ TInt iSamplesLeft;
+ TInt iTrailingSilence;
+ TBool iRampUp;
+ TBool iRampDown;
+ TInt iRepeats;
+ TInt iSilenceBetweenRepeats;
+ TBool iAfterRepeatSilence;
+ TInt iRampUpCount;
+ TInt iRampUpLeft;
+ };
+
+
+/**
+* Simple tone synthesis
+*
+* @lib MmfDevSoundAdaptation.lib
+* @since Series 60 3.0
+*/
+class TMdaSimpleToneGenerator : public TMdaToneGenerator
+ {
+ public:
+
+ /**
+ * Sets frequency and duration for generating PCM data.
+ * @since Series 60 3.0
+ * @param TInt aFrequency Frequency of tone to be generated.
+ * @param const TTimeIntervalMicroSeconds& aDuration Duration of tone to
+ * be generated.
+ * @return void
+ */
+ void SetFrequencyAndDuration(TInt aFrequency,
+ const TTimeIntervalMicroSeconds& aDuration);
+
+ /**
+ * Reset generator
+ * @since Series 60 3.0
+ * @return void
+ */
+ virtual void Reset();
+
+ /**
+ * Gets the next tone buffer
+ * @since Series 60 3.0
+ * @return KErrNone if successfull, else corresponding error code
+ */
+ virtual TInt GetNextTone();
+
+ private:
+ TTimeIntervalMicroSeconds iDuration;
+ TInt iFrequency;
+ TBool iPlayed;
+ };
+
+/**
+* Dual tone synthesis
+* Generates a tone consisting of two sine waves of different
+* frequencies summed together.
+*
+* @lib MmfDevSoundAdaptation.lib
+* @since Series 60 3.0
+*/
+class TMdaDualToneGenerator : public TMdaToneGenerator
+ {
+ public:
+
+ /**
+ * ?member_description.
+ * @since Series 60 3.0
+ * @param ?arg1
+ */
+ void SetFrequencyAndDuration(TInt aFrequencyOne,
+ TInt aFrequencyTwo,
+ const TTimeIntervalMicroSeconds& aDuration);
+
+ /**
+ * Reset generator
+ * @since Series 60 3.0
+ * @return void
+ */
+ virtual void Reset();
+
+ /**
+ * Gets the next tone buffer
+ * @since Series 60 3.0
+ * @return KErrNone if successfull, else corresponding error code
+ */
+ virtual TInt GetNextTone();
+
+ private:
+ TTimeIntervalMicroSeconds iDuration;
+ TInt iFrequencyOne;
+ TInt iFrequencyTwo;
+ TBool iPlayed;
+ };
+
+/**
+* DTMF tone synthesis
+* ?other_description_lines
+*
+* @lib MmfDevSoundAdaptation.lib
+* @since Series 60 3.0
+*/
+class TMdaDTMFGenerator : public TMdaToneGenerator
+ {
+ public:
+
+ /**
+ * Reset generator
+ * @since Series 60 3.0
+ * @return void
+ */
+ virtual void Reset();
+
+ /**
+ * ?member_description.
+ * @since Series 60 3.0
+ * @param ?arg1
+ */
+ void SetToneDurations( const TTimeIntervalMicroSeconds32 aOn,
+ const TTimeIntervalMicroSeconds32 aOff,
+ const TTimeIntervalMicroSeconds32 aPause);
+
+ /**
+ * ?member_description.
+ * @since Series 60 3.0
+ * @param ?arg1
+ */
+ void SetString(const TDesC& aDTMFString);
+
+ private:
+
+ /**
+ * Gets the next tone buffer
+ * @since Series 60 3.0
+ * @return KErrNone if successfull, else corresponding error code
+ */
+ virtual TInt GetNextTone();
+
+ private:
+ const TDesC* iDTMFString;
+ TTimeIntervalMicroSeconds32 iOn;
+ TTimeIntervalMicroSeconds32 iOff;
+ TTimeIntervalMicroSeconds32 iPause;
+ TInt iOnSamples;
+ TInt iOffSamples;
+ TInt iPauseSamples;
+ TInt iChar;
+ TBool iPlayToneOff;
+ };
+
+/**
+* Tone sequence synthesis
+* ?other_description_lines
+*
+* @lib MmfDevSoundAdaptation.lib
+* @since Series 60 3.0
+*/
+class TMdaSequenceGenerator : public TMdaToneGenerator
+ {
+ public:
+
+ /**
+ * Reset generator
+ * @since Series 60 3.0
+ * @return void
+ */
+ virtual void Reset();
+
+ /**
+ * ?member_description.
+ * @since Series 60 3.0
+ * @param ?arg1
+ */
+ void SetSequenceData(const TDesC8& aSequenceData);
+
+ private:
+
+ /**
+ * Gets the next tone buffer
+ * @since Series 60 3.0
+ * @return KErrNone if successfull, else corresponding error code
+ */
+ virtual TInt GetNextTone();
+
+ private:
+ const TDesC8* iSequenceData;
+ const TInt16* iInstructionPtr;
+ const TInt16* iLastInstruction;
+ TInt iStack[KMaxSequenceStack];
+ TInt iStackIndex;
+ };
+
+
+/**
+* Public Media Server includes
+* ?other_description_lines
+*
+* @lib MmfDevSoundAdaptation.lib
+* @since Series 60 3.0
+*/
+class TMdaPtr8 : public TPtr8 //needed for this WINS Impl of Tone Gen
+ {
+ public:
+ TMdaPtr8()
+ : TPtr8(0,0,0) {};
+ inline void Set(const TDes8& aDes)
+ { TPtr8::Set((TUint8*)(aDes.Ptr()),aDes.Length(),aDes.MaxLength()); };
+ inline void SetLengthOnly(const TDes8& aDes)
+ { TPtr8::Set((TUint8*)(aDes.Ptr()),aDes.Length(),aDes.Length()); };
+ inline void Set(const TPtrC8& aDes)
+ { TPtr8::Set((TUint8*)(aDes.Ptr()),aDes.Length(),aDes.Length()); };
+ inline void Shift(TInt aOffset)
+ { SetLength(Length()-aOffset); iMaxLength-=aOffset; iPtr+=aOffset; };
+ };
+
+#endif // TONEGENERATOR_H
+
+// End of File
+