public int Read(SampleArray data, int offset, int count)
{
if (count > _sampleCount)
{
count = _sampleCount;
}
var samplesRead = 0;
var readToEnd = Math.Min(_buffer.Length - _readPosition, count);
SampleArray.Blit(_buffer, _readPosition, data, offset, readToEnd);
samplesRead += readToEnd;
_readPosition += readToEnd;
_readPosition %= _buffer.Length;
if (samplesRead < count)
{
SampleArray.Blit(_buffer, _readPosition, data, offset + samplesRead, count - samplesRead);
_readPosition += (count - samplesRead);
samplesRead = count;
}
_sampleCount -= samplesRead;
return samplesRead;
}