CWTOscillator::CWTOscillator(void) { // --- clear out arrays memset(m_pSawTables, 0, NUM_TABLES*sizeof(double*)); memset(m_pTriangleTables, 0, NUM_TABLES*sizeof(double*)); // --- init variables m_dReadIndex = 0.0; m_dWT_inc = 0.0; m_nCurrentTableIndex = 0; // --- setup correction factors (empirical) m_dSquareCorrFactor[0] = 0.5; m_dSquareCorrFactor[1] = 0.5; m_dSquareCorrFactor[2] = 0.5; m_dSquareCorrFactor[3] = 0.49; m_dSquareCorrFactor[4] = 0.48; m_dSquareCorrFactor[5] = 0.468; m_dSquareCorrFactor[6] = 0.43; m_dSquareCorrFactor[7] = 0.34; m_dSquareCorrFactor[8] = 0.25; // --- default to SINE m_pCurrentTable = &m_dSineTable[0]; createWaveTables(); }
HowieError onDeviceChanged( const HowieDeviceCharacteristics * pHDC, const HowieBuffer *state, const HowieBuffer *params) { __android_log_print(ANDROID_LOG_VERBOSE, APPNAME, __func__); struct PlayerState* playerState = (struct PlayerState*)state->data; struct PlayerParams* playerParams = (struct PlayerParams*)params->data; createWaveTables(pHDC->framesPerPeriod, pHDC->channelCount, playerState); playerParams->playing = 1; return HOWIE_SUCCESS; }
void CWTOscillator::setSampleRate(double dFs) { bool bNewSR = m_dSampleRate != dFs; // --- base class first COscillator::setSampleRate(dFs); // --- recrate the tables only if sample rate has changed if(bNewSR) { // --- then recrate destroyWaveTables(); createWaveTables(); } }