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.