#include #include #include #include #include #include #include "track.h" gint gdrdao_get_track_length(gchar* _file, gint* _mm, gint* _ss, gint* _ff) { gchar type; if(_file==NULL) return 1; type=0; /* 0=wav 1=raw */ if(strlen(_file)<=4) { type=1; } else { if( (_file[strlen(_file)-1]=='v'||_file[strlen(_file)-1]=='V') &&(_file[strlen(_file)-2]=='a'||_file[strlen(_file)-2]=='A') &&(_file[strlen(_file)-3]=='w'||_file[strlen(_file)-3]=='W') &&(_file[strlen(_file)-4]=='.')) type=0; }; if(type==0) { gdrdao_get_track_length_wav_(_file,_mm,_ss,_ff); return 0; }; if(type==1) { gdrdao_get_track_length_raw_(_file,_mm,_ss,_ff); return 0; }; return 1; /* can't reach this point, actually */ }; /* get track length of a raw file: * 44100 sampling * 2 bytes * 2 stereo = 176400 bytes per second * = 2352 bytes per frame */ gint gdrdao_get_track_length_raw_(gchar* _file, gint* _mm, gint* _ss, gint* _ff) { struct stat buf; float tmp; gint qtmp; if(_file==NULL||_mm==NULL||_ss==NULL||_ff==NULL) return 1; if(stat(_file,&buf)!=0) return 1; tmp=(float)buf.st_size/(float)2352; /* tmp now holds 'frames' */ *_mm=tmp/4500; /* 4500 frames/minute */ qtmp=(gint)tmp%4500; *_ss=qtmp/75; /* 75 frames/second */ *_ff=qtmp%75; return 0; }; /* adjust this!!! */ gint gdrdao_get_track_length_wav_(gchar* _file, gint* _mm, gint* _ss, gint* _ff) { struct stat buf; float tmp; gint qtmp; if(_file==NULL||_mm==NULL||_ss==NULL||_ff==NULL) return 1; if(stat(_file,&buf)!=0) return 1; tmp=(float)buf.st_size/(float)2352; /* tmp now holds 'frames' */ *_mm=tmp/4500; /* 4500 frames/minute */ qtmp=(gint)tmp%4500; *_ss=qtmp/75; /* 75 frames/second */ *_ff=qtmp%75; return 0; }; gint gdrdao_get_track_length_high(struct gdrdao_trackentry* _use) { if (_use==NULL) return 1; if(_use->endmin==0&&_use->endsec==0&&_use->endfrm==0) { gdrdao_get_track_length(_use->trackfile,&_use->lmin, &_use->lsec,&_use->lfrm); } else { _use->lmin=_use->endmin; _use->lsec=_use->endsec; _use->lfrm=_use->endfrm; }; if(gdrdao_sub_ttime(&_use->lmin,&_use->lsec,&_use->lfrm,_use->strmin, _use->strsec,_use->strfrm)!=0) abort();; return 0; };