#include #include #include #include #include #include #include #include typedef struct { int nmarks; /* number of markers */ long *markid; /* list of marker ids */ long *markpos; /* list of marker positions */ char **markname; /* list of marker names */ int haveaesdata; /* was there AES data for the track? */ unsigned char aesdata[24]; /* contains the AES data */ long sampwidth; /* sample width */ long sampfmt; /* sample type */ long nframes; /* total number of samples */ long nchannels; /* number of audio channels */ double rate; /* sample rate */ } track_desc_type; typedef struct { int fd; /* unix file descriptor */ char *filename; /* file name */ AFfilehandle file; /* AF file handle */ long filefmt; /* file format */ long filefmtvers; /* fmt version, if applicable */ track_desc_type track_desc; /* audio track description */ long have_sampler_data; /* was there instrument data */ } file_desc_type; void main(int argc, char **argv) { file_desc_type file_desc; track_desc_type *track_desc; long nframes,counter,filechannels,filesampwidth,filesampfmt; float seconds,point_data; short buffer[2]; AFfilesetup filesetup; AFfilehandle file; char *filename; double filerate; if (argc != 3){ fprintf(stderr,"(;_;) exec format error (;_;)\n"); exit(1); } file_desc.filename = argv[1]; file_desc.fd = open(file_desc.filename, O_RDONLY); file_desc.file = AFopenfd(file_desc.fd, "r", AF_NULL_FILESETUP); file_desc.filefmt = AFgetfilefmt(file_desc.file, &file_desc.filefmtvers); if (file_desc.filefmt != AF_FILE_AIFF){ fprintf(stderr,"(;_;) not AIFF format (;_;)\n"); exit(1); } if (file_desc.file == AF_NULL_FILEHANDLE ) { fprintf(stderr,"(;_;) cannot open file (;_;)\n"); exit(1); } track_desc = &file_desc.track_desc; track_desc->nframes = AFgetframecnt(file_desc.file, AF_DEFAULT_TRACK); track_desc->nchannels = AFgetchannels(file_desc.file, AF_DEFAULT_TRACK); if (track_desc->nchannels != 1 ) { fprintf(stderr,"(;_;) not MONO file! (;_;)\n"); exit(1); } AFgetsampfmt(file_desc.file, AF_DEFAULT_TRACK, &track_desc->sampfmt, &track_desc->sampwidth); track_desc->rate = AFgetrate(file_desc.file, AF_DEFAULT_TRACK); nframes = track_desc->nframes; seconds = (float)nframes / track_desc->rate; printf("\n"); printf(" data format = %d bit linear\n", track_desc->sampwidth); printf(" sampling rate = %7.1f Hz\n", track_desc->rate); printf(" input file = %s\n", file_desc.filename); printf(" total time = %f msec\n", seconds*1000.0); printf(" total samples = %d\n", nframes); printf(" channels = %d\n", track_desc->nchannels); filename = argv[2]; filechannels = 2; filesampwidth = 16; filesampfmt = AF_SAMPFMT_TWOSCOMP; filerate = 44100.0; filesetup = AFnewfilesetup(); AFinitfilefmt(filesetup, AF_FILE_AIFF); AFinitchannels(filesetup, AF_DEFAULT_TRACK, filechannels); AFinitrate(filesetup, AF_DEFAULT_TRACK, filerate); AFinitsampfmt(filesetup, AF_DEFAULT_TRACK, AF_SAMPFMT_TWOSCOMP, filesampwidth); file = AFopenfile(filename, "w", filesetup); for(counter=0;counter Right\n"); printf(" channels = %d\n", filechannels); printf("\n"); AFclosefile(file_desc.file); AFclosefile(file); }