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.
54 lines
1.0 KiB
54 lines
1.0 KiB
#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
|
|
|