Example #1
0
        void stream__BeforeFrameDataRead(FrameCallbackArgs args)
        {
            long rem = args.Stream.Reader.BytesRemaining;

            long percent = (length_ - rem) * 100 / length_;
            Console.Title = percent.ToString() + "% complete";
            ProcessFrame(args);
        }
Example #2
0
        protected override void ProcessFrame(FrameCallbackArgs args)
        {
            Frame frame = args.Frame;
            frame.ReadData(stream_);
            frame.ReadFooter(stream_);
            frame.Write(outStream_);

            args.ContinueDecoding = true;
            args.HaveReadData = true;
        }
Example #3
0
        protected override void ProcessFrame(FrameCallbackArgs args)
        {
            FrameHeader header = args.Frame.Header;
            string s = "Frame # {0}: S-{1} E-{2}";
            s = string.Format(s, currentFrame_, header.StartingSampleNumber, header.StartingSampleNumber + header.BlockSize);
            Console.WriteLine(s);
            currentFrame_++;

            // we are not reading file data
            args.HaveReadData = false;
        }
        void inStream__BeforeFrameDataRead(FrameCallbackArgs args)
        {
            FlacStream inStream = args.Stream;
            long offset = args.Offset;

            Frame frame = args.Frame;
            frame.ReadData(inStream);
            frame.ReadFooter(inStream);

            ProcessFrame(inStream, frame, offset);
            args.HaveReadData = true;
        }
Example #5
0
 protected abstract void ProcessFrame(FrameCallbackArgs args);
Example #6
0
        protected override void ProcessFrame(FrameCallbackArgs args)
        {
            if (done_)
            {
                args.ContinueDecoding = false;
                return;
            }

            Frame frame = args.Frame;
            FrameHeader header = args.Frame.Header;
            bool haveRead = false;

            long start = header.StartingSampleNumber;
            long end = start + header.BlockSize;

            if (!writeFrames_)
            {
                if (start <= startSample_ && startSample_ <= end)
                {
                    if (start <= endSample_ && endSample_ <= end)
                    {
                        // tracks ends in the same frame
                        writeFrames_ = false;
                        end = endSample_;
                    }
                    else
                    {
                        writeFrames_ = true;
                    }
                    start = startSample_;

                    // write (probably) partial first frame of track
                    WriteFrame(frame, header, start, end);
                    haveRead = true;
                }
                else
                {
                    // nothing
                }
            }
            else
            {
                if (start <= endSample_ && endSample_ <= end)
                {
                    // write (probably) partial last frame of track
                    WriteFrame(frame, header, start, endSample_);
                    haveRead = true;
                    done_ = true;
                    writeFrames_ = false;
                }
                else
                {
                    // write full frame
                    WriteFrame(frame, header, start, end);
                    haveRead = true;
                }
            }

            args.HaveReadData = haveRead;
            args.ContinueDecoding = !done_;
        }
Example #7
0
        public void Decode()
        {
            signature_ = new Signature();
            signature_.Read(this);

            streamInfo_ = MetadataBlock.New(this) as MetadataBlockStreamInfo;
            Validation.IsValid(streamInfo_ != null);

            MetadataBlock block = streamInfo_;
            if (MetadataRead != null)
            {
                MetadataRead(streamInfo_);
            }

            while (!block.Header.IsLastMetadataBlock)
            {
                block = MetadataBlock.New(this);
                if (MetadataRead != null)
                {
                    MetadataRead(block);
                }
            }

            while (!reader_.Done)
            {
                Frame frame = new Frame();
                long offset = reader_.Debug_BytesRead;
                frame.ReadHeader(this);
                bool haveRead = false;
                if (BeforeFrameDataRead != null)
                {
                    FrameCallbackArgs a = new FrameCallbackArgs(frame, this);
                    a.Offset = offset;
                    BeforeFrameDataRead(a);
                    if (!a.ContinueDecoding)
                    {
                        break;
                    }
                    haveRead = a.HaveReadData;
                }
                if (!haveRead)
                {
                    frame.ReadData(this);
                    frame.ReadFooter(this);
                }
            }
        }
 void inStream__BeforeFrameDataRead(FrameCallbackArgs args)
 {
     args.ContinueDecoding = false;
 }