[Asterisk-cvs] zaptel ztmonitor.c,1.6,1.7

markster at lists.digium.com markster at lists.digium.com
Wed Jan 28 17:40:47 CST 2004


Update of /usr/cvsroot/zaptel
In directory mongoose.digium.com:/tmp/cvs-serv30805

Modified Files:
	ztmonitor.c 
Log Message:
ztmonitor enhancements (bug #908)


Index: ztmonitor.c
===================================================================
RCS file: /usr/cvsroot/zaptel/ztmonitor.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- ztmonitor.c	29 Aug 2003 20:33:43 -0000	1.6
+++ ztmonitor.c	28 Jan 2004 23:32:54 -0000	1.7
@@ -138,27 +138,60 @@
 	return fd;
 }
 
-void draw_bar(char *label, int avg)
+#define barlen 35
+#define baroptimal 3250
+//define barlevel 200
+#define barlevel ((baroptimal/barlen)*2)
+#define maxlevel (barlen*barlevel)
+
+void draw_barheader()
 {
-	char bar[35];
-	int left;
-	if (avg > 7500)
-		avg = 7500;
-	memset(bar, '#', sizeof(bar));
-	bar[sizeof(bar) - 1] = '\0';
-	avg /= 200;
-	left = sizeof(bar) - 1 - avg;
-	if (left > 0)
-		memset(bar + avg, ' ', left);
-	printf("%s %s", label, bar);
+	char bar[barlen+5];
+
+	memset(bar, '-', sizeof(bar));
+	memset(bar, '<', 1);
+	memset(bar+barlen+2, '>', 1);
+	memset(bar+barlen+3, '\0', 1);
+
+	strncpy(bar+(barlen/2), "(RX)", 4);
+	printf("%s", bar);
+
+	strncpy(bar+(barlen/2), "(TX)", 4);
+	printf(" %s\n", bar);
+}
+
+void draw_bar(int avg, int max)
+{
+	char bar[barlen+5];
+
+	memset(bar, ' ', sizeof(bar));
+
+	max /= barlevel;
+	avg /= barlevel;
+	if (avg > barlen)
+		avg = barlen;
+	if (max > barlen)
+		max = barlen;
+	
+	if (avg > 0) 
+		memset(bar, '#', avg);
+	if (max > 0) 
+		memset(bar + max, '*', 1);
+
+	bar[barlen+1] = '\0';
+	printf("%s", bar);
 	fflush(stdout);
 }
 
 void visualize(short *tx, short *rx, int cnt)
 {
 	int x;
-	int txavg = 0;
-	int rxavg = 0;
+	float txavg = 0;
+	float rxavg = 0;
+	static int txmax = 0;
+	static int rxmax = 0;
+	static int sametxmax = 0;
+	static int samerxmax = 0;
 	static int txbest = 0;
 	static int rxbest = 0;
 	int ms;
@@ -171,8 +204,8 @@
 		txavg += abs(tx[x]);
 		rxavg += abs(rx[x]);
 	}
-	txavg /= cnt;
-	rxavg /= cnt;
+	txavg = abs(txavg / cnt);
+	rxavg = abs(rxavg / cnt);
 	
 	if (txavg > txbest)
 		txbest = txavg;
@@ -182,14 +215,38 @@
 	/* Update no more than 10 times a second */
 	if (ms < 100)
 		return;
+	
+	/* Save as max levels, if greater */
+	if (txbest > txmax) {
+		txmax = txbest;
+		sametxmax = 0;
+	}
+	if (rxbest > rxmax) {
+		rxmax = rxbest;
+		samerxmax = 0;
+	}
 
 	memcpy(&last, &tv, sizeof(last));
+
 	/* Clear screen */
-	printf("\r");
-	draw_bar("Rx", rxbest);
-	draw_bar("Tx", txbest);
+	printf("\r ");
+	draw_bar(rxbest, rxmax);
+	printf("   ");
+	draw_bar(txbest, txmax);
 	txbest = 0;
 	rxbest = 0;
+	
+	/* If we have had the same max hits for x times, clear the values */
+	sametxmax++;
+	samerxmax++;
+	if (sametxmax > 6) {
+		txmax = 0;
+		sametxmax = 0;
+	}
+	if (samerxmax > 6) {
+		rxmax = 0;
+		samerxmax = 0;
+	}
 }
 
 int main(int argc, char *argv[])
@@ -262,6 +319,13 @@
 			fprintf(stderr, "Unable to monitor: %s\n", strerror(errno));
 			exit(1);
 		}
+	}
+	if (visual) {
+		printf("\nVisual Audio Levels.\n");
+		printf("--------------------\n");
+		printf(" Use zapata.conf file to adjust the gains if needed.\n\n");
+		printf("( # = Audio Level  * = Max Audio Hit )\n");
+		draw_barheader();
 	}
 	/* Now, copy from pseudo to audio */
 	for (;;) {




More information about the svn-commits mailing list