File: DelayLine.h

package info (click to toggle)
sndobj 2.5.1-1
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 3,792 kB
  • ctags: 5,210
  • sloc: ansic: 55,029; cpp: 15,748; makefile: 177
file content (69 lines) | stat: -rwxr-xr-x 1,771 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
//************************************************************//
//  DelayLine.h: interface of the Delayline class             //
//                                                            //
//                                                            //
//                                                            //
//************************************************************//

#ifndef _DELAYLINE_H
#define _DELAYLINE_H


#include "SndObj.h"


class DelayLine : public SndObj 
              {

	      protected:
      float*     m_delay;    // delay line
      float      m_delaytime; // delay time
      long       m_size;      // delay line size in samples
      long       m_wpointer; // write pointer
      long       m_rpointer; // read pointer

      void   PutSample(float sample){
       m_delay[(m_wpointer%=m_size)] = sample;
       m_wpointer++;
	  }

		  
      float   GetSample(){
          float out;
          out = m_delay[(m_rpointer%=m_size)];
          m_rpointer++;
          return out;
	  }

	  float  GetSample(float pos){
		 double dump;
		 double frac = modf ((double)pos, &dump);
         return  (float)((1-frac)*m_delay[(int)pos] + frac*m_delay[(int)(pos+1)%m_size]);
	   }

               public:
       DelayLine();           
       DelayLine(float delaytime, SndObj* InObj, int vecsize=DEF_VECSIZE, float sr=DEF_SR);         
       ~DelayLine();

	   float* Buffer() { return m_delay; } 

	   long GetWritePointerPos() { return m_wpointer; }
       float GetDelayTime() { return m_size/m_sr; }

	   void SetSr(float sr);
       void Reset();
       virtual void SetDelayTime(float delaytime);
	   
	   int Set(char* mess, float value);

       short DoProcess();       
       char* ErrorMessage();

	      };

#endif