public MpegAudioXingFrame(IEnumerable <MpegAudioDataFrame> mpegAudioDataFrames) : base ( mpegAudioDataFrames.First().Version, mpegAudioDataFrames.First().Layer, mpegAudioDataFrames.First().HasErrorProtection, FindLowestBitRateID(mpegAudioDataFrames.First()), mpegAudioDataFrames.First().SampleRateID, false, mpegAudioDataFrames.First().PrivateBit, mpegAudioDataFrames.First().ChannelMode, mpegAudioDataFrames.First().JoinID, mpegAudioDataFrames.First().IsCopyrighted, mpegAudioDataFrames.First().IsOriginal, mpegAudioDataFrames.First().Emphasis, 0x0000 ) { if (mpegAudioDataFrames == null) { throw new ArgumentNullException("mpegAudioDataFrames"); } this.fields = MpegAudioXingFields.FrameCount | MpegAudioXingFields.AudioDataLength | MpegAudioXingFields.TableOfContents; this.frameCount = mpegAudioDataFrames.Count(); this.audioDataLength = mpegAudioDataFrames.Sum(frame => frame.TotalLength); this.tableOfContents = GenerateTableOfContents(mpegAudioDataFrames).ToArray(); }
public MpegAudioXingFrame(BinaryReader reader) : base(reader) { this.fields = (MpegAudioXingFields)Binary.SwitchEndianness(reader.ReadUInt32()); if (((int)fields & 0xFFFFFFF0) != 0) { throw new InvalidDataException(string.Format("Unexpected field flags '{0}' in Xing tag.", fields)); } if ((fields & MpegAudioXingFields.FrameCount) != 0) { this.frameCount = Binary.SwitchEndianness(reader.ReadInt32()); } if ((fields & MpegAudioXingFields.AudioDataLength) != 0) { this.audioDataLength = Binary.SwitchEndianness(reader.ReadInt32()); } if ((fields & MpegAudioXingFields.TableOfContents) != 0) { this.tableOfContents = reader.ReadBytes(100); } if ((fields & MpegAudioXingFields.QualityIndicator) != 0) { this.qualityIndicator = Binary.SwitchEndianness(reader.ReadInt32()); } if (PaddingLength < 0) { throw new InvalidDataException(string.Format("Invalid padding length '{0}'.", PaddingLength)); } if (reader.ReadBytes(PaddingLength).Length != PaddingLength) { throw new InvalidDataException("Invalid padding length"); } }