File: Oscili.cpp

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 (74 lines) | stat: -rwxr-xr-x 1,721 bytes parent folder | download
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
70
71
72
73
74
//************************************************************//
// Oscilt.cpp : implementation of the Oscili class            //
//              (interpolating oscillator).                   //
//                                                            //
//                                                            //
//************************************************************//

#include "Oscili.h"

//////////// CONSTRUCTION / DESTRUCTION ////////////////////////

Oscili::Oscili(){}

Oscili::Oscili(Table* table, float fr, 
      float amp,  SndObj* inputfreq, 
      SndObj* inputamp, int vecsize, float sr)
	  : Oscil(table, fr, amp, 
	  inputfreq, inputamp, vecsize, sr){
}

Oscili::~Oscili(){}

////////////////// OPERATIONS ////////////////////////////////////


short
Oscili :: DoProcess(){  

if(!m_error) {
		   // wrapping loop
 float fr; 
 float amp; 
 if(!m_ptable){ 
  m_error = 1; // empty table object
  return 0;
 } 
 float* tab = m_ptable->GetTable();
 int i;

 for(m_vecpos = 0; m_vecpos < m_vecsize; m_vecpos++){
   if(m_enable){
    fr = m_fr + (m_input == 0 ? 0 : m_input->Output(m_vecpos));
    amp = m_amp + (m_inputamp== 0 ? 0 : m_inputamp->Output(m_vecpos));
    i = (int) m_index;                                       
    m_output[m_vecpos] =  amp*(tab[i] +
		((tab[i] - tab[i+1])*((int)m_index - m_index)));
	        
    m_incr = fr * m_factor;                         
    m_index += m_incr;             // increment m_index
         
    while(m_index >= m_size)
	        m_index -= m_size;        // modulus
	while (m_index < 0)
	         m_index += m_size;
   
   }else {
    m_output[m_vecpos] = 0.f;
   }
 } // end wrapping loop
 return 1;
}
  else return 0;
}