annotate tools/convert.c @ 0:5242703e91d3 tip

Initial checkin for AIM92 aimR8.2 (last updated May 1997).
author tomwalters
date Fri, 20 May 2011 15:19:45 +0100
parents
children
rev   line source
tomwalters@0 1 /*
tomwalters@0 2 convert.c
tomwalters@0 3 -----------
tomwalters@0 4 Convert <number><units> to new units given by the "to" option.
tomwalters@0 5 <units> are:
tomwalters@0 6 p sample points
tomwalters@0 7 s time in seconds
tomwalters@0 8 ms time in millisecs
tomwalters@0 9 Hz frequency in Hz
tomwalters@0 10 kHz frequency in kHz
tomwalters@0 11
tomwalters@0 12 Time in seconds or miliseconds is converted to and from sample points using
tomwalters@0 13 the given samplerate. Time (in seconds, miliseconds or samples) is converted
tomwalters@0 14 to and from frequency by reciprocal.
tomwalters@0 15
tomwalters@0 16 Example:
tomwalters@0 17
tomwalters@0 18 Convert 100 samples to time in ms, and the 10ms to a number of samples, both
tomwalters@0 19 at the default sample-rate of 20kHz. Then at a sample-rate of 10kHz print
tomwalters@0 20 the number of samples in 32ms.
tomwalters@0 21
tomwalters@0 22 convert to=ms 100p to=p 10ms samplerate=10kHz to=p 32ms
tomwalters@0 23
tomwalters@0 24 Convert 0.1 seconds to sample points.
tomwalters@0 25
tomwalters@0 26 convert -topoints 0.1sec
tomwalters@0 27 */
tomwalters@0 28
tomwalters@0 29 #include <stdio.h>
tomwalters@0 30 #include <math.h>
tomwalters@0 31 #include "options.h"
tomwalters@0 32 #include "units.h"
tomwalters@0 33 #include "strmatch.h"
tomwalters@0 34
tomwalters@0 35 char applic[] = "Convert units: frequency, time, and sample numbers." ;
tomwalters@0 36 char usage[] = "convert [options] arguments " ;
tomwalters@0 37
tomwalters@0 38 static char *helpstr, *debugstr, *sampstr, *tostr ;
tomwalters@0 39
tomwalters@0 40 static Options option[] = {
tomwalters@0 41 { "help" , "off" , &helpstr , "help" , DEBUG },
tomwalters@0 42 { "debug" , "off" , &debugstr , "debugging switch" , DEBUG },
tomwalters@0 43 { "samplerate", "20kHz" , &sampstr , "samplerate " , VAL },
tomwalters@0 44 { "to" , "points" , &tostr , "convert to <units>" , VAL },
tomwalters@0 45 ( char * ) 0 } ;
tomwalters@0 46
tomwalters@0 47
tomwalters@0 48 int samplerate ;
tomwalters@0 49
tomwalters@0 50 main(argc, argv)
tomwalters@0 51 int argc ;
tomwalters@0 52 char *argv[] ;
tomwalters@0 53 {
tomwalters@0 54 int i, helpunits() ;
tomwalters@0 55
tomwalters@0 56 i = argc ;
tomwalters@0 57 while ( i > 0 ) {
tomwalters@0 58
tomwalters@0 59 if ( i == argc ) /* first time, to account for prog name */
tomwalters@0 60 i = getopts( option, i, &argv[argc-i] ) ;
tomwalters@0 61 else /* subsequent times */
tomwalters@0 62 i = getopts( option, i+1, &argv[argc-i-1] ) ;
tomwalters@0 63 if ( !isoff( helpstr ) )
tomwalters@0 64 helpopts2( helpstr, argv[0], applic, usage, option, helpunits ) ;
tomwalters@0 65
tomwalters@0 66 samplerate = to_Hz( sampstr, 0 ) ;
tomwalters@0 67
tomwalters@0 68 for( ; i > 0 && !isopt( argv[argc-i] ) ; --i )
tomwalters@0 69 convert( argv[argc-i] ) ;
tomwalters@0 70 }
tomwalters@0 71 }
tomwalters@0 72
tomwalters@0 73
tomwalters@0 74 convert( s )
tomwalters@0 75 char *s ;
tomwalters@0 76 {
tomwalters@0 77 switch ( listindex( units, tostr ) ) {
tomwalters@0 78 case (-2) : fprintf(stderr,"ambiguous units [%s]\n", tostr ) ;
tomwalters@0 79 exit( 1 ) ;
tomwalters@0 80 case (-1) : fprintf(stderr,"unknown units [%s]\n", tostr ) ;
tomwalters@0 81 exit( 1 ) ;
tomwalters@0 82 case 0 : /* to points */
tomwalters@0 83 printf( "%dp\n" , (int)to_p( s, samplerate ) ) ;
tomwalters@0 84 break ;
tomwalters@0 85 case 1 : /* to seconds */
tomwalters@0 86 printf( "%.3fs\n" , to_s( s, samplerate ) ) ;
tomwalters@0 87 break ;
tomwalters@0 88 case 2 : /* to ms */
tomwalters@0 89 printf( "%.3fms\n" , to_ms( s, samplerate ) ) ;
tomwalters@0 90 break ;
tomwalters@0 91 case 3 : /* to Hz */
tomwalters@0 92 printf( "%.3fHz\n" , to_Hz( s, samplerate ) ) ;
tomwalters@0 93 break ;
tomwalters@0 94 case 4 : /* to kHz */
tomwalters@0 95 printf( "%.3fkHz\n" , to_kHz( s, samplerate ) ) ;
tomwalters@0 96 break ;
tomwalters@0 97 case 5 : /* to ERB */
tomwalters@0 98 printf( "%.3ferb\n" , to_erb( s ) ) ;
tomwalters@0 99 break ;
tomwalters@0 100 }
tomwalters@0 101 }
tomwalters@0 102
tomwalters@0 103
tomwalters@0 104 helpunits()
tomwalters@0 105 {
tomwalters@0 106 fprintf(stderr,"\nunits: \n");
tomwalters@0 107 fprintf(stderr," points sample points \n");
tomwalters@0 108 fprintf(stderr," seconds time in seconds \n");
tomwalters@0 109 fprintf(stderr," ms time in millisecs \n");
tomwalters@0 110 fprintf(stderr," Hz frequency in Hz \n");
tomwalters@0 111 fprintf(stderr," kHz frequency in kHz \n");
tomwalters@0 112 exit( 1 ) ;
tomwalters@0 113 }