#ifndef SOUNDCLIP_H #define SOUNDCLIP_H #include #include #include class SoundClip; typedef std::map clipmap_t; class SoundClip { public : SoundClip(const std::string &nm, int numc=2) : name(nm), framecnt(0), data(0), numchannels(numc) { struct stat s; int rv=stat(nm.c_str(), &s); if (rv) perror("stat() failed"); assert(!rv); int hdrsz=0; if (strstr(nm.c_str(),".wav")) hdrsz=44; framecnt = (s.st_size-hdrsz) / (2*numc); FILE *f=fopen(nm.c_str(),"rb"); assert(f); if (hdrsz) { rv=fseek(f, hdrsz, SEEK_CUR); assert(!rv); } data = new short[numchannels*framecnt]; int datasz = framecnt*2*numchannels; rv=fread(data, datasz, 1, f); assert(rv==1); fclose(f); if (bigendian) { unsigned char tmp; for (int i=0; i