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

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

#include "../sms.h"

#define USAGE "Usage: smsPrint [-t type-format][-i initial-time][-e end-time][-f first-trajectory][-l last-trajectory] <smsFile>"

main (int argc, char *argv[])
{
	SMSHeader *pSmsHeader;
	char *pData;
	SMS_DATA smsData;
	int iError, i, j, iFormat = 1, iFirstFrame = 0, iLastFrame = -1, 
		iFirstTraj = 0, iLastTraj = -1;
    float fInitialTime = 0, fEndTime = 0;

	for (i=1; i<argc-1; i++) 
	{
		if (*(argv[i]++) == '-') 
		{
			switch (*(argv[i]++)) 
			{
				case 't': if (sscanf(argv[i],"%d", 
				              &iFormat) < 1)
					quit("Invalid format");
					break;
				case 'i': if (sscanf(argv[i],"%f", 
				              &fInitialTime) < 0)
					quit("Invalid initialTime");
					break;
				case 'e': if (sscanf(argv[i],"%f", 
				              &fEndTime) < 0)
					quit("Invalid EndTime");
					break;
				case 'f': if (sscanf(argv[i],"%d", 
				              &iFirstTraj) < 0)
					quit("Invalid FirstTraj");
					break;
				case 'l': if (sscanf(argv[i],"%d", 
				              &iLastTraj) < 0)
					quit("Invalid LastTraj");
					break;

				default:   quit(USAGE);
			}
		}
	}

	if (argc <= 1) 
		quit(USAGE);

	if((iError = readSmsFile(argv[argc-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");
	}	    
    
    
	pData = (char *) pSmsHeader + pSmsHeader->iHeadBSize;
	printf("HEADER INFORMATION:\n");
	printf("Number of records = %d\n", pSmsHeader->nRecords);
	printf("Frame rate = %d\n", pSmsHeader->iFrameRate);
	printf("Number of trajectories = %d\n", pSmsHeader->nTrajectories);
	printf("Number of stochastic coefficients = %d\n",
    	   pSmsHeader->nStochasticCoeff);
	printf("Format = %d\n", pSmsHeader->iFormat);
	printf("Stochastic type = %d\n", pSmsHeader->iStochasticType);
	printf("Original sampling rate = %.0f\n", pSmsHeader->fOriginalSRate);  

	if (pSmsHeader->nTextCharacters > 0)
	{
		printf("\nANALISIS ARGUMENTS:\n");
		printf("%s\n", pSmsHeader->pChTextCharacters);
	} 

	iFirstFrame = 
		MIN (pSmsHeader->nRecords - 1, fInitialTime * pSmsHeader->iFrameRate);
	if (fEndTime > 0) 
		iLastFrame = 
		MIN (fEndTime * pSmsHeader->iFrameRate, pSmsHeader->nRecords);
	else
		iLastFrame = pSmsHeader->nRecords; 

	if (iFirstTraj > 0)
		iFirstTraj = MIN (pSmsHeader->nTrajectories, iFirstTraj);

	if (iLastTraj >= 0)
		iLastTraj = MIN (pSmsHeader->nTrajectories, iLastTraj);
	else
		iLastTraj = pSmsHeader->nTrajectories;

	if (iFormat == 2)
	{
		printf("\n Fr.   sec.     ");
		for(j = iFirstTraj; j < iLastTraj; j++)
				printf("Traj %2d    ", j);
		printf("\n");
	}

	pData = pData + iFirstFrame * pSmsHeader->iRecordBSize;
	for(i = iFirstFrame; i < iLastFrame; i++)
	{
		setSmsRecord (pSmsHeader, pData, &smsData);
		printf("\n#%3d {%1.3f}: ", i, (float) i / pSmsHeader->iFrameRate);
		if (iFormat != 2) printf("\ndet: ");
		if (iFormat != 3 && 
		    (pSmsHeader->iFormat == FORMAT_HARMONIC ||
		    pSmsHeader->iFormat == FORMAT_INHARMONIC))
			for(j = iFirstTraj; j < iLastTraj; j++)
				printf("%5.0f[%2.0f]  ", smsData.pFFreqTraj[j], 
				       smsData.pFMagTraj[j]);
		else
			for(j = iFirstTraj; j < iLastTraj; j++)
				printf("%.0f[%.0f, %.0f]  ", smsData.pFFreqTraj[j], 
				smsData.pFMagTraj[j], smsData.pFPhaTraj[j]);

		if (iFormat != 2 && pSmsHeader->iStochasticType != STOC_NONE)
		{	
			printf("\n");
			printf("stocg: %.0f\n", *(smsData.pFStocGain));
      		printf("stocc: ");
      		for(j = 0; j < smsData.nCoeff; j++)
        	printf("%1.3f  ", smsData.pFStocCoeff[j]);
    	}   
    	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.