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

/*
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 */