Beispiel #1
0
        public void TestCircularSampleBuffer()
        {
            var x = new CircularSampleBuffer(4000);

            Assert.AreEqual(0, x.Count);

            x.Write(LinearArray(0, 3950), 0, 3950);
            Assert.AreEqual(3950, x.Count);

            var target = new float[3950];

            x.Read(target, 0, 3950);
            Assert.AreEqual(0, x.Count);

            var source = LinearArray(0, 100);

            x.Write(source, 0, 100);
            Assert.AreEqual(100, x.Count);

            target = new float[100];
            x.Read(target, 0, 100);
            Assert.AreEqual(0, x.Count);
            Assert.AreEqual(source, target);

            var read = x.Read(target, 0, 100);

            Assert.AreEqual(0, read);
        }
        /// <inheritdoc />
        public override int Read(float[] buffer, int offset, int count)
        {
            if (_circularBuffer.Count < count)
            {
                if (_finished)
                {
                    Finished();
                }
            }
            else
            {
                var read = new float[count];
                _circularBuffer.Read(read, 0, read.Length);

                for (var i = 0; i < count; i++)
                {
                    buffer[offset + i] = read[i];
                }

                var samples = count / 2;
                SamplesPlayed(samples);
            }

            if (!_finished)
            {
                RequestBuffers();
            }

            return(count);
        }
        private void GenerateSound(AudioProcessingEvent e)
        {
            var left    = e.OutputBuffer.GetChannelData(0);
            var right   = e.OutputBuffer.GetChannelData(1);
            var samples = left.Length + right.Length;

            if (_circularBuffer.Count < samples)
            {
                if (_finished)
                {
                    Finished();
                }
            }
            else
            {
                var buffer = new SampleArray(samples);
                _circularBuffer.Read(buffer, 0, buffer.Length);

                var s = 0;
                for (int i = 0; i < left.Length; i++)
                {
                    left[i]  = buffer[s++];
                    right[i] = buffer[s++];
                }

                SamplesPlayed(left.Length);
            }



            if (!_finished)
            {
                RequestBuffers();
            }
        }
Beispiel #4
0
        /// <inheritdoc />
        public override int Read(float[] buffer, int offset, int count)
        {
            if (_circularBuffer.Count < count)
            {
                if (_finished)
                {
                    ((EventEmitter)Finished).Trigger();
                }
            }
            else
            {
                var read = new Float32Array(count);
                _circularBuffer.Read(read, 0, read.Length);

                Buffer.BlockCopy(read.Data, 0, buffer, offset * sizeof(float),
                                 count * sizeof(float));

                var samples = count / 2;
                ((EventEmitterOfT <double>)SamplesPlayed).Trigger(samples);
            }

            if (!_finished)
            {
                RequestBuffers();
            }

            return(count);
        }
Beispiel #5
0
        /// <inheritdoc />
        public override int Read(float[] buffer, int offset, int count)
        {
            var read = new Float32Array(count);

            _circularBuffer.Read(read, 0, System.Math.Min(read.Length, _circularBuffer.Count));

            Buffer.BlockCopy(read.Data, 0, buffer, offset * sizeof(float),
                             count * sizeof(float));

            var samples = count / 2;

            ((EventEmitterOfT <double>)SamplesPlayed).Trigger(samples);

            RequestBuffers();

            return(count);
        }
Beispiel #6
0
        private void GenerateSound(DOMEvent e)
        {
            var ae      = (AudioProcessingEvent)e;
            var left    = ae.outputBuffer.getChannelData(0);
            var right   = ae.outputBuffer.getChannelData(1);
            var samples = left.length + right.length;

            if (_circularBuffer.Count < samples)
            {
                if (_finished)
                {
                    if (Finished != null)
                    {
                        Finished();
                    }
                    Stop();
                }
                else
                {
                    // when buffering we count it as pause time
                    _pauseTime += (int)((BufferSize * 1000) / (2 * _context.sampleRate));
                }
            }
            else
            {
                var buffer = new SampleArray(samples);
                _circularBuffer.Read(buffer, 0, buffer.Length);

                var s = 0;
                for (int i = 0; i < left.length; i++)
                {
                    left[i]  = buffer[s++];
                    right[i] = buffer[s++];
                }
            }

            if (PositionChanged != null)
            {
                PositionChanged((int)(CalcPosition()));
            }

            if (!_finished)
            {
                RequestBuffers();
            }
        }
Beispiel #7
0
        public override int Read(float[] buffer, int offset, int count)
        {
            if (_circularBuffer.Count < count)
            {
                if (_finished)
                {
                    if (Finished != null)
                    {
                        Finished();
                    }
                    Stop();
                }
                else
                {
                    // when buffering we count it as pause time
                    _pauseTime += (BufferSize * 1000) / (2 * WaveFormat.SampleRate);
                }
            }
            else
            {
                var read = new SampleArray(count);
                _circularBuffer.Read(read, 0, read.Length);

                for (int i = 0; i < count; i++)
                {
                    buffer[offset + i] = read[i];
                }
            }

            if (PositionChanged != null)
            {
                PositionChanged((int)(CalcPosition()));
            }

            if (!_finished)
            {
                RequestBuffers();
            }

            return(count);
        }
Beispiel #8
0
 public int Pull(float[] data, int offset = 0)
 {
     return(buffer.Read(data, offset, data.Length));
 }