Example #1
0
        public bool AddFromMp3Stream(Stream stream)
        {
            try
            {
                var info = new Mp3FrameInfo
                {
                    StreamPosition = stream.Position,
                    SampleIndex    = TotalSamples
                };

                _frame = Mp3Frame.FromStream(stream);
                if (_frame != null)
                {
                    info.SampleAmount = _frame.SampleCount;
                    info.Size         = Convert.ToInt32(stream.Position - info.StreamPosition);
                    TotalSamples     += _frame.SampleCount;

                    Add(info);
                    return(true);
                }
                return(false);
            }
            catch (Exception)
            {
                return(false);
            }
        }
Example #2
0
        private void ParseForMp3Frames(Stream stream, bool enableSeeking)
        {
            Mp3Frame frame = null;
            long     offsetOfFirstFrame = 0;

            stream = new BufferedStream(stream);

            if (enableSeeking)
            {
                while (ID3v2.SkipTag(stream))
                {
                    /* skip all id3 tags (see https://github.com/filoe/cscore/issues/63)
                     * there are some files with multiple id3v2 tags
                     * not sure whether this is according to the id3 specification but we have to handle it anyway
                     * as long as the SkipTag method returns true, another id3 tag has been found
                     */
                }
            }

            while (frame == null)
            {
                if (enableSeeking && stream.IsEndOfStream())
                {
                    break;
                }

                if (enableSeeking)
                {
                    offsetOfFirstFrame = stream.Position;
                }
                frame = Mp3Frame.FromStream(stream);
            }

            if (frame == null)
            {
                throw new Exception("Could not find any MP3-Frames in the stream.");
            }

            if (enableSeeking)
            {
                XingHeader xingHeader = XingHeader.FromFrame(frame);
                if (xingHeader != null)
                {
                    offsetOfFirstFrame = stream.Position;
                }
            }
            _inputFormat = new Mp3Format(frame.SampleRate, frame.ChannelCount, frame.FrameLength, frame.BitRate);

            //Prescan stream
            if (enableSeeking)
            {
                _frameInfoCollection = new FrameInfoCollection();
                while (_frameInfoCollection.AddFromMp3Stream(stream))
                {
                }

                stream.Position = offsetOfFirstFrame;
            }
        }
Example #3
0
        private Mp3Frame GetNextFrame(Stream stream, ref byte[] frameBuffer)
        {
            Mp3Frame frame;

            do
            {
                frame = Mp3Frame.FromStream(stream, ref frameBuffer);
            } while (frame == null);

            return(frame);
        }
Example #4
0
// ReSharper disable once InconsistentNaming
        private Mp3Frame ReadNextMP3Frame(ref byte[] frameBuffer)
        {
            Mp3Frame frame = Mp3Frame.FromStream(_stream, ref frameBuffer);

            if (frame != null && _frameInfoCollection != null)
            {
                _frameInfoCollection.PlaybackIndex++;
            }

            return(frame);
        }
Example #5
0
        private void ParseForMp3Frames(Stream stream, bool enableSeeking)
        {
            Mp3Frame frame = null;
            long     offsetOfFirstFrame = 0;

            ID3v2.SkipTag(stream);

            while (frame == null && !stream.IsEndOfStream())
            {
                offsetOfFirstFrame = stream.Position;
                frame = Mp3Frame.FromStream(stream);
            }

            if (frame == null)
            {
                throw new Exception("Could not find any MP3-Frames in the stream.");
            }

            if (stream.CanSeek)
            {
                XingHeader xingHeader = XingHeader.FromFrame(frame);
                if (xingHeader != null)
                {
                    offsetOfFirstFrame = stream.Position;
                }
            }
            _inputFormat = new Mp3Format(frame.SampleRate, frame.ChannelCount, frame.FrameLength, frame.BitRate);
            //todo: implement VBR

            //Prescan stream
            if (enableSeeking)
            {
                _frameInfoCollection = new FrameInfoCollection();
                while (_frameInfoCollection.AddFromMp3Stream(stream))
                {
                }

                stream.Position = offsetOfFirstFrame;
            }
        }