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.
84 lines
1.9 KiB
84 lines
1.9 KiB
#pragma once
|
|
#ifndef DSY_GRAINLET_H
|
|
#define DSY_GRAINLET_H
|
|
|
|
#include <stdint.h>
|
|
#ifdef __cplusplus
|
|
|
|
/** @file grainlet.h */
|
|
namespace daisysp
|
|
{
|
|
/**
|
|
@brief Granular Oscillator Module.
|
|
@author Ben Sergentanis
|
|
@date Dec 2020
|
|
A phase-distorted single cycle sine * another continuously running sine, \n
|
|
the whole thing synced to a main oscillator. \n \n
|
|
Ported from pichenettes/eurorack/plaits/dsp/oscillator/grainlet_oscillator.h \n
|
|
to an independent module. \n
|
|
Original code written by Emilie Gillet in 2016. \n
|
|
*/
|
|
|
|
class GrainletOscillator
|
|
{
|
|
public:
|
|
GrainletOscillator() {}
|
|
~GrainletOscillator() {}
|
|
|
|
/** Initialize the oscillator
|
|
\param sample_rate Sample rate of audio engine
|
|
*/
|
|
void Init(float sample_rate);
|
|
|
|
/** Get the next sample */
|
|
float Process();
|
|
|
|
/** Sets the carrier frequency
|
|
\param freq Frequency in Hz
|
|
*/
|
|
void SetFreq(float freq);
|
|
|
|
/** Sets the formant frequency
|
|
\param freq Frequency in Hz
|
|
*/
|
|
void SetFormantFreq(float freq);
|
|
|
|
/** Waveshaping
|
|
\param shape Shapes differently from 0-1, 1-2, and > 2.
|
|
*/
|
|
void SetShape(float shape);
|
|
|
|
/** Sets the amount of formant to bleed through
|
|
\param bleed Works best 0-1
|
|
*/
|
|
void SetBleed(float bleed);
|
|
|
|
private:
|
|
float Sine(float phase);
|
|
|
|
float Carrier(float phase, float shape);
|
|
|
|
float Grainlet(float carrier_phase,
|
|
float formant_phase,
|
|
float shape,
|
|
float bleed);
|
|
|
|
// Oscillator state.
|
|
float carrier_phase_;
|
|
float formant_phase_;
|
|
float next_sample_;
|
|
|
|
// For interpolation of parameters.
|
|
float carrier_frequency_;
|
|
float formant_frequency_;
|
|
float carrier_shape_;
|
|
float carrier_bleed_;
|
|
|
|
float new_carrier_shape_;
|
|
float new_carrier_bleed_;
|
|
|
|
float sample_rate_;
|
|
};
|
|
} // namespace daisysp
|
|
#endif
|
|
#endif |