/** * Parsed HCA header. The shape mirrors the on-disk layout * closely so that consumers can re-emit a header if they want, * but unused-by-our-decoder fields (`r01..r08`, `vbrR1/R2`, * etc.) are still surfaced for diagnostic / re-encoding use. */ export interface HcaHeader { /** HCA spec version (u16 BE). Common: 0x0200, 0x0300. */ version: number; /** Offset (in bytes from file start) of the first encoded block. */ dataOffset: number; channelCount: number; samplingRate: number; blockCount: number; blockSize: number; muteHeader: number; muteFooter: number; /** FourCC of the chosen comp block: "comp" or "dec\0". */ compdec: 'comp' | 'dec'; r01: number; r02: number; r03: number; r04: number; r05: number; r06: number; r07: number; r08: number; /** Only set for "dec" headers. */ count1?: number; count2?: number; enableCount2?: number; vbrR1?: number; vbrR2?: number; athType: number; loopStart?: number; loopEnd?: number; loopCount?: number; loopR1?: number; ciphType: number; volume?: number; comment?: string; } /** * Cheap magic check: does the first 4 bytes look like the HCA * `HCA\0` signature (mask the top bits since CriWare sometimes * XORs them). */ export declare function isHca(bytes: Uint8Array): boolean; /** Thrown for malformed / non-HCA inputs. */ export declare class HcaParseError extends Error { constructor(message: string); } /** * Parse an HCA file's header. Does NOT touch the encoded * blocks. Throws {@link HcaParseError} if the buffer isn't an * HCA or contains an out-of-range field. */ export declare function parseHca(bytes: Uint8Array): HcaHeader;