63 lines
1.2 KiB
C++
63 lines
1.2 KiB
C++
/*
|
|
Copyright (c) 2020 Electrosmith, Corp, Emilie Gillet
|
|
|
|
Use of this source code is governed by an MIT-style
|
|
license that can be found in the LICENSE file or at
|
|
https://opensource.org/licenses/MIT.
|
|
*/
|
|
|
|
#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
|