tomwalters@0: /* tomwalters@0: convert.c tomwalters@0: ----------- tomwalters@0: Convert to new units given by the "to" option. tomwalters@0: are: tomwalters@0: p sample points tomwalters@0: s time in seconds tomwalters@0: ms time in millisecs tomwalters@0: Hz frequency in Hz tomwalters@0: kHz frequency in kHz tomwalters@0: tomwalters@0: Time in seconds or miliseconds is converted to and from sample points using tomwalters@0: the given samplerate. Time (in seconds, miliseconds or samples) is converted tomwalters@0: to and from frequency by reciprocal. tomwalters@0: tomwalters@0: Example: tomwalters@0: tomwalters@0: Convert 100 samples to time in ms, and the 10ms to a number of samples, both tomwalters@0: at the default sample-rate of 20kHz. Then at a sample-rate of 10kHz print tomwalters@0: the number of samples in 32ms. tomwalters@0: tomwalters@0: convert to=ms 100p to=p 10ms samplerate=10kHz to=p 32ms tomwalters@0: tomwalters@0: Convert 0.1 seconds to sample points. tomwalters@0: tomwalters@0: convert -topoints 0.1sec tomwalters@0: */ tomwalters@0: tomwalters@0: #include tomwalters@0: #include tomwalters@0: #include "options.h" tomwalters@0: #include "units.h" tomwalters@0: #include "strmatch.h" tomwalters@0: tomwalters@0: char applic[] = "Convert units: frequency, time, and sample numbers." ; tomwalters@0: char usage[] = "convert [options] arguments " ; tomwalters@0: tomwalters@0: static char *helpstr, *debugstr, *sampstr, *tostr ; tomwalters@0: tomwalters@0: static Options option[] = { tomwalters@0: { "help" , "off" , &helpstr , "help" , DEBUG }, tomwalters@0: { "debug" , "off" , &debugstr , "debugging switch" , DEBUG }, tomwalters@0: { "samplerate", "20kHz" , &sampstr , "samplerate " , VAL }, tomwalters@0: { "to" , "points" , &tostr , "convert to " , VAL }, tomwalters@0: ( char * ) 0 } ; tomwalters@0: tomwalters@0: tomwalters@0: int samplerate ; tomwalters@0: tomwalters@0: main(argc, argv) tomwalters@0: int argc ; tomwalters@0: char *argv[] ; tomwalters@0: { tomwalters@0: int i, helpunits() ; tomwalters@0: tomwalters@0: i = argc ; tomwalters@0: while ( i > 0 ) { tomwalters@0: tomwalters@0: if ( i == argc ) /* first time, to account for prog name */ tomwalters@0: i = getopts( option, i, &argv[argc-i] ) ; tomwalters@0: else /* subsequent times */ tomwalters@0: i = getopts( option, i+1, &argv[argc-i-1] ) ; tomwalters@0: if ( !isoff( helpstr ) ) tomwalters@0: helpopts2( helpstr, argv[0], applic, usage, option, helpunits ) ; tomwalters@0: tomwalters@0: samplerate = to_Hz( sampstr, 0 ) ; tomwalters@0: tomwalters@0: for( ; i > 0 && !isopt( argv[argc-i] ) ; --i ) tomwalters@0: convert( argv[argc-i] ) ; tomwalters@0: } tomwalters@0: } tomwalters@0: tomwalters@0: tomwalters@0: convert( s ) tomwalters@0: char *s ; tomwalters@0: { tomwalters@0: switch ( listindex( units, tostr ) ) { tomwalters@0: case (-2) : fprintf(stderr,"ambiguous units [%s]\n", tostr ) ; tomwalters@0: exit( 1 ) ; tomwalters@0: case (-1) : fprintf(stderr,"unknown units [%s]\n", tostr ) ; tomwalters@0: exit( 1 ) ; tomwalters@0: case 0 : /* to points */ tomwalters@0: printf( "%dp\n" , (int)to_p( s, samplerate ) ) ; tomwalters@0: break ; tomwalters@0: case 1 : /* to seconds */ tomwalters@0: printf( "%.3fs\n" , to_s( s, samplerate ) ) ; tomwalters@0: break ; tomwalters@0: case 2 : /* to ms */ tomwalters@0: printf( "%.3fms\n" , to_ms( s, samplerate ) ) ; tomwalters@0: break ; tomwalters@0: case 3 : /* to Hz */ tomwalters@0: printf( "%.3fHz\n" , to_Hz( s, samplerate ) ) ; tomwalters@0: break ; tomwalters@0: case 4 : /* to kHz */ tomwalters@0: printf( "%.3fkHz\n" , to_kHz( s, samplerate ) ) ; tomwalters@0: break ; tomwalters@0: case 5 : /* to ERB */ tomwalters@0: printf( "%.3ferb\n" , to_erb( s ) ) ; tomwalters@0: break ; tomwalters@0: } tomwalters@0: } tomwalters@0: tomwalters@0: tomwalters@0: helpunits() tomwalters@0: { tomwalters@0: fprintf(stderr,"\nunits: \n"); tomwalters@0: fprintf(stderr," points sample points \n"); tomwalters@0: fprintf(stderr," seconds time in seconds \n"); tomwalters@0: fprintf(stderr," ms time in millisecs \n"); tomwalters@0: fprintf(stderr," Hz frequency in Hz \n"); tomwalters@0: fprintf(stderr," kHz frequency in kHz \n"); tomwalters@0: exit( 1 ) ; tomwalters@0: }