diff options
Diffstat (limited to 'alsa-utils/speaker-test/pink.c')
-rw-r--r-- | alsa-utils/speaker-test/pink.c | 96 |
1 files changed, 0 insertions, 96 deletions
diff --git a/alsa-utils/speaker-test/pink.c b/alsa-utils/speaker-test/pink.c deleted file mode 100644 index ef30755..0000000 --- a/alsa-utils/speaker-test/pink.c +++ /dev/null @@ -1,96 +0,0 @@ -/* - 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. -*/ - -#include <stdio.h> -#include <math.h> -#include "pink.h" - -/************************************************************/ -/* Calculate pseudo-random 32 bit number based on linear congruential method. */ -static unsigned long generate_random_number( void ) -{ - static unsigned long rand_seed = 22222; /* Change this for different random sequences. */ - rand_seed = (rand_seed * 196314165) + 907633515; - return rand_seed; -} - -/* Setup PinkNoise structure for N rows of generators. */ -void initialize_pink_noise( pink_noise_t *pink, int num_rows ) -{ - int i; - long pmax; - pink->pink_index = 0; - pink->pink_index_mask = (1<<num_rows) - 1; -/* Calculate maximum possible signed random value. Extra 1 for white noise always added. */ - pmax = (num_rows + 1) * (1<<(PINK_RANDOM_BITS-1)); - pink->pink_scalar = 1.0f / pmax; -/* Initialize rows. */ - for( i=0; i<num_rows; i++ ) pink->pink_rows[i] = 0; - pink->pink_running_sum = 0; -} - -/* generate Pink noise values between -1.0 and +1.0 */ -float generate_pink_noise_sample( pink_noise_t *pink ) -{ - long new_random; - long sum; - float output; - -/* Increment and mask index. */ - pink->pink_index = (pink->pink_index + 1) & pink->pink_index_mask; - -/* If index is zero, don't update any random values. */ - if( pink->pink_index != 0 ) - { - /* Determine how many trailing zeros in PinkIndex. */ - /* This algorithm will hang if n==0 so test first. */ - int num_zeros = 0; - int n = pink->pink_index; - while( (n & 1) == 0 ) - { - n = n >> 1; - num_zeros++; - } - - /* Replace the indexed ROWS random value. - * Subtract and add back to Running_sum instead of adding all the random - * values together. Only one changes each time. - */ - pink->pink_running_sum -= pink->pink_rows[num_zeros]; - new_random = ((long)generate_random_number()) >> PINK_RANDOM_SHIFT; - pink->pink_running_sum += new_random; - pink->pink_rows[num_zeros] = new_random; - } - -/* Add extra white noise value. */ - new_random = ((long)generate_random_number()) >> PINK_RANDOM_SHIFT; - sum = pink->pink_running_sum + new_random; - -/* Scale to range of -1.0 to 0.9999. */ - output = pink->pink_scalar * sum; - - return output; -} |