Subversion Repositories DIN Is Noise

Rev

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

/*
* binaural_drone.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 __BINAURAL_DRONE__
#define __BINAURAL_DRONE__

#include "multi_curve.h"
#include "play.h"
#include <string>

#define BD_NAME "%0.3fHz + %0.3fHz = %0.3fHz @ %0.2f%% vol"

struct binaural_drone {

  std::string name;
  void make_name ();
  void make_name (float stepl, float stepr); // for fading in/out step > hz > name
  void make_name (float v); // for fading in/out vol > name

  // L and R hz
  float l_hz, r_hz;
  float l_step, r_step;
  float l_step_prev, r_step_prev;

  enum {SEPARATION = 2};
  float sep;
  void set_sep (float s);

  // hz justification
  enum {LEFT=0, RIGHT, CENTER};
  int just;
  void set_just (int j);

  // volume
  enum {VOLUME = 3};
  float vol;
  float vol_prev;

  solver soll, solr;
  play playl, playr;

  enum {INVALID = -1};
  binaural_drone (multi_curve* wav, float lhz, float rhz, float vol, int just, float sep, float lx = INVALID, float rx = INVALID);

  void set_hz (int i, float _hz);
  void set_hz (float _lhz, float _rhz);
  void fill_hz ();

  void render (float* L, float* R, float* vfdr, float* pfdr, int uv, int uh, int abort);

  void set_vol (float vol);

  struct fade_flags {

    int vol;
    float vol_cur;

    enum {NONE = 0, L, R, BOTH};
    int hz;
    float l_step_cur, r_step_cur;

    fade_flags () {vol = hz = NONE;}

  } fading;

  void calc_fader (float* out, float* alpha, int n, float v1, float v2, float* cur);
  void sync ();

  int sel;

};

#endif