mirror of https://github.com/lwvmobile/mbelib
Merge pull request #12 from EdFuentetaja/master
Fixed random number generation that assumed that RAND_MAX == 2147483647.
This commit is contained in:
commit
1e343f40dd
37
mbelib.c
37
mbelib.c
|
|
@ -22,6 +22,25 @@
|
||||||
#include "mbelib.h"
|
#include "mbelib.h"
|
||||||
#include "mbelib_const.h"
|
#include "mbelib_const.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \return A pseudo-random float between [0.0, 1.0].
|
||||||
|
* See http://www.azillionmonkeys.com/qed/random.html for further improvements
|
||||||
|
*/
|
||||||
|
static float
|
||||||
|
mbe_rand()
|
||||||
|
{
|
||||||
|
return ((float) rand () / (float) RAND_MAX);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \return A pseudo-random float between [-pi, +pi].
|
||||||
|
*/
|
||||||
|
static float
|
||||||
|
mbe_rand_phase()
|
||||||
|
{
|
||||||
|
return mbe_rand() * (((float)M_PI) * 2.0F) - ((float)M_PI);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
mbe_printVersion (char *str)
|
mbe_printVersion (char *str)
|
||||||
{
|
{
|
||||||
|
|
@ -291,7 +310,7 @@ mbe_synthesizeSpeechf (float *aout_buf, mbe_parms * cur_mp, mbe_parms * prev_mp,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cur_mp->PHIl[l] = cur_mp->PSIl[l] + ((numUv * ((((float) random () / (float) 2147483647) * M_PI * (float) 2) - M_PI)) / cur_mp->L);
|
cur_mp->PHIl[l] = cur_mp->PSIl[l] + ((numUv * mbe_rand_phase()) / cur_mp->L);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -305,7 +324,7 @@ mbe_synthesizeSpeechf (float *aout_buf, mbe_parms * cur_mp, mbe_parms * prev_mp,
|
||||||
// init random phase
|
// init random phase
|
||||||
for (i = 0; i < uvquality; i++)
|
for (i = 0; i < uvquality; i++)
|
||||||
{
|
{
|
||||||
rphase[i] = ((((float) random () / (float) 2147483647) * M_PI * (float) 2) - M_PI);
|
rphase[i] = mbe_rand_phase();
|
||||||
}
|
}
|
||||||
for (n = 0; n < N; n++)
|
for (n = 0; n < N; n++)
|
||||||
{
|
{
|
||||||
|
|
@ -319,7 +338,7 @@ mbe_synthesizeSpeechf (float *aout_buf, mbe_parms * cur_mp, mbe_parms * prev_mp,
|
||||||
C3 = C3 + cosf ((cw0 * (float) n * ((float) l + ((float) i * uvstep) - uvoffset)) + rphase[i]);
|
C3 = C3 + cosf ((cw0 * (float) n * ((float) l + ((float) i * uvstep) - uvoffset)) + rphase[i]);
|
||||||
if (cw0l > uvthreshold)
|
if (cw0l > uvthreshold)
|
||||||
{
|
{
|
||||||
C3 = C3 + ((cw0l - uvthreshold) * uvrand * ((float) random () / (float) 2147483647));
|
C3 = C3 + ((cw0l - uvthreshold) * uvrand * mbe_rand());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
C3 = C3 * uvsine * Ws[n] * cur_mp->Ml[l] * qfactor;
|
C3 = C3 * uvsine * Ws[n] * cur_mp->Ml[l] * qfactor;
|
||||||
|
|
@ -333,7 +352,7 @@ mbe_synthesizeSpeechf (float *aout_buf, mbe_parms * cur_mp, mbe_parms * prev_mp,
|
||||||
// init random phase
|
// init random phase
|
||||||
for (i = 0; i < uvquality; i++)
|
for (i = 0; i < uvquality; i++)
|
||||||
{
|
{
|
||||||
rphase[i] = ((((float) random () / (float) 2147483647) * M_PI * (float) 2) - M_PI);
|
rphase[i] = mbe_rand_phase();
|
||||||
}
|
}
|
||||||
for (n = 0; n < N; n++)
|
for (n = 0; n < N; n++)
|
||||||
{
|
{
|
||||||
|
|
@ -347,7 +366,7 @@ mbe_synthesizeSpeechf (float *aout_buf, mbe_parms * cur_mp, mbe_parms * prev_mp,
|
||||||
C3 = C3 + cosf ((pw0 * (float) n * ((float) l + ((float) i * uvstep) - uvoffset)) + rphase[i]);
|
C3 = C3 + cosf ((pw0 * (float) n * ((float) l + ((float) i * uvstep) - uvoffset)) + rphase[i]);
|
||||||
if (pw0l > uvthreshold)
|
if (pw0l > uvthreshold)
|
||||||
{
|
{
|
||||||
C3 = C3 + ((pw0l - uvthreshold) * uvrand * ((float) random () / (float) 2147483647));
|
C3 = C3 + ((pw0l - uvthreshold) * uvrand * mbe_rand());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
C3 = C3 * uvsine * Ws[n + N] * prev_mp->Ml[l] * qfactor;
|
C3 = C3 * uvsine * Ws[n + N] * prev_mp->Ml[l] * qfactor;
|
||||||
|
|
@ -398,12 +417,12 @@ mbe_synthesizeSpeechf (float *aout_buf, mbe_parms * cur_mp, mbe_parms * prev_mp,
|
||||||
// init random phase
|
// init random phase
|
||||||
for (i = 0; i < uvquality; i++)
|
for (i = 0; i < uvquality; i++)
|
||||||
{
|
{
|
||||||
rphase[i] = ((((float) random () / (float) 2147483647) * M_PI * (float) 2) - M_PI);
|
rphase[i] = mbe_rand_phase();
|
||||||
}
|
}
|
||||||
// init random phase
|
// init random phase
|
||||||
for (i = 0; i < uvquality; i++)
|
for (i = 0; i < uvquality; i++)
|
||||||
{
|
{
|
||||||
rphase2[i] = ((((float) random () / (float) 2147483647) * M_PI * (float) 2) - M_PI);
|
rphase2[i] = mbe_rand_phase();
|
||||||
}
|
}
|
||||||
for (n = 0; n < N; n++)
|
for (n = 0; n < N; n++)
|
||||||
{
|
{
|
||||||
|
|
@ -414,7 +433,7 @@ mbe_synthesizeSpeechf (float *aout_buf, mbe_parms * cur_mp, mbe_parms * prev_mp,
|
||||||
C3 = C3 + cosf ((pw0 * (float) n * ((float) l + ((float) i * uvstep) - uvoffset)) + rphase[i]);
|
C3 = C3 + cosf ((pw0 * (float) n * ((float) l + ((float) i * uvstep) - uvoffset)) + rphase[i]);
|
||||||
if (pw0l > uvthreshold)
|
if (pw0l > uvthreshold)
|
||||||
{
|
{
|
||||||
C3 = C3 + ((pw0l - uvthreshold) * uvrand * ((float) random () / (float) 2147483647));
|
C3 = C3 + ((pw0l - uvthreshold) * uvrand * mbe_rand());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
C3 = C3 * uvsine * Ws[n + N] * prev_mp->Ml[l] * qfactor;
|
C3 = C3 * uvsine * Ws[n + N] * prev_mp->Ml[l] * qfactor;
|
||||||
|
|
@ -425,7 +444,7 @@ mbe_synthesizeSpeechf (float *aout_buf, mbe_parms * cur_mp, mbe_parms * prev_mp,
|
||||||
C4 = C4 + cosf ((cw0 * (float) n * ((float) l + ((float) i * uvstep) - uvoffset)) + rphase2[i]);
|
C4 = C4 + cosf ((cw0 * (float) n * ((float) l + ((float) i * uvstep) - uvoffset)) + rphase2[i]);
|
||||||
if (cw0l > uvthreshold)
|
if (cw0l > uvthreshold)
|
||||||
{
|
{
|
||||||
C4 = C4 + ((cw0l - uvthreshold) * uvrand * ((float) random () / (float) 2147483647));
|
C4 = C4 + ((cw0l - uvthreshold) * uvrand * mbe_rand());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
C4 = C4 * uvsine * Ws[n] * cur_mp->Ml[l] * qfactor;
|
C4 = C4 * uvsine * Ws[n] * cur_mp->Ml[l] * qfactor;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue