/* Raw audio file format library */ #ifndef RAW_H #define RAW_H #include /* * Master version number: */ #define RawLibraryVersionMajor 1 #define RawLibraryVersionMinor 1 /* * Raw library function error codes: */ #define RawSuccess 0 #define RawErrorNoAccess 1 #define RawErrorNotRaw 2 #define RawErrorNoBuffers 3 #define RawErrorCorrupt 4 #define RawErrorUnsupported 5 #define RawErrorBadValue 6 #define RawErrorNoData 7 #define RawErrorEndOfData 8 /* * Byte value shift options for RawReadPartialData(): */ #define RawReadUnsigned8 0 #define RawReadSigned8 1 /* * Raw data structure */ typedef struct { char *filename; FILE *fp; int sample_size; int channels; int sample_rate; int block_align; off_t data_offset; /* Number of bytes to skip * untill actual data. */ off_t data_length; /* Length of audio data in bytes. */ /* Data loaded by RawReadPartialData(). */ char *data; /* The actual audio data. */ off_t data_len; } raw_data_struct; /* * Checks if givin file name is a valid RAW file, returns * RawSuccess if it is, RawErrorNotRaw if it is not a valid * RAW file, or appropriate error if an error occured. */ extern int RawIsFileRaw(const char *filename); /* * Reads the header from the stream fp and initializes the given * rd structure if fp is valid and a raw file. * * The given filename is used only for referance purposes, it can be * NULL. * * If RawSuccess is returned then the given fp will be transfered * to the rd structure and should not be referanced again. For all * other return values, the calling function is responsible for * closing the given fp. */ extern int RawReadHeader( const char *filename, FILE *fp, raw_data_struct *rd ); /* * Reads a segment of data from the RAW file specified by * the filename member of the givin raw_data_struct *rd structure. * * The raw_data_struct *rd structure MUST HAVE VALID VALUES FROM * A PRIOR SUCCESSFUL CALL TO RawReadHeader(). * * offset is the relative byte position FROM THE START OF THE AUDIO * DATA AS A COMPLETE TRACK and not a position in the file. * This value must be positive. * * max_chunk_size is the number of bytes that you want to read from * offset. This value must be positive and greater than 0. * * read_opt is not used currently. * * The loaded data will be placed into the member data of the * raw_data_struct *rd with the member data_len set appropriately. * If member data is not NULL, then the old data will be first free()ed * automatically before loading is performed. */ extern int RawReadPartialData( raw_data_struct *rd, long offset, /* In bytes. */ long max_chunk_size, /* In bytes. */ int read_opt ); /* * Frees all allocated data and resets all values of the * raw_data_struct *rd members. * * If raw_data_struct *rd is NULL then no action will be taken. */ extern void RawDestroyData(raw_data_struct *rd); #endif /* RAW_H */