- unsigned char* load_wav(char *name,int& size,int& rate) 
- { 
-         FILE *file; 
-         unsigned char *wave,*snd; 
-         int aa,bb,samples,channels; 
-         int bits,ptr,pd,smp; 
-         bool fl; 
-   
-         file=fopen(name,"rb"); 
-   
-         if(!file) 
-         { 
-                 printf("ERR: Can't open sample (%s)\n",name); 
-                 return NULL; 
-         } 
-          
-         fseek(file,0,SEEK_END); 
-         size=ftell(file); 
-         fseek(file,0,SEEK_SET); 
-          
-         wave=(unsigned char*)malloc(size); 
-   
-         if(!wave) 
-         { 
-                 printf("ERR: Can`t allocate memory.\n"); 
-                 return NULL; 
-         } 
-   
-         fread(wave,size,1,file); 
-         fclose(file); 
-          
-         fl=false; 
-   
-         for(aa=0;aa<size-4;aa++) 
-         { 
-                 if(memcmp(&wave[aa],"RIFF",4)==0) 
-                 { 
-                         fl=true; 
-                         ptr=aa; 
-                         break; 
-                 } 
-         } 
-   
-         if(!fl) 
-         { 
-                 printf("ERR: RIFF chunk not found\n"); 
-                 free(wave); 
-                 return NULL; 
-         } 
-   
-         fl=false; 
-   
-         for(aa=ptr;aa<size-4;aa++) 
-         { 
-                 if(!memcmp(&wave[aa],"WAVEfmt ",8)) 
-                 { 
-                         fl=true; 
-                         ptr=aa; 
-                         break; 
-                 } 
-         } 
-   
-         if(!fl) 
-         { 
-                 printf("ERR: WAVEfmt chunk not found\n"); 
-                 free(wave); 
-                 return NULL; 
-         } 
-   
-         if(read_word(&wave[ptr+12])!=1) 
-         { 
-                 printf("ERR: Only unpacked PCM supported (%s)\n",name); 
-                 free(wave); 
-                 return NULL; 
-         } 
-   
-         channels=read_word(&wave[ptr+14]); 
-         rate=read_dword(&wave[ptr+16]); 
-         bits=read_word(&wave[ptr+26]); 
-   
-         if(channels<1||channels>2) 
-         { 
-                 printf("ERR: Only mono/stereo files supported (%s)\n",name); 
-                 free(wave); 
-                 return NULL; 
-         } 
-   
-         if(bits!=8&&bits!=16) 
-         { 
-                 printf("ERR: Only 8/16bit PCM supported (%s)\n",name); 
-                 free(wave); 
-                 return NULL; 
-         } 
-   
-         switch(rate) 
-         { 
-         case 8000:  rate=27; break;//7918 
-         case 11025: rate=18; break;//11075 
-         case 16000: rate=11; break;//16055 
-         case 22000: 
-         case 22050: rate=7;  break;//21604 
-         case 32000: rate=3;  break;//33018 
-         case 44100: rate=1;  break;//43750 
-         default: 
-                 printf("ERR: Only 44100 Hz or less supported (%s)\n",name); 
-                 free(wave); 
-                 return NULL; 
-         } 
-   
-         fl=false; 
-   
-         for(aa=ptr+28;aa<size-4;aa++) 
-         { 
-                 if(!memcmp(&wave[aa],"data",4)) 
-                 { 
-                         fl=true; 
-                         ptr=aa; 
-                         break; 
-                 } 
-         } 
-   
-         if(!fl) 
-         { 
-                 printf("ERR: DATA chunk not found\n"); 
-                 free(wave); 
-                 return NULL; 
-         } 
-          
-         samples=read_dword(&wave[ptr+4])/channels/(bits>>3); 
-          
-         ptr+=8; 
-          
-         snd=(unsigned char*)malloc(samples+1); 
-          
-         pd=0; 
-   
-         for(aa=0;aa<samples;aa++) 
-         {        
-                 smp=0; 
-   
-                 for(bb=0;bb<channels;bb++) 
-                 { 
-                         switch(bits) 
-                         { 
-                         case 8: 
-                                 smp+=(signed char)(wave[ptr]+128); 
-                                 ptr++; 
-                                 break; 
-   
-                         case 16: 
-                                 smp+=((signed char)wave[ptr+1]); 
-                                 ptr+=2; 
-                                 break; 
-                         } 
-                 } 
-   
-                 smp=0x80+smp/channels; 
-   
-                 if(!smp) ++smp;//т ё¤ьяых эх фюыцэю с√Є№ эєыхщ 
-   
-                 snd[pd++]=smp; 
-         } 
-          
-         snd[pd++]=0;//ъюэхЎ ё¤ьяыр 
-   
-         size=pd; 
-   
-         free(wave); 
-   
-         return snd; 
- }