/* Dump sounds files from commander keen 1-3 sound file */ /* "Inverse Frequency Sound Format" */ /* https://moddingwiki.shikadi.net/wiki/Inverse_Frequency_Sound_format */ #include #include #include #include #include #define NUM_SOUNDS 64 int main(int argc, char **argv) { unsigned char header[16],info[16],temp_sample[2]; int fd,result,i,j; int file_size,num_sounds,sample,last,count,final; double frequency; char *filename; struct sound_info_type { int offset; int priority; int rate; char name[16]; } sound_info[NUM_SOUNDS]; if (argc>1) { filename=strdup(argv[1]); } else { filename=strdup("sounds.ck1"); } fd=open(filename,O_RDONLY); if (fd<0) { fprintf(stderr,"Error: %s\n",strerror(errno)); return -1; } /* read header */ result=read(fd,header,16); if (result<16) { fprintf(stderr,"Error reading: %s\n",strerror(errno)); return -1; } if ((header[0]=='S') && (header[1]=='N') && (header[2]=='D')) { file_size=(header[4]|(header[5]<<8)); num_sounds=(header[8]|(header[9]<<8)); printf("Detected SND file, %d sounds, %d bytes\n", num_sounds,file_size); } else { fprintf(stderr,"Unknown file format!\n"); return -1; } if (num_sounds>=NUM_SOUNDS) { fprintf(stderr,"Too many sounds %d\n",num_sounds); return -1; } for(i=0;i