This is janus.c in view mode; [Download] [Up]
#include<stdio.h>
#include<math.h>
#include <carl/carl.h>
#include <carl/defaults.h>
extern int arg_index;
extern char *arg_option;
extern char crack();
extern float sfexpr();
double pi, piovr2;
main(argc, argv)
char **argv;
{
extern double atof();
int otty = isatty(1);
char ch;
long int beg, end, cnt=0;
float srate=FDHISR, output, input, janbeg(), janend();
pi = 4.0 * atan(1.0);
piovr2 = 2.0 * atan(1.0);
while ((ch = crack(argc, argv, "h", 1)) != NULL)
if (ch == 'h')
janushelp(0);
if (getheader(stdin) != NULL)
{
register char *pval;
if ((pval = getprop(stdin, H_SRATE)) != NULL)
srate = atof(pval);
}
arg_index = 0;
while ((ch = crack(argc, argv, "R|", 1)) != NULL)
{
if (ch == 'R')
{ srate = sfexpr(arg_option, 1.0); break; }
}
beg = .05 * srate;
end = .05 * srate;
arg_index = 0;
while ((ch = crack(argc, argv, "R|b|e|h", 0)) != NULL)
{
switch (ch) {
case 'R': break;
case 'b': beg = sfexpr(arg_option, srate); break;
case 'e': end = sfexpr(arg_option, srate); break;
case 'h': janushelp(0);
default: janushelp(1);
}
}
if ((cnt = setbufup(end)) != end)
{
fprintf(stderr, "janus: expected %d samples, but only got %d\n",
end, cnt);
exit(1);
}
cnt = 0;
while (bufup(&input) > 0)
{
if (cnt < beg)
output = janbeg(input, beg);
else
output = input;
if (otty)
printf("%d:\t%f\n", cnt, output);
else
putfloat(&output);
cnt++;
}
while (bufend(&input) > 0)
{
output = janend(input, end);
if (otty)
printf("%d:\t%f\n", cnt++, output);
else
putfloat(&output);
}
if (!otty)
flushfloat();
exit(0);
}
float janbeg(in, beg)
float in; long int beg;
{
static long int cnt = 0;
float rtn;
return(in * 0.5 * (cos(pi * (float) cnt++ / beg + pi) + 1.0));
}
float janend(in, end)
float in; long int end;
{
static long int cnt = 0;
return(in * 0.5 * (sin(pi * (float) cnt++ / end + piovr2) + 1.0));
}
janushelp(ex)
int ex;
{
fprintf(stderr, "%s%s%s%s%s%s%s%s",
"usage: janus [flags] < floatsams > floatsams\n",
" flags:\n",
" -bN\tscale beginning until time N (default= .05sec)\n",
" -eN\tstart ending scaling at time N from end of file (default= .05sec)\n",
" -RN\tset sampling rate for time calculations\n",
"\t(if no header, default= ",
DHISR,
" Hz), flag overrides header)\n"
);
exit(ex);
}
float *buf;
long int len, len1;
setbufup(cnt)
long cnt;
{
register int i=0;
float input;
len = len1 = cnt; /* save global lengths */
buf = (float *) malloc(sizeof(float) * cnt);
if (buf == NULL) {
fprintf(stderr, "janus: out of memory!\n");
exit(1);
}
while (i < cnt && (getfloat(&input) > 0))
buf[i++] = input;
return(i);
}
long int ptr = 0;
bufup(samp)
float *samp;
{
register int rtn;
if (ptr >= len) /* wraparound */
ptr = 0;
*samp = buf[ptr];
if (getfloat(&buf[ptr]) > 0) {
ptr++;
return(1);
} else
return(0);
}
bufend(samp)
float *samp;
{
if (ptr >= len) ptr = 0;
*samp = buf[ptr++];
return(len1--);
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.