Changeset 3025:e0985044be84 in roaraudio for roarclients/roarvumeter.c
- Timestamp:
- 11/01/09 10:49:24 (15 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
roarclients/roarvumeter.c
r3024 r3025 32 32 #define BUFSIZE 1024 33 33 34 #define MODE_PC 1 35 #define MODE_DB 2 34 #define MODE_PC 0x01 35 #define MODE_DB 0x02 36 #define MODE_BEAT 0x04 36 37 37 38 void usage (void) { … … 51 52 52 53 int vumeter16bit2ch (struct roar_vio_calls * vio, int samples, int16_t * buf, int mode, struct roardsp_filterchain * fc) { 54 struct roar_stream beat_stream[1]; 55 struct roardsp_filter beat_lp[1]; 56 float beat_lpfreq = 1; 53 57 int i; 54 58 int samples_half = samples/2; 55 59 int64_t suml, sumr; 56 60 double rmsl, rmsr; 57 int run_filters = roardsp_fchain_num(fc); 61 int run_filters = roardsp_fchain_num(fc); 62 int beat_detection = mode & MODE_BEAT; 63 char * beat[2] = {" ", "Beat!"}; 64 char * dbeat = beat[0]; 65 int16_t beat_val, beat_old; 66 67 if ( beat_detection ) { 68 mode -= MODE_BEAT; 69 70 roar_stream_new(beat_stream, 10, 1, 16, ROAR_CODEC_PCM); 71 roardsp_filter_init(beat_lp, beat_stream, ROARDSP_FILTER_LOWP); 72 roardsp_filter_ctl(beat_lp, ROARDSP_FCTL_FREQ, &beat_lpfreq); 73 } 58 74 59 75 printf("\e[s"); … … 75 91 rmsr = sqrt((double)sumr/(double)samples_half); 76 92 93 if ( beat_detection ) { 94 beat_old = beat_val = (rmsl + rmsr) / 2; 95 roardsp_filter_calc(beat_lp, &beat_val, 2); 96 if ( (float)beat_old > (float)beat_val*1.15f ) { 97 dbeat = beat[1]; 98 } else { 99 dbeat = beat[0]; 100 } 101 } 102 77 103 switch (mode) { 78 104 case MODE_PC: 79 printf("L: %3i%% R: %3i%% \e[u", (int)(rmsl/327.68), (int)(rmsr/327.68));105 printf("L: %3i%% R: %3i%% %s \e[u", (int)(rmsl/327.68), (int)(rmsr/327.68), dbeat); 80 106 break; 81 107 case MODE_DB: 82 printf("L: %6.2fdB R: %6.2fdB \e[u", 20*log10(rmsl/32768.), 20*log10(rmsr/32768.));108 printf("L: %6.2fdB R: %6.2fdB %s \e[u", 20*log10(rmsl/32768.), 20*log10(rmsr/32768.), dbeat); 83 109 break; 84 110 } … … 86 112 fflush(stdout); 87 113 } 114 115 roardsp_filter_uninit(beat_lp); 116 88 117 return 0; 89 118 } … … 125 154 struct roar_vio_calls stream, re; 126 155 int i; 127 int mode = MODE_PC;156 int mode = 0; 128 157 129 158 for (i = 1; i < argc; i++) { … … 141 170 samples = atoi(argv[++i]); 142 171 } else if ( strcmp(k, "--db") == 0 ) { 143 mode = MODE_DB; 172 mode |= MODE_DB; 173 } else if ( strcmp(k, "--beat") == 0 ) { 174 mode |= MODE_BEAT; 144 175 } else if ( strcmp(k, "--lowpass") == 0 ) { 145 176 lowpass_freq = atof(argv[++i]); … … 154 185 } 155 186 187 if ( !mode ) 188 mode = MODE_PC; 189 156 190 if ( samples == -1 ) 157 191 samples = rate/10;
Note: See TracChangeset
for help on using the changeset viewer.