00001
00002
00003
00004
00005 #ifndef __WAV_H__
00006 #define __WAV_H__
00007
00008 #define SWAP_WORD(w) (((w>>8)&0xff)|((w<<8)&0xff00))
00009 #define SWAP_LONG(l) (((l>>24)&0xff)|((l>>8)&0xff00)|\
00010 ((l<<8)&0xff0000)|((l<<24)&0xff000000))
00011
00012 #define WAV_State_Hdr 0
00013 #define WAV_State_Data 1
00014
00015 typedef struct
00016 {
00017 unsigned char chunk_content[4];
00018 }
00019 RIFF_CHUNK_HEADER;
00020
00021 typedef struct
00022 {
00023 unsigned short format;
00024 unsigned short nb_channel;
00025 unsigned long sample_rate;
00026 unsigned long byte_per_sec;
00027 unsigned short byte_per_sample;
00028 unsigned short bit_per_sample;
00029 }
00030 FMT_CHUNK_HEADER;
00031
00032 typedef struct
00033 {
00034 unsigned char type[4];
00035 unsigned long length;
00036 union {
00037 RIFF_CHUNK_HEADER riff;
00038 FMT_CHUNK_HEADER fmt;
00039 }
00040 chunk;
00041 }
00042 COMMON_CHUNK_HEADER;
00043
00044 typedef struct
00045 {
00046 FILE *file;
00047 FMT_CHUNK_HEADER fmt;
00048 unsigned int length;
00049 int modified;
00050 }
00051 WAV;
00052
00053
00054
00055 extern void kb_wav_init( WAV * wav );
00056
00057 extern int kb_wav_open( WAV * wav , const char * file , int read );
00058
00059 extern void kb_wav_close( WAV * wav );
00060
00061 extern int kb_wav_read_data( WAV * wav ,
00062 void * buf , unsigned int size );
00063
00064 extern int kb_wav_write_data( WAV * wav ,
00065 void * buf , unsigned int len );
00066
00067 extern void kb_wav_set_format( WAV * wav ,
00068 unsigned short format ,
00069 unsigned short nb_channel ,
00070 unsigned long sample_rate ,
00071 unsigned short bit_per_sample );
00072
00073 extern int kb_wav_read_hdr( WAV * wav , COMMON_CHUNK_HEADER * hdr );
00074
00075 extern int kb_wav_write_hdr( WAV * wav , COMMON_CHUNK_HEADER * hdr );
00076
00077 extern void kb_wav_dump_format( WAV * wav );
00078
00079 #endif