Mercurial > audlegacy
view src/libSAD/noicegen.c @ 4508:246244ead30e
renamed skin.* to ui_skin.* and moved ui_skinned_widget_draw() to it
author | mf0102 <0102@gmx.at> |
---|---|
date | Tue, 22 Apr 2008 13:27:32 +0200 |
parents | b0ca963fd965 |
children | bb0638143fc8 |
line wrap: on
line source
#include <stdio.h> #include <assert.h> #include "../../config.h" #ifdef HAVE_SSE2 # define SSE2 1 #endif #ifdef HAVE_ALTIVEC # define ALTIVEC 1 #endif #define MEXP 19937 #include "SFMT.h" #include "SFMT.c" #include "noicegen.h" int triangular_dither_noise(int nbits) { // parameter nbits : the peak-to-peak amplitude desired (in bits) // use with nbits set to 2 + nber of bits to be trimmed. // (because triangular is made from two uniformly distributed processes, // it starts at 2 bits peak-to-peak amplitude) // see The Theory of Dithered Quantization by Robert Alexander Wannamaker // for complete proof of why that's optimal int v = (gen_rand32() / 2 - gen_rand32() / 2); // in ]-2^31, 2^31[ //int signe = (v>0) ? 1 : -1; int P = 1 << (32 - nbits); // the power of 2 v /= P; // now v in ]-2^(nbits-1), 2^(nbits-1) [ return v; } double triangular_dither_noise_f() { // Сonditionally assume we have 16 bits in fractional part // Please, check it thoroughly: is this assumption correct in floatin-point arithmetic? return (double) triangular_dither_noise(17) / 65536.0; } void noicegen_init_rand(uint32_t seed) { init_gen_rand(seed); }