You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.0 KiB
55 lines
1.0 KiB
4 years ago
|
#pragma once
|
||
|
#ifndef DSY_DUST_H
|
||
|
#define DSY_DUST_H
|
||
|
#include <cstdlib>
|
||
|
#include <random>
|
||
|
#include "Utility/dsp.h"
|
||
|
#ifdef __cplusplus
|
||
|
|
||
|
/** @file dust.h */
|
||
|
|
||
|
namespace daisysp
|
||
|
{
|
||
|
/**
|
||
|
@brief Dust Module
|
||
|
@author Ported by Ben Sergentanis
|
||
|
@date Jan 2021
|
||
|
Randomly Clocked Samples \n \n
|
||
|
Ported from pichenettes/eurorack/plaits/dsp/noise/dust.h \n
|
||
|
to an independent module. \n
|
||
|
Original code written by Emilie Gillet in 2016. \n
|
||
|
|
||
|
*/
|
||
|
class Dust
|
||
|
{
|
||
|
public:
|
||
|
Dust() {}
|
||
|
~Dust() {}
|
||
|
|
||
|
void Init() { SetDensity(.5f); }
|
||
|
|
||
|
float Process()
|
||
|
{
|
||
|
float inv_density = 1.0f / density_;
|
||
|
float u = rand() * kRandFrac;
|
||
|
if(u < density_)
|
||
|
{
|
||
|
return u * inv_density;
|
||
|
}
|
||
|
return 0.0f;
|
||
|
}
|
||
|
|
||
|
void SetDensity(float density)
|
||
|
{
|
||
|
density_ = fclamp(density, 0.f, 1.f);
|
||
|
density_ = density_ * .3f;
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
float density_;
|
||
|
static constexpr float kRandFrac = 1.f / (float)RAND_MAX;
|
||
|
};
|
||
|
} // namespace daisysp
|
||
|
#endif
|
||
|
#endif
|