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

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

#include "../sms.h"

/* function to interpolate two SMS records
 *
 * SMS_DATA *pSmsRecord1            sms record 1
 * SMS_DATA *pSmsRecord2            sms record 2
 * SMS_DATA *pSmsRecordOut          sms output record
 * float fInterpFactor              interpolation factor
 */
int InterpolateSmsRecords (SMS_DATA *pSmsRecord1, SMS_DATA *pSmsRecord2,
                           SMS_DATA *pSmsRecordOut, float fInterpFactor)
{
	int i;
	int nTraj = MIN (pSmsRecord1->nTraj, 
	                 MIN (pSmsRecord2->nTraj, pSmsRecordOut->nTraj));
	float fFreq1, fFreq2;
					 
	if (pSmsRecord1->nCoeff != pSmsRecord2->nCoeff ||
		  pSmsRecord1->nCoeff != pSmsRecordOut->nCoeff)													 
		return -1;
	
	/* interpolate the deterministic part */
	for (i = 0; i < nTraj; i++)
	{
		fFreq1 = pSmsRecord1->pFFreqTraj[i];
		fFreq2 = pSmsRecord2->pFFreqTraj[i];
		if (fFreq1 == 0) fFreq1 = fFreq2;
		if (fFreq2 == 0) fFreq2 = fFreq1;
		pSmsRecordOut->pFFreqTraj[i] = 
			fFreq1 + fInterpFactor * (fFreq2 - fFreq1);
		pSmsRecordOut->pFMagTraj[i] = 
			pSmsRecord1->pFMagTraj[i] + fInterpFactor * 
			(pSmsRecord2->pFMagTraj[i] - pSmsRecord1->pFMagTraj[i]);
	}
	
	/* interpolate the stochastic part */
	if (pSmsRecordOut->pFStocGain)
		*(pSmsRecordOut->pFStocGain) = 
			*(pSmsRecord1->pFStocGain) + fInterpFactor *
			(*(pSmsRecord2->pFStocGain) - *(pSmsRecord1->pFStocGain));
		
	if (pSmsRecordOut->pFStocGain)
		for (i = 0; i < pSmsRecord1->nCoeff; i++)
			pSmsRecordOut->pFStocCoeff[i] = 
				pSmsRecord1->pFStocCoeff[i] + fInterpFactor * 
				(pSmsRecord2->pFStocCoeff[i] - pSmsRecord1->pFStocCoeff[i]);

	return 1;
}

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