Subversion Repositories DIN Is Noise

Rev

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

/*
* recorder.h
* DIN Is Noise is copyright (c) 2006-2025 Jagannathan Sampath
* For more information, please visit https://dinisnoise.org/
*/


#ifndef __RECORDER
#define __RECORDER

#include <string>
#include <list>
#include <fstream>

struct checkbutton;

struct rectime {

  double dsecs;
  int mins;
  int secs;

  rectime () {
    dsecs = 0;
    mins = 0;
    secs = 0;
  }

  rectime& operator+= (double dt) {
    dsecs += dt;
    if (dsecs >= 1.) {
      dsecs -= 1.;
      ++secs;
      if (secs >= 60) {
        secs = 0;
        ++mins;
      }
    }
    return *this;
  }

  void reset () {
    dsecs = 0;
    mins = secs = 0;
  }

};

struct recorder {

  std::string folder;
  std::string fname;

  std::ofstream file;

  std::list <float*> record_buffers;
  std::list<float*>::iterator iter, jter;
  int buffer_size;
  float* samples_buffer;

  int saved;
  int saving_started;

  float nmin, nmax;
  void normalise ();

  void start_saving ();
  int save_some (checkbutton& cb);

  rectime rec_time_add, rec_time_save;
  recorder ();

  void add (float* sample_buffer, int sample_buffer_size, int num_samples, checkbutton& cb_record1, checkbutton& cb_record2);
  int exists () {return buffer_size;}

  void set_fname (const std::string& _fname);

  int stop_rec, stop_mins, stop_secs;
  void set_stop_at (int mins, int secs);

  void clear ();
  void start ();
  void stop ();

  ~recorder ();

};

extern recorder recorder0;

#endif