📄 wavegen_engine.h
字号:
//
// wavegen_engine.h
//
// Copyright (C) 2002 Nokia Corporation. All rights reserved.
//
/////////////////////////////////////////////////////////////////////////////
#if !defined(__WAVEGEN_ENGINE_H__)
#define __WAVEGEN_ENGINE_H__
#if !defined(__MDA_COMMON_AUDIO_H__)
#include <mda\common\audio.h>
#endif
#if !defined(__MDA_CLIENT_UTILITY_H__)
#include <Mda\Client\Utility.h>
#endif
#if !defined(__MDA_COMMON_RESOURCE_H__)
#include <Mda\Common\Resource.h>
#endif
#if !defined(__MDAAUDIOOUTPUTSTREAM_H__)
#include <MdaAudioOutputStream.h>
#endif
// CONSTANTS
// waveform generator buffer size
const TInt KBufferSize = 8192;
// slider max values
const TInt KVolSliderLength = 10;
const TInt KFreqSliderLength = 10;
const TInt KInitialWaveform = 0;
const TInt KInitialVolume = 1;
const TInt KInitialFreq = 5;
// max pulse amplitude - used in waveform generation
const TInt KPulseAmplitude = 26213;
// FORWARD DECLARATIONS
class CWaveGenerator;
class CEikonEnv;
//
// CStreamAudioEngine - audio ouput stream engine, uses CMdaAudioOutputStream
// and implements the callback functions from MMdaAudioOutputStreamCallback.
//
class CStreamAudioEngine : public CBase, public MMdaAudioOutputStreamCallback
{
public:
enum TEngineStatus
{
EEngineNotReady,
EEngineReady,
EEnginePlaying
};
static CStreamAudioEngine* NewL();
~CStreamAudioEngine();
void PlayL();
void StopL();
// switches between two buffers
TBool SwitchBuffer(TBool aBufGenerator);
// from MMdaAudioOutputStreamCallback
virtual void MaoscOpenComplete(TInt aError);
virtual void MaoscBufferCopied(TInt aError, const TDesC8& aBuffer);
virtual void MaoscPlayComplete(TInt aError);
// inline gets and sets
inline TInt Volume();
inline TInt Frequency();
inline TInt Waveform();
inline void SetFrequency(TInt aFreq);
inline void SetWaveform(TInt aForm);
inline TBool StreamReady();
void SetVolume(TInt aVol);
protected:
// protected contructor
CStreamAudioEngine();
// 2nd phase constructor
void ConstructL();
// read the pcm sound data from a file to buffer
void LoadFileL();
// displays error messages
void ShowErrorMsg(TInt aResourceBuf, TInt aError);
private:
TInt iForm; // waveform type
TInt iFreq; // frequency
TInt iVolume; // volume
TInt iVolStep;
TInt iFileSize; // size of the pcm sound file (and buffer)
TBool iFileOK; // indicates if file has been successfully read to buffer
TEngineStatus iStatus; // engine status
TBool iPlayFile; // which buffer is currently in use
TPtr8 iDescBuf; // a descriptor that encapsulates the two buffers
TUint8* iGenBuffer; // buffer for generated pcm waves
TUint8* iPCMBuffer; // buffer for pcm sound data (from a file)
CMdaAudioOutputStream* iStream;
TMdaAudioDataSettings iSettings;
CWaveGenerator* iWaveGen;
CEikonEnv* iEnv;
};
//
// CWaveGenerator - the wave generator class.
//
class CWaveGenerator : public CBase
{
public:
enum EWaveform
{
ERandom = 0,
ESquare
};
CWaveGenerator();
~CWaveGenerator();
void Generate(EWaveform aForm, TInt aFreq, TDes8& aDescBuf);
private:
void Random(TDes8& aDescBuf);
void Square(TInt aFreq, TDes8& aDescBuf);
inline void WriteToBuf(TDes8& aDescBuf, TInt aOffset, TInt aValue);
private:
TInt iPhase;
TInt iSign;
};
// INLINES
inline TInt CStreamAudioEngine::Volume() { return iVolume; }
inline TInt CStreamAudioEngine::Frequency() { return iFreq; }
inline TInt CStreamAudioEngine::Waveform() { return iForm; }
inline void CStreamAudioEngine::SetFrequency(TInt aFreq) { iFreq = aFreq; }
inline void CStreamAudioEngine::SetWaveform(TInt aForm) { iForm = aForm; }
inline TBool CStreamAudioEngine::StreamReady()
{ if(iStatus == EEngineReady)
return ETrue;
return EFalse;
}
// writes 2 bytes to buffer in LSB order
inline void CWaveGenerator::WriteToBuf(TDes8& aDescBuf, TInt aOffset, TInt aValue)
{
aDescBuf[aOffset] = (TUint8)(aValue & 0x00ff);
aDescBuf[aOffset+1] = (TUint8)((aValue & 0xff00)>>8);
}
#endif
// eof
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -