Ejemplo n.º 1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="CircularSampleBuffer"/> class.
 /// </summary>
 /// <param name="size">The size.</param>
 public CircularSampleBuffer(int size)
 {
     _buffer        = new SampleArray(size);
     _writePosition = 0;
     _readPosition  = 0;
     Count          = 0;
 }
Ejemplo n.º 2
0
 /// <summary>
 /// Clears all samples written to this buffer.
 /// </summary>
 public void Clear()
 {
     _readPosition  = 0;
     _writePosition = 0;
     Count          = 0;
     _buffer        = new SampleArray(_buffer.Length);
 }
Ejemplo n.º 3
0
        public int Read(SampleArray data, int offset, int count)
        {
            if (count > Count)
            {
                count = Count;
            }
            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;
            }

            Count -= samplesRead;
            return(samplesRead);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Writes the given samples to this buffer.
        /// </summary>
        /// <param name="data">The sample array to read from. </param>
        /// <param name="offset"></param>
        /// <param name="count"></param>
        /// <returns></returns>
        public int Write(SampleArray data, int offset, int count)
        {
            var samplesWritten = 0;

            if (count > _buffer.Length - Count)
            {
                count = _buffer.Length - Count;
            }

            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;
            }
            Count += samplesWritten;
            return(samplesWritten);
        }
Ejemplo n.º 5
0
 public static void Blit(SampleArray src, int srcPos, SampleArray dest, int destPos, int len)
 {
     dest.ToFloat32Array().Set(src.ToFloat32Array().SubArray(srcPos, srcPos + len), destPos);
 }