Beispiel #1
0
        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();
        }
Beispiel #2
0
        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");
            }
        }