int Read(byte[] buffer, int offset, int count)
{
var bytesWritten = 0;
var samplesLeft = Math.Min(count, buffer.Length - offset);
while (samplesLeft > 0)
{
var len = FillBuffer(samplesLeft);
if (len == 0)
break;
Buffer.BlockCopy(this.buffer, 0, buffer, offset, len);
samplesLeft -= len;
offset += len;
bytesWritten += len;
}
return bytesWritten;
}