79 lines
2.5 KiB
C++
79 lines
2.5 KiB
C++
#ifndef _CDCT_H_
|
|
#define _CDCT_H_
|
|
#include "DEFINES.H"
|
|
|
|
#include <windows.h>
|
|
#include <math.h>
|
|
|
|
//#include "SoundSettings.h"
|
|
|
|
// ATTENTION : Lien entre taille de matrice DCT et Frequence d'échantillonage pour SND_OPTION_DCT_COMPRESS_FLOAT
|
|
// Car SND_OPTION_DCT_COMPRESS_FLOAT peut lancer la gaussienne qui utilise SND_DCT_SIZE_SAMPLE
|
|
|
|
#define SND_DCT_SIZE_MATRIX_POWER 10//7
|
|
#define SND_DCT_SIZE_MATRIX_COEFS (1<<SND_DCT_SIZE_MATRIX_POWER)
|
|
|
|
#define SND_DCT_NB_FREQ (SND_DCT_SIZE_MATRIX_COEFS) // Nombre total de Fréquences utilisées
|
|
#define SND_DCT_SIZE_MATRIX (SND_DCT_SIZE_MATRIX_COEFS * SND_DCT_SIZE_MATRIX_COEFS)
|
|
|
|
|
|
class CDct
|
|
{
|
|
UINT m_uNbFreq;
|
|
UINT m_uSampleSize;
|
|
UINT m_uMatrixSize;
|
|
|
|
float m_fAlpha1;
|
|
float m_fAlpha2;
|
|
|
|
float m_pfCoeffs [ SND_DCT_SIZE_MATRIX_COEFS ];
|
|
float m_pfMatrice [ SND_DCT_SIZE_MATRIX ];
|
|
float m_pfResultat [ SND_DCT_SIZE_MATRIX_COEFS ];
|
|
|
|
float m_pfEffectMatrix[ SND_DCT_SIZE_MATRIX ];
|
|
|
|
// Pour accès ou non à l'un des coefficients
|
|
bool m_bCoefficientIsAccessible;
|
|
// Pour tests et/ou affichages et/ou autres traitements ultérieurs
|
|
char SND_AVEC_COEFF1; // Indicateur et On/OFF pour tenir compte ou pas du premier coefficient dans la détermination des variables précédentes
|
|
|
|
public:
|
|
CDct ();
|
|
virtual ~CDct ();
|
|
|
|
bool Initialisation (); // Initialise les tables ( matrice & coefs )
|
|
bool Liberations ();
|
|
bool isIdentity;
|
|
bool isFullProcess;
|
|
|
|
UINT ToBufferSample (unsigned char *dstBuffer, float *srcCoefs, UINT nbElmts);
|
|
UINT FromBufferSample (float *dstCoefs, unsigned char *srcBuffer, UINT nbElmts);
|
|
void AlterSample (float *srcCoefs, UINT nbElmts, float neutralValue);
|
|
|
|
void ComputeMatrix ( float* pfMatrice, UINT uNbFreq, UINT uSampleSize ); // Calcule la matrice de la DCT avec les floats arrondis à 10-3
|
|
|
|
UINT ComputeDCT ( float* pfSource, UINT uSourceSize );
|
|
UINT ComputeInverseDCT ( float* pfDestination, UINT uDestinationSize );
|
|
|
|
UINT ToBuffer (unsigned char *dstBuffer, float *srcCoefs, UINT nbElmts);
|
|
UINT FromBuffer (float *dstCoefs, unsigned char *srcBuffer, UINT nbElmts);
|
|
void Alter (float *srcCoefs, UINT nbElmts, float neutralValue);
|
|
|
|
|
|
void EffectInit ();
|
|
void EffectEnd ();
|
|
void EffectNormalize ();
|
|
float EffectMatrixXYGet (int x, int y);
|
|
bool EffectMatrixXYSet (int x, int y, float value);
|
|
void EffectAddBase (float factor);
|
|
void EffectAddStretch (float factor);
|
|
|
|
void SetSND_AVEC_COEFF1 ( char cNewValue ) { SND_AVEC_COEFF1 = cNewValue; };
|
|
|
|
private:
|
|
// Pour le calcul de la DCT
|
|
float Alpha ( UINT uFreq );
|
|
|
|
};
|
|
|
|
#endif
|