const DamageDesc &CItemEnhancementStack::GetDamage (void) const // GetDamage // // Returns special damage. { if (!m_bCacheValid) CalcCache(); return m_Damage; }
int CItemEnhancementStack::GetBonus (void) const // GetBonus // // Returns the accumulated bonus for all enhancements on the stack. { if (!m_bCacheValid) CalcCache(); return m_iBonus; }
// // AllocWaveCache // // HRESULT CAudioSynth::AllocWaveCache(const WAVEFORMATEX& wfex) { // The caller should hold the state lock because this // function uses m_iWaveCacheCycles, m_iWaveCacheSize // m_iFrequency, m_bWaveCache and m_wWaveCache. The // function should also hold the state lock because // it calls CalcCache(). ASSERT(CritCheckIn(m_pStateLock)); m_iWaveCacheCycles = m_iFrequency; m_iWaveCacheSize = (int) wfex.nSamplesPerSec; if(m_bWaveCache) { delete[] m_bWaveCache; m_bWaveCache = NULL; } if(m_wWaveCache) { delete[] m_wWaveCache; m_wWaveCache = NULL; } // The wave cache always stores PCM audio data. if(wfex.wBitsPerSample == 8) { m_bWaveCache = new BYTE [m_iWaveCacheSize]; if(NULL == m_bWaveCache) { return E_OUTOFMEMORY; } } else { m_wWaveCache = new WORD [m_iWaveCacheSize]; if(NULL == m_wWaveCache) { return E_OUTOFMEMORY; } } CalcCache(wfex); return S_OK; }
// // FillAudioBuffer // // This actually fills it with the sin wave by copying it verbatim into the output... // void CAudioSynth::FillPCMAudioBuffer(const WAVEFORMATEX& wfex, BYTE pBuf[], int iSize) { BOOL fCalcCache = FALSE; // The caller should always hold the state lock because this // function uses m_iFrequency, m_iFrequencyLast, m_iWaveform // m_iWaveformLast, m_iAmplitude, m_iAmplitudeLast, m_iWaveCacheIndex // m_iWaveCacheSize, m_bWaveCache and m_wWaveCache. The caller should // also hold the state lock because this function calls CalcCache(). ASSERT(CritCheckIn(m_pStateLock)); // Only realloc the cache if the format has changed ! if(m_iFrequency != m_iFrequencyLast) { fCalcCache = TRUE; m_iFrequencyLast = m_iFrequency; } if(m_iWaveform != m_iWaveformLast) { fCalcCache = TRUE; m_iWaveformLast = m_iWaveform; } if(m_iAmplitude != m_iAmplitudeLast) { fCalcCache = TRUE; m_iAmplitudeLast = m_iAmplitude; } if(fCalcCache) { // recalculate the sin wave... CalcCache(wfex); } // sin wave (old way) // Copy cache to output buffers copyCacheToOutputBuffers(wfex, pBuf, iSize); }
// // FillAudioBuffer // // // void CAudioSynth::FillPCMAudioBuffer(const WAVEFORMATEX& wfex, BYTE pBuf[], int iSize) { BOOL fCalcCache = FALSE; // The caller should always hold the state lock because this // function uses m_iFrequency, m_iFrequencyLast, m_iWaveform // m_iWaveformLast, m_iAmplitude, m_iAmplitudeLast, m_iWaveCacheIndex // m_iWaveCacheSize, m_bWaveCache and m_wWaveCache. The caller should // also hold the state lock because this function calls CalcCache(). ASSERT(CritCheckIn(m_pStateLock)); // Only realloc the cache if the format has changed ! if(m_iFrequency != m_iFrequencyLast) { fCalcCache = TRUE; m_iFrequencyLast = m_iFrequency; } if(m_iWaveform != m_iWaveformLast) { fCalcCache = TRUE; m_iWaveformLast = m_iWaveform; } if(m_iAmplitude != m_iAmplitudeLast) { fCalcCache = TRUE; m_iAmplitudeLast = m_iAmplitude; } if(fCalcCache) { CalcCache(wfex); } // Copy cache to output buffers if(wfex.wBitsPerSample == 8 && wfex.nChannels == 1) { while(iSize--) { *pBuf++ = m_bWaveCache[m_iWaveCacheIndex++]; if(m_iWaveCacheIndex >= m_iWaveCacheSize) m_iWaveCacheIndex = 0; } } else if(wfex.wBitsPerSample == 8 && wfex.nChannels == 2) { iSize /= 2; while(iSize--) { *pBuf++ = m_bWaveCache[m_iWaveCacheIndex]; *pBuf++ = m_bWaveCache[m_iWaveCacheIndex++]; if(m_iWaveCacheIndex >= m_iWaveCacheSize) m_iWaveCacheIndex = 0; } } else if(wfex.wBitsPerSample == 16 && wfex.nChannels == 1) { WORD * pW = (WORD *) pBuf; iSize /= 2; while(iSize--) { *pW++ = m_wWaveCache[m_iWaveCacheIndex++]; if(m_iWaveCacheIndex >= m_iWaveCacheSize) m_iWaveCacheIndex = 0; } } else if(wfex.wBitsPerSample == 16 && wfex.nChannels == 2) { WORD * pW = (WORD *) pBuf; iSize /= 4; while(iSize--) { *pW++ = m_wWaveCache[m_iWaveCacheIndex]; *pW++ = m_wWaveCache[m_iWaveCacheIndex++]; if(m_iWaveCacheIndex >= m_iWaveCacheSize) m_iWaveCacheIndex = 0; } } }