forked from hydrogen-music/hydrogen
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Random: introduce dedicated randomization class
to more elegantly make the random number generating function of the AudioEngine available to other parts of the code as well. It looks quite empty but will likely be filled with life at some future point in time when I have time to look at hydrogen-music#627 again
- Loading branch information
1 parent
24a59da
commit 0d6bb3e
Showing
4 changed files
with
92 additions
and
26 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
/* | ||
* Hydrogen | ||
* Copyright(c) 2008-2021 The hydrogen development team [[email protected]] | ||
* | ||
* http://www.hydrogen-music.org | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation; either version 2 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY, without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program. If not, see https://www.gnu.org/licenses | ||
* | ||
*/ | ||
|
||
#include <core/Helpers/Random.h> | ||
|
||
namespace H2Core { | ||
|
||
float Random::getGaussian( float fStandardDeviation ) { | ||
// gaussian distribution -- dimss | ||
float x1, x2, w; | ||
do { | ||
x1 = 2.0 * ( ( ( float ) rand() ) / static_cast<float>(RAND_MAX) ) - 1.0; | ||
x2 = 2.0 * ( ( ( float ) rand() ) / static_cast<float>(RAND_MAX) ) - 1.0; | ||
w = x1 * x1 + x2 * x2; | ||
} while ( w >= 1.0 ); | ||
|
||
w = sqrtf( ( -2.0 * logf( w ) ) / w ); | ||
return x1 * w * fStandardDeviation + 0.0; // tunable | ||
} | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
/* | ||
* Hydrogen | ||
* Copyright(c) 2008-2021 The hydrogen development team [[email protected]] | ||
* | ||
* http://www.hydrogen-music.org | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation; either version 2 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY, without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program. If not, see https://www.gnu.org/licenses | ||
* | ||
*/ | ||
|
||
#ifndef H2C_RANDOM_H | ||
#define H2C_RANDOM_H | ||
|
||
#include <core/Object.h> | ||
|
||
namespace H2Core | ||
{ | ||
|
||
/** | ||
* Container for functions generating random number. | ||
* | ||
* \ingroup docCore | ||
*/ | ||
class Random : public H2Core::Object<Random> | ||
{ | ||
H2_OBJECT(Random) | ||
public: | ||
/** | ||
* Draws an uncorrelated random value from a Gaussian distribution | ||
* of mean 0 and @a fStandardDeviation. | ||
* | ||
* @param fStandardDeviation Defines the width of the distribution used. | ||
*/ | ||
static float getGaussian( float fStandardDeviation ); | ||
}; | ||
|
||
}; | ||
|
||
#endif // H2C_RANDOM_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters