public override void Write(FlacStream stream, int blockSize, ref uint[] samples)
        {
            // only one partition
            partitionOrder_ = 0;
            blockSize_ = blockSize;

            stream.Writer.WriteBits(partitionOrder_, PARTITION_ORDER_BITS_COUNT);

            int currentSubframeSample = predictorOrder_;
            RicePartition p = new RicePartition();
            p.EncodingParameter = 0;
            p.Write(stream, GetSampleCount(blockSize_, predictorOrder_, partitionOrder_, true), ref currentSubframeSample, ref samples);
        }
        public override void Read(FlacStream stream, int frameBlockSize, int predictorOrder, ref uint[] samples)
        {
            partitionOrder_ = stream.Reader.ReadBitsAsSByte(PARTITION_ORDER_BITS_COUNT);

            predictorOrder_ = predictorOrder;
            blockSize_ = frameBlockSize;

            int partitionCount = 1 << partitionOrder_; // 2 ^ order
            Validation.IsValid(partitionCount >= 1);

            int currentSubframeSample = predictorOrder;

            int sampleCount0 = GetSampleCount(frameBlockSize, predictorOrder, partitionOrder_, true);
            int sampleCount1 = GetSampleCount(frameBlockSize, predictorOrder, partitionOrder_, false);

            while (partitions_.Count < partitionCount)
            {
                int count = partitions_.Count == 0 ? sampleCount0 : sampleCount1;
                RicePartition partition = new RicePartition();
                partition.Read(stream, count, ref currentSubframeSample, ref samples);
                partitions_.Add(partition);
            }
        }