shithub: leaf

ref: 6c87e507028c0c63facde25ee24e6f482fe3e995
dir: /LEAF/Inc/leaf-oscillator.h/

View raw version
/*==============================================================================

    LEAFOscillator.h
    Created: 20 Jan 2017 12:00:58pm
    Author:  Michael R Mulshine

==============================================================================*/

#ifndef LEAF_OSCILLATOR_H_INCLUDED
#define LEAF_OSCILLATOR_H_INCLUDED

#ifdef __cplusplus
extern "C" {
#endif

//==============================================================================

#include "leaf-globals.h"
#include "leaf-math.h"

#include "leaf-filter.h"

//==============================================================================

/* tNeuron */
typedef enum NeuronMode
{
    NeuronNormal = 0,
    NeuronTanh,
    NeuronAaltoShaper,
    NeuronModeNil
} NeuronMode;

typedef struct _tNeuron
{
    tPoleZero f;
    
    NeuronMode mode;
    
    float voltage, current;
    float timeStep;
    
    float alpha[3];
    float beta[3];
    float rate[3];
    float V[3];
    float P[3];
    float gK, gN, gL, C;
} tNeuron;

void        tNeuron_init        (tNeuron* const);
void        tNeuron_free        (tNeuron* const);

void        tNeuron_reset       (tNeuron* const);
float       tNeuron_Tick        (tNeuron* const);
void        tNeuron_setMode     (tNeuron* const, NeuronMode mode);
void        tNeuron_setCurrent  (tNeuron* const, float current);
void        tNeuron_setK        (tNeuron* const, float K);
void        tNeuron_setL        (tNeuron* const, float L);
void        tNeuron_setN        (tNeuron* const, float N);
void        tNeuron_setC        (tNeuron* const, float C);
void        tNeuron_setV1       (tNeuron* const, float V1);
void        tNeuron_setV2       (tNeuron* const, float V2);
void        tNeuron_setV3       (tNeuron* const, float V3);
void        tNeuron_setTimeStep (tNeuron* const, float timestep);

//==============================================================================

/* tPhasor: Aliasing phasor [0.0, 1.0) */
typedef struct _tPhasor
{
    float phase;
    float inc,freq;
    
} tPhasor;

void        tPhasor_init        (tPhasor*  const);
void        tPhasor_free        (tPhasor*  const);

float       tPhasor_tick        (tPhasor*  const);
int         tPhasor_setFreq     (tPhasor*  const, float freq);

//==============================================================================

/* tCycle: Cycle/Sine waveform. Wavetable synthesis.*/
typedef struct _tCycle
{
    // Underlying phasor
    float phase;
    float inc,freq;
    
} tCycle;

void        tCycle_init         (tCycle*  const);
void        tCycle_free         (tCycle*  const);

float       tCycle_tick         (tCycle*  const);
int         tCycle_setFreq      (tCycle*  const, float freq);

//==============================================================================

/* tSawtooth: Anti-aliased Sawtooth waveform using wavetable interpolation. Wavetables constructed from sine components. */
typedef struct _tSawtooth
{
    // Underlying phasor
    float phase;
    float inc,freq;
    
} tSawtooth;

void        tSawtooth_init      (tSawtooth*  const);
void        tSawtooth_free      (tSawtooth*  const);

float       tSawtooth_tick      (tSawtooth*  const);
int         tSawtooth_setFreq   (tSawtooth*  const, float freq);

//==============================================================================

/* tTriangle: Anti-aliased Triangle waveform using wavetable interpolation. Wavetables constructed from sine components. */
typedef struct _tTriangle
{
    // Underlying phasor
    float phase;
    float inc,freq;
    
} tTriangle;

void        tTriangle_init      (tTriangle*  const);
void        tTriangle_free      (tTriangle*  const);

float       tTriangle_tick      (tTriangle*  const);
int         tTriangle_setFreq   (tTriangle*  const, float freq);

//==============================================================================

/* tSquare: Anti-aliased Square waveform using wavetable interpolation. Wavetables constructed from sine components. */
typedef struct _tSquare
{
    // Underlying phasor
    float phase;
    float inc,freq;
    
} tSquare;

void        tSquare_init        (tSquare*  const);
void        tSquare_free        (tSquare*  const);

float       tSquare_tick        (tSquare*  const);
int         tSquare_setFreq     (tSquare*  const, float freq);

//==============================================================================

/* tNoise. WhiteNoise, PinkNoise. */
typedef enum NoiseType
{
    WhiteNoise=0,
    PinkNoise,
    NoiseTypeNil,
} NoiseType;

typedef struct _tNoise
{
    NoiseType type;
    float pinkb0, pinkb1, pinkb2;
    float(*rand)();
    
} tNoise;

void        tNoise_init          (tNoise* const, NoiseType type);
void        tNoise_free          (tNoise* const);

float       tNoise_tick          (tNoise*  const);

//==============================================================================
    
#ifdef __cplusplus
}
#endif
        
#endif  // LEAF_OSCILLATOR_H_INCLUDED

//==============================================================================