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 }
|