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); }
public int Write(SampleArray data, int offset, int count) { var samplesWritten = 0; if (count > _buffer.Length - _sampleCount) { count = _buffer.Length - _sampleCount; } var writeToEnd = Math.Min(_buffer.Length - _writePosition, count); SampleArray.Blit(data, offset, _buffer, _writePosition, writeToEnd); _writePosition += writeToEnd; _writePosition %= _buffer.Length; samplesWritten += writeToEnd; if (samplesWritten < count) { SampleArray.Blit(data, offset + samplesWritten, _buffer, _writePosition, count - samplesWritten); _writePosition += (count - samplesWritten); samplesWritten = count; } _sampleCount += samplesWritten; return(samplesWritten); }