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); } }
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; } }
private Mp3Frame GetNextFrame(Stream stream, ref byte[] frameBuffer) { Mp3Frame frame; do { frame = Mp3Frame.FromStream(stream, ref frameBuffer); } while (frame == null); return(frame); }
// 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); }
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; } }