You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.4 KiB
C
48 lines
1.4 KiB
C
5 years ago
|
/*
|
||
|
patest_pink.c
|
||
|
|
||
|
generate Pink Noise using Gardner method.
|
||
|
Optimization suggested by James McCartney uses a tree
|
||
|
to select which random value to replace.
|
||
|
|
||
|
x x x x x x x x x x x x x x x x
|
||
|
x x x x x x x x
|
||
|
x x x x
|
||
|
x x
|
||
|
x
|
||
|
|
||
|
Tree is generated by counting trailing zeros in an increasing index.
|
||
|
When the index is zero, no random number is selected.
|
||
|
|
||
|
This program uses the Portable Audio library which is under development.
|
||
|
For more information see: http://www.audiomulch.com/portaudio/
|
||
|
|
||
|
Author: Phil Burk, http://www.softsynth.com
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
Copyleft 1999 Phil Burk - No rights reserved.
|
||
|
*/
|
||
|
|
||
|
|
||
|
#ifndef PINK_NOISE_H
|
||
|
#define PINK_NOISE_H
|
||
|
|
||
|
#define PINK_MAX_RANDOM_ROWS (30)
|
||
|
#define PINK_RANDOM_BITS (24)
|
||
|
#define PINK_RANDOM_SHIFT ((sizeof(long)*8)-PINK_RANDOM_BITS)
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
long pink_rows[PINK_MAX_RANDOM_ROWS];
|
||
|
long pink_running_sum; /* Used to optimize summing of generators. */
|
||
|
int pink_index; /* Incremented each sample. */
|
||
|
int pink_index_mask; /* Index wrapped by ANDing with this mask. */
|
||
|
float pink_scalar; /* Used to scale within range of -1.0 to +1.0 */
|
||
|
} pink_noise_t;
|
||
|
|
||
|
void initialize_pink_noise( pink_noise_t *pink, int num_rows );
|
||
|
float generate_pink_noise_sample( pink_noise_t *pink );
|
||
|
|
||
|
#endif /* PINK_NOISE_H */
|