#ifndef _clHCA_H #define _clHCA_H #ifdef __cplusplus extern "C" { #endif enum { clHCA_samplesPerBlock = 0x80 * 8 }; /* Must pass at least 8 bytes of data to this function. Returns -1 on non-match, or * positive byte count on success. */ int clHCA_isOurFile0(const void *data); /* Must pass a full header block for success. Returns 0 on success, -1 on failure. */ int clHCA_isOurFile1(const void *data, unsigned int size); /* The opaque state structure. */ typedef struct clHCA clHCA; /* In case you wish to allocate the structure on your own. */ int clHCA_sizeof(); void clHCA_clear(clHCA *, unsigned int ciphKey1, unsigned int ciphKey2); void clHCA_done(clHCA *); /* Or you could let the library allocate it. */ clHCA * clHCA_new(unsigned int ciphKey1, unsigned int ciphKey2); void clHCA_delete(clHCA *); /* Requires a pre-allocated data structure. * Before any decoding may be performed, the header block must be passed in. * The recommended way of doing this is to detect the header length with * clHCA_isOurFile0, validate the header with clHCA_isOurFile1, then pass * it to this function, with the address of 0. * Subsequent decodes with non-zero address are assumed to be sample blocks, * and should be of the blockSize returned by the clHCA_getInfo function. * Returns 0 on success, -1 on failure. */ int clHCA_Decode(clHCA *, void *data, unsigned int size, unsigned int address); /* This is the simplest decode function, for signed and clipped 16 bit samples. * May be called after clHCA_Decode, and will return the same data until the next * block of sample data is passed to clHCA_Decode. */ void clHCA_DecodeSamples16(clHCA *, signed short * outSamples); typedef struct clHCA_stInfo { unsigned int version; unsigned int dataOffset; unsigned int samplingRate; unsigned int channelCount; unsigned int blockSize; unsigned int blockCount; unsigned int loopEnabled; unsigned int loopStart; unsigned int loopEnd; const char *comment; } clHCA_stInfo; /* Retrieve information relevant for decoding and playback with this function. * Must be called after successfully decoding a header block with clHCA_Decode, * or else it will fail. * Returns 0 on success, -1 on failure. */ int clHCA_getInfo(clHCA *, clHCA_stInfo *out); #ifdef __cplusplus } #endif #endif