void stream__BeforeFrameDataRead(FrameCallbackArgs args) { long rem = args.Stream.Reader.BytesRemaining; long percent = (length_ - rem) * 100 / length_; Console.Title = percent.ToString() + "% complete"; ProcessFrame(args); }
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; }
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; }
protected abstract void ProcessFrame(FrameCallbackArgs args);
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_; }
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; }