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; }
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; }