コード例 #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();
                }
            }
        }
コード例 #2
0
ファイル: Mp3WebStream.cs プロジェクト: opcon/cscore
        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();
            }
        }