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

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