This is smsToLisp.c in view mode; [Download] [Up]
#import <sms/sms.h>
/* program written by Celso Mendonca de Aguiar */
#define USAGE "Usage: smsToClm <smsFile> <outputFile>"
main (int ac, char *av[])
{
SMSHeader *pSmsHeader;
char *pData, *outfile, *inputFileName, *namedata;
SMS_DATA smsData;
int iError, havePhs, haveStoch, i, j, Ntrajet, NRec, counter;
float amps, freqs, printfreqs, freqsm1, freqsp1, phs, gain, *freq_aver, Sum, min = 22050.0;
FILE *fp;
if (ac != 3) quit(USAGE);
inputFileName = av[1];
outfile = av[2];
fp = fopen(outfile,"w");
namedata = (char *)strtok (outfile,".");
if((iError = readSmsFile (inputFileName, &pSmsHeader)) < 0)
{
if (iError == SMS_NOPEN) printf("cannot open file");
if (iError == SMS_RDERR) printf("read error");
if (iError == SMS_NSMS) printf("not an SMS file");
if (iError == SMS_MALLOC) printf("cannot allocate memory");
printf("error");
}
havePhs = (!(pSmsHeader->iFormat == FORMAT_HARMONIC ||
pSmsHeader->iFormat == FORMAT_INHARMONIC));
haveStoch = (pSmsHeader->iStochasticType != STOC_NONE);
Ntrajet = pSmsHeader->nTrajectories;
NRec = pSmsHeader->nRecords;
fprintf(fp,"#|\n");
fprintf(fp, "This lisp was generated by smsToClm. \n\n");
fprintf(fp, "HEADER INFORMATION:\n");
fprintf(fp, "Number of records = %d\n", pSmsHeader->nRecords);
fprintf(fp, "Frame rate = %d\n", pSmsHeader->iFrameRate);
fprintf(fp, "Number of trajectories = %d\n", pSmsHeader->nTrajectories);
fprintf(fp, "Number of coefficients = %d\n", pSmsHeader->nStochasticCoeff);
fprintf(fp, "format = %d\n", pSmsHeader->iFormat);
fprintf(fp, "stochastic type = %d\n", pSmsHeader->iStochasticType);
fprintf(fp, "sampling rate = %.0f\n", pSmsHeader->fOriginalSRate);
if (pSmsHeader->nTextCharacters > 0)
{
fprintf(fp, "\nANALYSIS ARGUMENTS:\n");
fprintf(fp, "%s\n", pSmsHeader->pChTextCharacters);
}
fprintf(fp,"|#\n\n");
fprintf(fp, "(defparameter amp-%s (make-array %i :element-type 'array))\n", namedata, Ntrajet);
fprintf(fp, "(defparameter frq-%s (make-array %i :element-type 'array))\n", namedata, Ntrajet);
if (havePhs)
fprintf(fp, "(defparameter pha-%s (make-array %i :element-type 'array))\n", namedata,
Ntrajet);
if (haveStoch)
fprintf(fp, "(defparameter coef-%s (make-array %i :element-type 'array))\n", namedata, NRec);
fprintf(fp,"\n");
for(j = 0; j < Ntrajet; j++)
{
pData = (char *) pSmsHeader + pSmsHeader->iHeadBSize;
fprintf (fp,"(setf (aref amp-%s %i) (make-array %i :initial-contents '(", namedata, j, NRec);
for(i = 0; i < NRec; i++)
{
setSmsRecord (pSmsHeader, pData, &smsData);
amps = TO_MAG (smsData.pFMagTraj[j]);
fprintf (fp,"%f ", amps);
pData += pSmsHeader->iRecordBSize;
}
fprintf (fp,")))\n\n");
}
freq_aver = (float *) malloc(Ntrajet * sizeof(float));
for(j = 0; j < Ntrajet; j++)
{
pData = (char *) pSmsHeader + pSmsHeader->iHeadBSize;
fprintf(fp,"(setf (aref frq-%s %i) (make-array %i :initial-contents '(", namedata, j, NRec);
counter = 0;
Sum = 0;
freqsm1 = 0.0;
setSmsRecord(pSmsHeader, pData, &smsData);
freqs = smsData.pFFreqTraj[j];
for(i = 0; i < NRec; i++)
{
pData += pSmsHeader->iRecordBSize;
setSmsRecord(pSmsHeader, pData, &smsData);
freqsp1 = smsData.pFFreqTraj[j];
printfreqs = freqs;
if (freqs<0.000001 && freqsm1>0.0) printfreqs = freqsm1;
if (freqs<0.000001 && freqsp1>0.0) printfreqs = freqsp1;
Sum = Sum + freqs;
if (freqs>0) counter++;
fprintf(fp,"%f ", printfreqs);
freqsm1 = freqs;
freqs = freqsp1;
}
freq_aver[j] = (float) (Sum / counter);
fprintf(fp,")))\n\n");
}
fprintf (fp,"(defparameter freq-%s '(", namedata);
for (j = 0; j < Ntrajet; j++)
{
if (freq_aver[j] < min) min = freq_aver[j];
fprintf (fp,"%f ", freq_aver[j]);
}
fprintf (fp,"))\n\n(defparameter fund-%s %f)\n\n", namedata, min);
if (havePhs)
{
for (j = 0; j < Ntrajet; j++)
{
pData = (char *) pSmsHeader + pSmsHeader->iHeadBSize;
fprintf (fp,"(setf (aref pha-%s %i) (make-array %i :initial-contents '(", namedata, j, NRec);
for (i = 0; i < NRec; i++)
{
setSmsRecord (pSmsHeader, pData, &smsData);
phs = smsData.pFPhaTraj[j];
fprintf (fp,"%f ", phs);
pData += pSmsHeader->iRecordBSize;
}
fprintf (fp,")))\n\n");
}
}
if (haveStoch)
{
pData = (char *) pSmsHeader + pSmsHeader->iHeadBSize;
fprintf (fp,"(defparameter gain-%s (make-array %i :initial-contents '(", namedata, NRec);
for (i = 0; i < NRec; i++)
{
setSmsRecord (pSmsHeader, pData, &smsData);
gain = TO_MAG (*(smsData.pFStocGain));
fprintf (fp,"%f ", gain);
pData += pSmsHeader->iRecordBSize;
}
fprintf (fp,")))\n\n");
pData = (char *) pSmsHeader + pSmsHeader->iHeadBSize;
for(i = 0; i < NRec; i++)
{
setSmsRecord (pSmsHeader, pData, &smsData);
fprintf (fp,"(setf (aref coef-%s %i) (make-array %i :initial-contents '(0.00 ", namedata, i,
2+pSmsHeader->nStochasticCoeff);
for (j = 0; j < smsData.nCoeff; j++)
{
fprintf (fp,"%f ", smsData.pFStocCoeff[j]);
}
fprintf (fp,"0.00)))\n\n");
pData += pSmsHeader->iRecordBSize;
}
}
exit(0);
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.