Ejemplo n.º 1
0
short
HarmTable :: MakeTable(){
  
        float max = 1.f;	
	int n = 1, harm = m_harm, i;       

	switch (m_typew){
	case SINE:
            for(i=0; i < m_L; i++)
               m_table[i] = (float)(sin(i*TWOPI/m_L + m_phase)); 
	    break;

	case SAW:
    ZeroTable();
    for(i=0; i < m_L; i++){
    for(n = 1 ; n <= harm ; n++)
    m_table[i] += (float)((1/(float)n)*sin(n*i*TWOPI/m_L + m_phase));
    max = (fabs((double)max) < fabs((double)m_table[i])) ? m_table[i] : max;
                           }
	   break;

        case SQUARE:
     ZeroTable();
     for(i=0; i < m_L; i++){
     for(n = 1 ; n <= harm ; n+=2)
     m_table[i] += (float)((1/(float)n)*sin(n*TWOPI*i/m_L + m_phase));		 
     max = (fabs((double)max) < fabs((double)m_table[i])) ? m_table[i] : max;
	                   }
	   break;

	case BUZZ:
     ZeroTable();
     for(i=0; i < m_L; i++){
     for(n = 1 ; n <= harm ; n++)
     m_table[i] += (float) sin(n*TWOPI*i/m_L + m_phase);			
     max = (fabs((double)max) < fabs((double)m_table[i])) ? m_table[i] : max;
	                    }
	   break;

      default:
	   ZeroTable();
           m_error = 1;          
           return 0;
           break;
	} 

       //normalize:
       if(m_typew!=SINE)
        for(n = 0; n < m_L; n++)
	  m_table[n] = m_table[n]/max;
       m_table[m_L] = m_table[0];  // guard point
          return 1;            
     }
Ejemplo n.º 2
0
short
UsrHarmTable :: MakeTable(){
  
  float max = 1.f;	       
  int n;	

  ZeroTable();
  for(int i=0; i < m_L; i++){
    for(n = 0 ; n < m_harm ; n++)
      m_table[i] += (float)(m_amp[n]*sin((n+1)*i*TWOPI/m_L));
    max = (fabs((double)max) < fabs((double)m_table[i])) ? m_table[i] : max;
  }
	     
  //normalize:
  for(n = 0; n < m_L; n++)
    m_table[n] = m_table[n]/max;
  m_table[m_L] = m_table[0];
  return 1;            
}