This is sine.c in view mode; [Download] [Up]
/* * FILE: sine.c * BY: Christopher Lee Fraley (cf0v@spice.cs.cmu.edu) * DESC: Creates sine waves of given period, amplitude, and length. * * 1.0 ( 1-JUN-88) - created. (cf0v) * 2.0 ( 5-JUL-88) - converted to binary sound file format. (cf0v) */ /* * sine <amplitude> <period> <length> [-outfile] * Outputs integer sine wave of maximum <amplitude>, with <period> * samples per period, and <length> number of periods to stdout. Illegal * arguments cause the defaults 32767, 20, and 3 to be used, respectively. * If the flag "-outfile" is present, the output is in binary format to the * named file. If the flag is ommitted, the output is to stdout, and is in * ascii format, one number per line. */ #include <stdio.h> #include <math.h> #include "stdefs.h" #define PERMS 0644 /* -rw-r--r-- */ fails(s, s2) char *s, *s2; { fprintf(stderr, s, s2); exit(1); } main (argc,argv) int argc; char *argv[]; { double Amp, Samps, Perds; int i; if (argc!=4 && argc!=5) fails("format is 'sine %s'\n", "<amplitude> <samples-per-period> <#-of-periods> [-outfile]"); if (!sscanf(*++argv, "%lf", &Amp)) Amp = 32767.0; if (!sscanf(*++argv, "%lf", &Samps)) Samps = 20.0; if (!sscanf(*++argv, "%lf", &Perds)) Perds = 3.0; if (argc==5) { int fout; HWORD *Data, *ptr; unsigned int outLen, len; if (NULL > (fout = creat(*++argv+1, PERMS))) fails("could not create <outfile> '%s'\n", *argv+1); outLen = Samps*Perds*sizeof(HWORD); ptr = Data = (HWORD *)malloc(outLen); if (NULL == Data) fails("could not allocate enough memory for output", ""); for (i=0; i<(Samps*Perds); i++) *ptr++ = (HWORD) (sin(2*PI*i/Samps) * Amp); len = write(fout, (char *)Data, outLen); if (len != outLen) fails("incorrect number of bytes written", ""); } else { for (i=0; i<(Samps*Perds); i++) printf("%d\n", (int)(sin(2*PI*i/Samps)*Amp)); } }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.