/// <summary>Marshals a FLAC LPC subframe</summary>
        /// <param name="frameHandle">Handle to unmanaged memory containing the frame</param>
        /// <param name="offset">Offset at which to begin reading this subframe</param>
        /// <returns>The marshaled LPC subframe</returns>
        private static LpcSubframe marshalLpcSubframe(IntPtr frameHandle, int offset)
        {
            LpcSubframe lpcSubframe = new LpcSubframe();

            lpcSubframe.EntropyCodingMethod = marshalEntropyCodingMethod(frameHandle, offset);
            lpcSubframe.Order = Marshal.ReadInt32(frameHandle, offset + 12);
            lpcSubframe.QlpCoefficientPrecision = Marshal.ReadInt32(frameHandle, offset + 16);
            lpcSubframe.QuantizationLevel       = Marshal.ReadInt32(frameHandle, offset + 20);

            offset += 24;

            // Marshal the array of QLP Coefficients
            lpcSubframe.QlpCoefficients = new int[Constants.MaximumLpcOrder];
            for (
                int index = 0; index < Constants.MaximumLpcOrder; ++index
                )
            {
                lpcSubframe.QlpCoefficients[index] = Marshal.ReadInt32(
                    frameHandle, offset + index * 4
                    );
            }

            offset += Constants.MaximumLpcOrder * 4;

            // Marshal the Warmup values for the LPC decoder
            lpcSubframe.Warmup = new int[Constants.MaximumLpcOrder];
            for (
                int index = 0; index < Constants.MaximumLpcOrder; ++index
                )
            {
                lpcSubframe.Warmup[index] = Marshal.ReadInt32(
                    frameHandle, offset + index * 4
                    );
            }

            offset += Constants.MaximumLpcOrder * 4;

            lpcSubframe.Residual = null;

            return(lpcSubframe);
        }
    /// <summary>Marshals a FLAC LPC subframe</summary>
    /// <param name="frameHandle">Handle to unmanaged memory containing the frame</param>
    /// <param name="offset">Offset at which to begin reading this subframe</param>
    /// <returns>The marshaled LPC subframe</returns>
    private static LpcSubframe marshalLpcSubframe(IntPtr frameHandle, int offset) {
      LpcSubframe lpcSubframe = new LpcSubframe();

      lpcSubframe.EntropyCodingMethod = marshalEntropyCodingMethod(frameHandle, offset);
      lpcSubframe.Order = Marshal.ReadInt32(frameHandle, offset + 12);
      lpcSubframe.QlpCoefficientPrecision = Marshal.ReadInt32(frameHandle, offset + 16);
      lpcSubframe.QuantizationLevel = Marshal.ReadInt32(frameHandle, offset + 20);

      offset += 24;

      // Marshal the array of QLP Coefficients
      lpcSubframe.QlpCoefficients = new int[Constants.MaximumLpcOrder];
      for(
        int index = 0; index < Constants.MaximumLpcOrder; ++index
      ) {
        lpcSubframe.QlpCoefficients[index] = Marshal.ReadInt32(
          frameHandle, offset + index * 4
        );
      }

      offset += Constants.MaximumLpcOrder * 4;

      // Marshal the Warmup values for the LPC decoder
      lpcSubframe.Warmup = new int[Constants.MaximumLpcOrder];
      for(
        int index = 0; index < Constants.MaximumLpcOrder; ++index
      ) {
        lpcSubframe.Warmup[index] = Marshal.ReadInt32(
          frameHandle, offset + index * 4
        );
      }

      offset += Constants.MaximumLpcOrder * 4;

      lpcSubframe.Residual = null;

      return lpcSubframe;
    }