int FillBuffer(int maxSamples)
{
var bufferedSamples = 0;
var offset = 0;
maxSamples = Math.Min(buffer.Length, maxSamples);
while (maxSamples > 0 && !EndOfData)
{
var len = Math.Min(maxSamples, samplesLeftInBlock);
stream.ReadBytes(buffer, offset, len);
offset += len;
var samplesRead = len;
bufferedSamples += samplesRead;
maxSamples -= samplesRead;
samplesLeftInBlock -= samplesRead;
samplePosition += len;
UpdateBlockIfNeeded();
}
return bufferedSamples;
}