ftp.nice.ch/pub/next/unix/audio/sms.N.bs.tar.gz#/sms/tools/smsToML.c

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

#include "../sms.h"

#define USAGE "Usage: smsToML <smsFile> <outputFile>"

main (int argc, char *argv[])
{
	SMSHeader *pSmsHeader;
	char *pData, *namedata;
	SMS_DATA smsData;
	int iError, i, j;
	float *amps, *freqs, *phs;
	FILE *fp;

	if (argc != 3) 
		quit(USAGE);

	if((iError = readSmsFile(argv[1], &pSmsHeader)) < 0)
	{
		if(iError == SMS_NOPEN)
			quit("cannot open file");
		if(iError == SMS_RDERR)
			quit("read error");
		if(iError == SMS_NSMS)
			quit("not an SMS file");
		if(iError == SMS_MALLOC)
			quit("cannot allocate memory");
		quit("error");
	}	    
    
	fp = fopen(argv[2],"w");
	namedata = (char *)strtok (argv[2],".");

	fprintf(fp,"%% This matlab file was generated by smsToML.\n");
	fprintf(fp,"%% The principal variables defined below are \n");
	fprintf(fp,"%% %s_amps, %s_freqs, ", namedata, namedata);
	fprintf(fp, "(if applicable) %s_phases and %s_coeffs.\n", namedata, namedata);
	fprintf(fp,"%% Also defined are header variables and an args string.\n");
	fprintf(fp,"%% All variable names are prefixed by '%s_'.\n", namedata);

	fprintf(fp,"\n%% HEADER INFORMATION:\n");
	fprintf(fp,"%s_nrec = %d;\n", namedata, pSmsHeader->nRecords);
	fprintf(fp,"%s_framerate = %d;\n", namedata, pSmsHeader->iFrameRate);
	fprintf(fp,"%s_ntraj = %d;\n", namedata, pSmsHeader->nTrajectories);
	fprintf(fp,"%s_nstoccoeffs = %d;\n", namedata, pSmsHeader->nStochasticCoeff);
	fprintf(fp,"%s_format = %d;\n", namedata, pSmsHeader->iFormat);
	fprintf(fp,"%s_stoctype = %d;\n", namedata, pSmsHeader->iStochasticType);
	fprintf(fp,"%s_origsrate = %f;\n", namedata, pSmsHeader->fOriginalSRate);
            
	fprintf(fp,"\n%s_amps = zeros(%s_nrec,%s_ntraj);\n", namedata, namedata, 
	        namedata);
	pData = (char *) pSmsHeader + pSmsHeader->iHeadBSize;
	for(i = 0; i < pSmsHeader->nRecords; i++)
	{
		setSmsRecord(pSmsHeader, pData, &smsData);
		fprintf(fp,"%s_amps(%d,:) = [", namedata, i+1);
		for(j = 0; j < smsData.nTraj; j++)
			fprintf(fp," %.2f", smsData.pFMagTraj[j]);
		fprintf(fp," ];\n");
		pData += pSmsHeader->iRecordBSize;
	}
      
	fprintf(fp,"\n%s_freqs = zeros(%s_nrec, %s_ntraj);\n", namedata, namedata, 
	        namedata);
	pData = (char *) pSmsHeader + pSmsHeader->iHeadBSize;
	for(i = 0; i < pSmsHeader->nRecords; i++)
	{
		setSmsRecord(pSmsHeader, pData, &smsData);
		fprintf(fp,"%s_freqs(%d,:) = [", namedata, i+1);
		for(j = 0; j < smsData.nTraj; j++)
			fprintf(fp," %.2f", smsData.pFFreqTraj[j]);
		fprintf(fp,"];\n");
		pData += pSmsHeader->iRecordBSize;
	}
      
	if (!(pSmsHeader->iFormat == FORMAT_HARMONIC ||
	  pSmsHeader->iFormat == FORMAT_INHARMONIC))
	{
		fprintf(fp,"\n%s_phases = zeros(%s_nrec,%s_ntraj);\n", namedata, namedata, 
	            namedata);
		pData = (char *) pSmsHeader + pSmsHeader->iHeadBSize;
		for(i = 0; i < pSmsHeader->nRecords; i++)
		{
			setSmsRecord(pSmsHeader, pData, &smsData);
			fprintf(fp,"%s_phases(%d,:) = [", namedata, i+1);
			for(j = 0; j < smsData.nTraj; j++)
				fprintf(fp," %.2f", smsData.pFPhaTraj[j]);
			fprintf(fp," ];\n");
			pData += pSmsHeader->iRecordBSize;
		}
	}
	if (pSmsHeader->iStochasticType != STOC_NONE) 
	{		   
		fprintf(fp,"\n%s_stoccoeffs = zeros(%s_nrec, %s_nstoccoeffs);\n", namedata, 
		        namedata, namedata);
		pData = (char *) pSmsHeader + pSmsHeader->iHeadBSize;
		for(i = 0; i < pSmsHeader->nRecords; i++)
		{
			setSmsRecord(pSmsHeader, pData, &smsData);
			fprintf(fp,"%s_stoccoeffs(%d,:) = [", namedata, i+1);
			for(j = 0; j < smsData.nCoeff; j++)
				fprintf(fp," %.4f", smsData.pFStocCoeff[j]);
			fprintf(fp," ];\n");
			pData += pSmsHeader->iRecordBSize;
		} 
		fprintf(fp,"\n%s_stocgain = zeros(1, %s_nrec);\n", namedata, 
		        namedata);
		pData = (char *) pSmsHeader + pSmsHeader->iHeadBSize;
		for(i = 0; i < pSmsHeader->nRecords; i++)
		{
			setSmsRecord(pSmsHeader, pData, &smsData);
			fprintf(fp,"%s_stocgain (%d) = %.4f ;\n", namedata, i+1, 
				*(smsData.pFStocGain));
			pData += pSmsHeader->iRecordBSize; 
		}  
	}   
	fprintf(fp,"\ndisp('Defined variables %s_*.  Say whos for details.');\n",
	        namedata);
 
	exit(0);
}

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