public int Read(short[] buffer, int offset, int length)
{
int n = length, pos = offset + m_offset;
if (pos < m_size[0] && pos + length > m_size[0])
{
// Number of shorts to be read from first buffer
int split = m_size[0] - pos;
// Number of shorts to be read from second buffer
n = Math.Min(length - split, m_size[1]);
// Copy from both buffers
Array.Copy(m_buffer[0], pos, buffer, 0, split);
Array.Copy(m_buffer[1], 0, buffer, split, n);
// Correct total length
n += split;
}
else
{
if (pos >= m_size[0])
{
pos -= m_size[0];
// Number of shorts to be read from second buffer
n = Math.Min(length, m_size[1] - pos);
// Read from second buffer
Array.Copy(m_buffer[1], pos, buffer, 0, n);
}
else
{
// Read from first buffer
Array.Copy(m_buffer[0], pos, buffer, 0, n);
}
}
return n;
}