Exemple #1
0
        private void BufferProc(object o)
        {
            var resetEvent = o as EventWaitHandle;

            try
            {
                if (_stream == null || _stream.CanRead == false)
                {
                    throw new Exception("Mp3WebStream not initialized");
                }

                byte[] buffer = null;
                int    read;

                Mp3Format format, prevFormat;
                Mp3Frame  frame;

                read   = ReadRawDataFromFrame(ref buffer, out frame);
                format = new Mp3Format(frame.SampleRate, frame.ChannelCount, frame.FrameLength,
                                       frame.BitRate);

                _buffer = new FixedSizeBuffer <byte>(format.BytesPerSecond * 2);

                do
                {
                    _buffer.Write(buffer, 0, read);
                    read       = ReadRawDataFromFrame(ref buffer, out frame);
                    prevFormat = format;
                    format     = new Mp3Format(frame.SampleRate, frame.ChannelCount, frame.FrameLength,
                                               frame.BitRate);
                } while (_buffer.Buffered < _buffer.Length / 10 || !format.Equals(prevFormat));

                _decoder = new DmoMp3Decoder(new ReadBlockStream(_buffer.ToStream()), false);

                if (resetEvent != null)
                {
                    resetEvent.Set();
                }

                do
                {
                    if (_buffer.Buffered >= _buffer.Length * 0.85 && !_disposing)
                    {
                        Thread.Sleep(250);
                    }
                    else
                    {
                        _buffer.Write(buffer, 0, read);
                        read = ReadRawDataFromFrame(ref buffer, out frame);
                    }
                } while (!_disposing);
            }
            finally
            {
                if (resetEvent != null)
                {
                    resetEvent.Set();
                }
            }
        }
        public void FixedBufferCanAdjustReadOffsetOnOverwrite()
        {
            int dataLength   = 100;
            int bufferLength = 30;
            int readOffset   = 10;

            int writeInitial = 10;
            int readInitial  = 5;

            FixedSizeBuffer <int> fixedSizeBuffer = new FixedSizeBuffer <int>(bufferLength);
            var numbers  = Enumerable.Range(0, dataLength).ToArray();
            var readData = new int[numbers.Length + readOffset];

            fixedSizeBuffer.Write(Enumerable.Range(5000, writeInitial).ToArray(), 0, writeInitial);
            fixedSizeBuffer.Read(readData, 0, readInitial);
            Array.Clear(readData, 0, readData.Length);

            int written = fixedSizeBuffer.Write(numbers, 0, numbers.Length);

            Assert.AreEqual(numbers.Length, written);
            Assert.AreEqual(fixedSizeBuffer.Buffered, bufferLength);

            int read = fixedSizeBuffer.Read(readData, readOffset, readData.Length);

            Assert.AreEqual(read, bufferLength);
            Assert.AreEqual(fixedSizeBuffer.Buffered, 0);

            Array.Copy(readData, readOffset, readData, 0, dataLength);
            Array.Copy(numbers, dataLength - bufferLength, numbers, 0, bufferLength);
            for (int i = 0; i < bufferLength; i++)
            {
                Assert.AreEqual(readData[i], numbers[i]);
            }
        }
Exemple #3
0
 private void BufferProc(object o)
 {
     byte[] byteBuffer = new byte[WaveFormat.BytesPerSecond / 2];
     do
     {
         if (_buffer.Buffered >= _buffer.Length * 0.85 && !_disposing)
         {
             Thread.Sleep(50);
             continue;
         }
         lock (_lockObject)
         {
             int bytesToRead = Math.Min(byteBuffer.Length, _buffer.Length - _buffer.Buffered);
             int read        = base.Read(byteBuffer, 0, bytesToRead);
             if (read > 0)
             {
                 _buffer.Write(byteBuffer, 0, read);
                 _eofCounter = 0;
             }
             else
             {
                 _eofCounter++;
             }
         }
     } while (!_disposing);
 }
 /// <summary>
 /// Adds new data to the internal buffer.
 /// </summary>
 /// <param name="buffer">A byte-array which contains the data.</param>
 /// <param name="offset">Zero-based offset in the <paramref name="buffer"/> (specified in bytes).</param>
 /// <param name="count">Number of bytes to add to the internal buffer.</param>
 /// <returns>Number of added bytes.</returns>
 public int Write(byte[] buffer, int offset, int count)
 {
     lock (_bufferlock)
     {
         return(_buffer.Write(buffer, offset, count));
     }
 }
        public void FixedBufferCanReadWrite()
        {
            int length     = 100;
            int readOffset = 10;

            FixedSizeBuffer <int> fixedSizeBuffer = new FixedSizeBuffer <int>(length);
            var numbers  = Enumerable.Range(0, length).ToArray();
            var readData = new int[numbers.Length + readOffset];

            int written = fixedSizeBuffer.Write(numbers, 0, numbers.Length);

            Assert.AreEqual(numbers.Length, written);
            Assert.AreEqual(fixedSizeBuffer.Buffered, numbers.Length);

            fixedSizeBuffer.Read(readData, readOffset, length);
            Assert.AreEqual(fixedSizeBuffer.Buffered, 0);

            Array.Copy(readData, readOffset, readData, 0, length);
            for (int i = 0; i < length; i++)
            {
                Assert.AreEqual(readData[i], numbers[i]);
            }
        }
Exemple #6
0
        private void BufferProc(object o)
        {
            if (_stream == null || _stream.CanRead == false)
            {
                throw new Exception("Mp3WebStream not initialized");
            }

            MP3Frame frame = GetNextFrame(_stream);

            int          channels  = frame.ChannelMode == MP3ChannelMode.Stereo ? 2 : 1;
            AcmConverter converter = new AcmConverter(new MP3Format(frame.SampleRate, frame.ChannelCount, frame.FrameLength, frame.BitRate));

            _waveFormat = converter.DestinationFormat;

            byte[] buffer = new byte[16384 * 4];
            _buffer = new FixedSizeBuffer <byte>(converter.DestinationFormat.BytesPerSecond * 10);

            ManualResetEvent resetEvent = o as ManualResetEvent;

            resetEvent.Set();

            do
            {
                if (_buffer.Buffered >= _buffer.Length * 0.85 && !_disposing)
                {
                    Thread.Sleep(250);
                    continue;
                }
                try
                {
                    frame = GetNextFrame(_stream);
                    //_frameBuffer is set in GetNextFrame
                    int count = converter.Convert(_frameBuffer, frame.FrameLength, buffer, 0);
                    if (count > 0)
                    {
                        int written = _buffer.Write(buffer, 0, count);
                    }
                }
                catch (MmException)
                {
                    _disposing = true;
                    ThreadPool.QueueUserWorkItem((c) =>
                    {
                        while (_bufferThread.ThreadState != System.Threading.ThreadState.Stopped)
                        {
                            ;
                        }
                        CreateStream(false);
                    });
                }
                catch (WebException)
                {
                    InitializeConnection();
                }
                catch (IOException)
                {
                    InitializeConnection();
                }
            } while (!_disposing);

            if (converter != null)
            {
                converter.Dispose();
            }
        }
Exemple #7
0
        private void BufferProc(object o)
        {
            if (_stream == null || _stream.CanRead == false)
                throw new Exception("Mp3WebStream not initialized");

            MP3Frame frame = GetNextFrame(_stream);

            int channels = frame.ChannelMode == MP3ChannelMode.Stereo ? 2 : 1;
            AcmConverter converter = new AcmConverter(new MP3Format(frame.SampleRate, frame.ChannelCount, frame.FrameLength, frame.BitRate));

            _waveFormat = converter.DestinationFormat;

            byte[] buffer = new byte[16384 * 4];
            _buffer = new FixedSizeBuffer<byte>(converter.DestinationFormat.BytesPerSecond * 10);

            ManualResetEvent resetEvent = o as ManualResetEvent;
            resetEvent.Set();

            do
            {
                if (_buffer.Buffered >= _buffer.Length * 0.85 && !_disposing)
                {
                    Thread.Sleep(250);
                    continue;
                }
                try
                {
                    frame = GetNextFrame(_stream);
                    //_frameBuffer is set in GetNextFrame
                    int count = converter.Convert(_frameBuffer, frame.FrameLength, buffer, 0);
                    if (count > 0)
                    {
                        int written = _buffer.Write(buffer, 0, count);
                    }
                }
                catch (MmException)
                {
                    _disposing = true;
                    ThreadPool.QueueUserWorkItem((c) =>
                    {
                        while (_bufferThread.ThreadState != System.Threading.ThreadState.Stopped) ;
                        CreateStream(false);
                    });
                }
                catch (WebException)
                {
                    InitializeConnection();
                }
                catch (IOException)
                {
                    InitializeConnection();
                }
            } while (!_disposing);

            if (converter != null)
                converter.Dispose();
        }
Exemple #8
0
        private void BufferProc(object o)
        {
            var resetEvent = o as EventWaitHandle;

            try
            {
                if (_stream == null || _stream.CanRead == false)
                    throw new Exception("Mp3WebStream not initialized");

                byte[] buffer = null;
                int read;

                Mp3Format format, prevFormat;
                Mp3Frame frame;

                read = ReadRawDataFromFrame(ref buffer, out frame);
                format = new Mp3Format(frame.SampleRate, frame.ChannelCount, frame.FrameLength,
                    frame.BitRate);

                _buffer = new FixedSizeBuffer<byte>(format.BytesPerSecond * 2);

                do
                {
                    _buffer.Write(buffer, 0, read);
                    read = ReadRawDataFromFrame(ref buffer, out frame);
                    prevFormat = format;
                    format = new Mp3Format(frame.SampleRate, frame.ChannelCount, frame.FrameLength,
                        frame.BitRate);
                } while (_buffer.Buffered < _buffer.Length / 10 || !format.Equals(prevFormat));

                if (resetEvent != null)
                    resetEvent.Set();

                do
                {
                    Debug.WriteLine("Buffering");
                    if (_buffer.Buffered >= _buffer.Length * 0.85 && !_disposing)
                        Thread.Sleep(250);
                    else
                    {
                        _buffer.Write(buffer, 0, read);
                        read = ReadRawDataFromFrame(ref buffer, out frame);
                    }
                } while (!_disposing);
            }
            finally
            {
                if (resetEvent != null)
                    resetEvent.Set();
            }
        }