public void Read(FlacStream stream, FrameHeader frameHeader, int order, int bitsPerSample) { bitsPerSample_ = bitsPerSample; lpcOrder_ = order; uint [] warmupSamples = Warmup.ReadSamples(stream, order, bitsPerSample_); quantitizedLpcPrecisionInBitsMinusOne_ = stream.Reader.ReadBitsAsSByte(QLPC_PRECISION_BITS_COUNT); quantitizedLpcShiftInBits_ = stream.Reader.ReadBitsAsSByte(QLPC_PRECISION_SHIFT_COUNT); predictorCoefficients_ = new uint[order]; int i = 0; while (i < predictorCoefficients_.Length) { predictorCoefficients_[i] = stream.Reader.ReadBits(quantitizedLpcPrecisionInBitsMinusOne_ + 1); i++; } samples_ = new uint[frameHeader.BlockSize]; i = 0; foreach (uint w in warmupSamples) { samples_[i] = w; i++; } residual_ = new Residual(); residual_.Read(stream, frameHeader.BlockSize, order, ref samples_); }
public static Subframe New(FlacStream stream, FrameHeader frameHeader, int bitsPerSampleInFrame) { Subframe sf; SubframeHeader header = new SubframeHeader(); header.Read(stream); int subframeType = header.SubframeType; if (subframeType == 0) { // constant SubframeConstant subframe = new SubframeConstant(); subframe.header_ = header; subframe.Read(stream, bitsPerSampleInFrame); sf = subframe; } else if (subframeType == 1) { // verbatim SubframeVerbatim subframe = new SubframeVerbatim(); subframe.header_ = header; subframe.Read(stream, bitsPerSampleInFrame, frameHeader.BlockSize); sf = subframe; } else if (subframeType >= 2 && subframeType <= 7) { throw new FlacFormatReservedException(); } else if (subframeType >= 8 && subframeType <= 15) { // fixed int predictorOrder = subframeType & 7; Validation.IsReserved(predictorOrder <= 4); SubframeFixed subframe = new SubframeFixed(); subframe.header_ = header; subframe.Read(stream, frameHeader, predictorOrder, bitsPerSampleInFrame); sf = subframe; } else if (subframeType == 16) { throw new FlacFormatReservedException(); } else { int lpcOrder = (subframeType & 0x1f) + 1; SubframeLpc subframe = new SubframeLpc(); subframe.header_ = header; subframe.Read(stream, frameHeader, lpcOrder, bitsPerSampleInFrame); sf = subframe; } return sf; }
public void Read(FlacStream stream, FrameHeader frameHeader, int predictorOrder, int bitsPerSample) { bitsPerSample_ = bitsPerSample; predictorOrder_ = predictorOrder; uint [] warmupSamples = Warmup.ReadSamples(stream, predictorOrder, bitsPerSample_); int sampleCount = frameHeader.BlockSize; samples_ = new uint[sampleCount]; int i = 0; foreach (uint w in warmupSamples) { samples_[i] = w; i++; } residual_ = new Residual(); residual_.Read(stream, frameHeader.BlockSize, predictorOrder, ref samples_); }
private void WriteFrame(Frame frame, FrameHeader header, long start, long end) { frame.ReadData(stream_); frame.ReadFooter(stream_); long startSample = frame.Header.StartingSampleNumber; int count = (int)(end - start); header.StartingSampleNumber = sampleCount_; header.BlockingStrategy = FrameHeader.BLOCKING_STRATEGY_VARIABLE; if (count == header.BlockSize) { frame.Write(outStream_); } else { header.BlockSize = count; frame.Write(outStream_, (int)(start - startSample), count); } trackFrameCount_++; sampleCount_ += header.BlockSize; }