private void RefreshStates()
{
int blockId = _samplePos / _samplesPerBlock;
int samplePos = blockId * _samplesPerBlock;
for (int i = 0; i < _numChannels; i++)
{
_currentStates[i] = _blockStates[i + _startChannel, blockId];
if (_useLoop)
_currentStates[i].InitLoop();
else
_currentStates[i].InitBlock();
for (int x = samplePos; x < _samplePos; x++)
_currentStates[i].ReadSample();
}
_useLoop = false;
}