CSL
5.2
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
Noise.h
Go to the documentation of this file.
1
//
2
// Noise.h -- Noise Unit Generators
3
// Comprising Noise superclass, and WhiteNoise, PinkNoise subclasses
4
//
5
6
#ifndef INCLUDE_Noise_H
7
#define INCLUDE_Noise_H
8
9
#include "
CSL_Core.h
"
// include the main CSL header; this includes CSL_Types.h and CGestalt.h
10
11
#define PINK_MAX_RANDOM_ROWS (30)
12
#define PINK_RANDOM_BITS (24)
13
#define PINK_RANDOM_SHIFT ((sizeof(long)*8)-PINK_RANDOM_BITS)
14
15
namespace
csl {
16
17
///
18
/// Abstract Noise class - inherits from UnitGenerator & Scalable, and provides constructors and basic pseudo-raondom methods
19
///
20
21
class
Noise
:
public
UnitGenerator
,
public
Scalable
{
22
23
public
:
24
inline
int
generateRandomNumber
();
///< returns the next pseudo-random number
25
inline
float
generateNormalizedRandomNumber
();
///< returns next pseudo-random normalised to +/- 1.0
26
27
void
setSeed
(
int
seed) {
mSeed
= seed; }
///< set the seed integer for the pseudo-random number generators
28
29
void
dump
();
///< Tell me more about what is happening
30
31
Noise
();
///< Constructors
32
Noise
(
double
ampl,
double
offset = 0.0);
33
Noise
(
int
seed,
double
ampl = 1.0,
double
offset = 0.0);
34
~Noise
() { };
///< Destructor
35
36
protected
:
37
int
mSeed
;
///< seed integer for the pseudo-random number generators
38
float
mDivisor
;
///< factor to scale ints to +/- 1.0
39
};
40
41
///
42
/// White noise -- equal power per frequency
43
///
44
45
class
WhiteNoise
:
public
Noise
{
46
47
public
:
/// Constructors
48
WhiteNoise
() :
Noise
() { };
49
WhiteNoise
(
double
ampl,
double
offset = 0.0) :
Noise
(ampl, offset) { };
50
WhiteNoise
(
int
seed,
double
ampl = 1.0,
double
offset = 0.0) :
Noise
(seed, ampl, offset) { };
51
~WhiteNoise
() { };
///< Destructor
52
53
/********* THIS FUNCTION WAS PROTECTED, BUT IT'S NEEDED TO BE PUBLIC BECAUSE
54
OTHER UGENS MIGHT CALL IT DURING A NEXT BUFFER CALL . . . *********/
55
/// the noise generator DSP function
56
void
nextBuffer
(
Buffer
& outputBuffer,
unsigned
outBufNum)
throw
(
CException
);
57
58
protected
:
59
60
};
61
62
///
63
/// Pink noise -- equal power per octave
64
///
65
66
class
PinkNoise
:
public
Noise
{
67
68
public
:
69
PinkNoise
();
///< Constructors
70
PinkNoise
(
double
ampl,
double
offset = 0.f);
71
PinkNoise
(
int
seed,
double
ampl = 1.f,
double
offset = 0.f);
72
~PinkNoise
() { };
///< Destructor
73
74
/// the monoNextBuffer method is where the DSP takes place
75
void
nextBuffer
(
Buffer
& outputBuffer,
unsigned
outBufNum)
throw
(
CException
);
76
77
sample
nextPink
();
///< returns the next pink noise sample
78
79
protected
:
80
int
mPinkRows
[
PINK_MAX_RANDOM_ROWS
];
///< Pink noise generator rows
81
int
mPinkRunningSum
;
///< Used to optimize summing of generators.
82
int
mPinkIndex
;
///< Incremented each sample.
83
int
mPinkIndexMask
;
///< Index wrapped by ANDing with this mask.
84
float
mPinkScalar
;
///< Used to scale within range of -1.0 to +1.0
85
86
void
initialize
(
int
numRows);
///< set up PinkNoise for N rows of generators
87
88
};
89
90
// inline functions have to be declared in the header file to avoid linker problems
91
92
inline
int
Noise::generateRandomNumber
() {
93
// Calculate pseudo-random 32 bit number based on linear congruential method
94
mSeed
= (
mSeed
* 196314165) + 907633515;
95
return
mSeed
;
96
97
}
98
99
inline
float
Noise::generateNormalizedRandomNumber
() {
100
// Calculate pseudo-random 32 bit number based on linear congruential method
101
mSeed
= (
mSeed
* 196314165) + 907633515;
102
return
(
float
)
mSeed
/ (float) 0x7fffffff;
// dividing by INT_MAX
103
}
104
105
106
}
// namespace csl
107
108
#endif
109
CSL
Sources
Noise.h
Generated on Thu Nov 15 2012 22:01:10 for CSL by
1.8.1.1