Subversion Repositories DIN Is Noise

Rev

Rev 2097 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
* noiser.h
* DIN Is Noise is copyright (c) 2006-2025 Jagannathan Sampath
* DIN Is Noise is released under GNU Public License 2.0
* For more information, please visit https://dinisnoise.org/
*/


#ifndef __noiser
#define __noiser

#include "solver.h"
#include "random.h"
#include "beat2value.h"
#include "listeners.h"
#include <fstream>

struct noiser {

  static multi_curve interp;
  static curve_editor ed;
  static noise_interp_lis lis;

  struct value_dat {
    float cur;
    float next;
    float delta;
    value_dat () { cur = next = delta = 0.0f;}
  } value;

  //int setcur, setnext, nextoff;

  float spread;
  rnd<float> random_value;

  struct samples_dat {
    int cur;
    int due;
    int duei;
    float next;
    float err;
    float derr;
    samples_dat () {
      cur = due = duei = 0;
      next = err = derr = 0.0f;
    }
  } samples;


  struct alpha_dat {
    float val;
    float warp;
    float delta;
    alpha_dat () {val = warp = delta = 0.0f;}
  } alpha;
  void calc_delta_alpha ();

  solver warp;

  float last_vol;

  noiser ();
  void operator() (float* L, float* R, int n, float vol);
  void operator() (float* L, float* R, int n, float* vola);
  void set_samples (float s);
  void set_spread (float s);
  void set_value (float v);

};

std::ofstream& operator<< (std::ofstream& o, noiser& n);

#endif