ftp.nice.ch/pub/next/unix/audio/cmusic.bs.N.tar.gz#/src/frm/rms.c

This is rms.c in view mode; [Download] [Up]

#include <stdio.h>
#include <math.h>
#include <carl/carl.h>

main(narg,argv) int narg; char *argv[]; 
{
float rms = 0;
float input;
long n = 0;
int otty = isatty(1), putout = 0;
char ch;
int dBrms = 0;

if (isatty(0))
	usage(1);

while ((ch = crack(narg, argv, "ehd|", 0)) != NULL) {
	switch (ch) {
		case 'e':	
			putout++;
			break;
		case 'd':
			dBrms++;
			break;
		case 'h':
			usage(0);
		default:
			usage(1);
	}
}

if (otty && putout) {
	fprintf(stderr, "rms: for -e, output must be file or pipe.\n");
	exit(1);
}

while ( getfloat(&input) > 0) {
	if (putout)
		putfloat(&input);
	rms += input * input;
	n++;
}

if (putout)
	flushfloat();
fprintf(putout ? stderr : stdout, "%f\n", 
	(double)(dBrms ? 10.0*log10(rms/n) : sqrt(rms/n)));
}

usage(x)
	int x;
{
	fprintf(stderr, "%s%s%s",
		"usage:\n",
		"\trms [-dB] < floatsams > rms (ASCII numbers)\n",
		"\trms -e [-dB]  < floatsams > floatsams, and >& rms\n");
	fprintf(stderr,"input must be a file or pipe of floatsams.\n");
	exit(x);
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.