mirror of
https://github.com/cookiengineer/audacity
synced 2025-05-03 17:19:43 +02:00
68 lines
1.8 KiB
C++
68 lines
1.8 KiB
C++
/**********************************************************************
|
|
|
|
Audacity: A Digital Audio Editor
|
|
|
|
Steve Harris
|
|
Markus Meyer
|
|
|
|
**********************************************************************/
|
|
|
|
#ifndef __AUDACITY_DITHER_H__
|
|
#define __AUDACITY_DITHER_H__
|
|
|
|
#include "SampleFormat.h"
|
|
|
|
|
|
class Dither
|
|
{
|
|
public:
|
|
/// Default constructor
|
|
Dither();
|
|
|
|
/// These ditherers are currently available:
|
|
enum DitherType { none = 0, rectangle = 1, triangle = 2, shaped = 3};
|
|
|
|
/// Reset state of the dither.
|
|
void Reset();
|
|
|
|
/// Apply the actual dithering. Expects the source sample in the
|
|
/// 'source' variable, the destination sample in the 'dest' variable,
|
|
/// and hints to the formats of the samples. Even if the sample formats
|
|
/// are the same, samples are clipped, if necessary.
|
|
void Apply(DitherType ditherType,
|
|
const samplePtr source, sampleFormat sourceFormat,
|
|
samplePtr dest, sampleFormat destFormat,
|
|
unsigned int len, unsigned int stride = 1);
|
|
|
|
private:
|
|
// Dither methods
|
|
float NoDither(float sample);
|
|
float RectangleDither(float sample);
|
|
float TriangleDither(float sample);
|
|
float ShapedDither(float sample);
|
|
|
|
// Dither constants
|
|
static const int BUF_SIZE; /* = 8 */
|
|
static const int BUF_MASK; /* = 7 */
|
|
static const float SHAPED_BS[];
|
|
|
|
// Dither state
|
|
int mPhase;
|
|
float mTriangleState;
|
|
float mBuffer[8 /* = BUF_SIZE */];
|
|
};
|
|
|
|
#endif /* __AUDACITY_DITHER_H__ */
|
|
|
|
// Indentation settings for Vim and Emacs and unique identifier for Arch, a
|
|
// version control system. Please do not modify past this point.
|
|
//
|
|
// Local Variables:
|
|
// c-basic-offset: 3
|
|
// indent-tabs-mode: nil
|
|
// End:
|
|
//
|
|
// vim: et sts=3 sw=3
|
|
// arch-tag: 0dabf170-119a-4897-afee-d6fe1ac1a8d6
|
|
|