/* Automatically generated from Squeak on (4 January 1998 3:05:25 am ) */ #include "sq.h" /* Memory Access Macros */ #define byteAt(i) (*((unsigned char *) (i))) #define byteAtput(i, val) (*((unsigned char *) (i)) = val) #define longAt(i) (*((int *) (i))) #define longAtput(i, val) (*((int *) (i)) = val) /*** Imported Functions/Variables ***/ extern int stackValue(int); extern int successFlag; /*** Variables ***/ /*** Function Prototypes ***/ int primFMSoundmixSampleCountintostartingAtpan(void); int primPluckedSoundmixSampleCountintostartingAtpan(void); int primSampledSoundmixSampleCountintostartingAtpan(void); int primWaveTableSoundmixSampleCountintostartingAtpan(void); int oldprimSampledSoundmixSampleCountintostartingAtleftVolrightVol(void); int primFMSoundmixSampleCountintostartingAtpan(void) { int rcvr; int n; short int *aSoundBuffer; int startIndex; int pan; int mySample; int sample; int lastIndex; int channelIndex; int i; short int *waveTable; int waveTableSize; int count; int amplitude; int increment; int index; int modulation; int offsetIncrement; int offsetIndex; rcvr = stackValue(4); n = checkedIntegerValueOf(stackValue(3)); aSoundBuffer = arrayValueOf(stackValue(2)); startIndex = checkedIntegerValueOf(stackValue(1)); pan = checkedIntegerValueOf(stackValue(0)); waveTable = fetchArrayofObject(1, rcvr); waveTableSize = fetchIntegerofObject(2, rcvr); count = fetchIntegerofObject(4, rcvr); amplitude = fetchIntegerofObject(6, rcvr); increment = fetchIntegerofObject(8, rcvr); index = fetchIntegerofObject(9, rcvr); modulation = fetchIntegerofObject(11, rcvr); offsetIncrement = fetchIntegerofObject(14, rcvr); offsetIndex = fetchIntegerofObject(15, rcvr); if (!(successFlag)) { return null; } lastIndex = (startIndex + n) - 1; for (i = startIndex; i <= lastIndex; i += 1) { mySample = (amplitude * (waveTable[index - 1])) / 1000; if (pan > 0) { channelIndex = 2 * i; sample = (aSoundBuffer[channelIndex - 1]) + ((mySample * pan) / 1000); if (sample > 32767) { sample = 32767; } if (sample < -32767) { sample = -32767; } aSoundBuffer[channelIndex - 1] = sample; } if (pan < 1000) { channelIndex = (2 * i) - 1; sample = (aSoundBuffer[channelIndex - 1]) + ((mySample * (1000 - pan)) / 1000); if (sample > 32767) { sample = 32767; } if (sample < -32767) { sample = -32767; } aSoundBuffer[channelIndex - 1] = sample; } index = (index + increment) + ((modulation * (waveTable[offsetIndex - 1])) / 1000000); if (index > waveTableSize) { index -= waveTableSize; } if (index < 1) { index += waveTableSize; } offsetIndex += offsetIncrement; if (offsetIndex > waveTableSize) { offsetIndex -= waveTableSize; } } count -= n; storeIntegerofObjectwithValue(4, rcvr, count); storeIntegerofObjectwithValue(9, rcvr, index); storeIntegerofObjectwithValue(15, rcvr, offsetIndex); pop(4); } int primPluckedSoundmixSampleCountintostartingAtpan(void) { int rcvr; int n; short int *aSoundBuffer; int startIndex; int pan; int lastIndex; int channelIndex; int i; int sample; int mySample; int thisIndex; int nextIndex; int count; short int *ring; int ringSize; int ringIndx; rcvr = stackValue(4); n = checkedIntegerValueOf(stackValue(3)); aSoundBuffer = arrayValueOf(stackValue(2)); startIndex = checkedIntegerValueOf(stackValue(1)); pan = checkedIntegerValueOf(stackValue(0)); count = fetchIntegerofObject(2, rcvr); ring = fetchArrayofObject(4, rcvr); ringSize = fetchIntegerofObject(5, rcvr); ringIndx = fetchIntegerofObject(6, rcvr); if (!(successFlag)) { return null; } lastIndex = (startIndex + n) - 1; thisIndex = ringIndx; for (i = startIndex; i <= lastIndex; i += 1) { nextIndex = (thisIndex % ringSize) + 1; mySample = ((ring[thisIndex - 1]) + (ring[nextIndex - 1])) / 2; ring[thisIndex - 1] = mySample; thisIndex = nextIndex; if (pan > 0) { channelIndex = 2 * i; sample = (aSoundBuffer[channelIndex - 1]) + ((mySample * pan) / 1000); if (sample > 32767) { sample = 32767; } if (sample < -32767) { sample = -32767; } aSoundBuffer[channelIndex - 1] = sample; } if (pan < 1000) { channelIndex = (2 * i) - 1; sample = (aSoundBuffer[channelIndex - 1]) + ((mySample * (1000 - pan)) / 1000); if (sample > 32767) { sample = 32767; } if (sample < -32767) { sample = -32767; } aSoundBuffer[channelIndex - 1] = sample; } } ringIndx = nextIndex; count -= n; storeIntegerofObjectwithValue(2, rcvr, count); storeIntegerofObjectwithValue(6, rcvr, ringIndx); pop(4); } int primSampledSoundmixSampleCountintostartingAtpan(void) { int rcvr; int n; short int *aSoundBuffer; int startIndex; int pan; int lastIndex; int i; int channelIndex; int sample; int sampleIndex; int thisSample; short int *samples; int samplesSize; int incrementTimes1000; int count; int indexTimes1000; rcvr = stackValue(4); n = checkedIntegerValueOf(stackValue(3)); aSoundBuffer = arrayValueOf(stackValue(2)); startIndex = checkedIntegerValueOf(stackValue(1)); pan = checkedIntegerValueOf(stackValue(0)); samples = fetchArrayofObject(1, rcvr); samplesSize = fetchIntegerofObject(2, rcvr); incrementTimes1000 = fetchIntegerofObject(3, rcvr); count = fetchIntegerofObject(5, rcvr); indexTimes1000 = fetchIntegerofObject(6, rcvr); if (!(successFlag)) { return null; } lastIndex = (startIndex + n) - 1; i = startIndex; sampleIndex = indexTimes1000 / 1000; while ((sampleIndex <= samplesSize) && (i <= lastIndex)) { thisSample = samples[sampleIndex - 1]; if (pan > 0) { channelIndex = 2 * i; sample = (aSoundBuffer[channelIndex - 1]) + ((thisSample * pan) / 1000); if (sample > 32767) { sample = 32767; } if (sample < -32767) { sample = -32767; } aSoundBuffer[channelIndex - 1] = sample; } if (pan < 1000) { channelIndex = (2 * i) - 1; sample = (aSoundBuffer[channelIndex - 1]) + ((thisSample * (1000 - pan)) / 1000); if (sample > 32767) { sample = 32767; } if (sample < -32767) { sample = -32767; } aSoundBuffer[channelIndex - 1] = sample; } indexTimes1000 += incrementTimes1000; sampleIndex = indexTimes1000 / 1000; i += 1; } count -= n; storeIntegerofObjectwithValue(5, rcvr, count); storeIntegerofObjectwithValue(6, rcvr, indexTimes1000); pop(4); } int primWaveTableSoundmixSampleCountintostartingAtpan(void) { int rcvr; int n; short int *aSoundBuffer; int startIndex; int pan; int lastIndex; int channelIndex; int i; int mySample; int sample; short int *waveTable; int waveTableSize; int count; int amplitude; int increment; int index; rcvr = stackValue(4); n = checkedIntegerValueOf(stackValue(3)); aSoundBuffer = arrayValueOf(stackValue(2)); startIndex = checkedIntegerValueOf(stackValue(1)); pan = checkedIntegerValueOf(stackValue(0)); waveTable = fetchArrayofObject(1, rcvr); waveTableSize = fetchIntegerofObject(2, rcvr); count = fetchIntegerofObject(4, rcvr); amplitude = fetchIntegerofObject(6, rcvr); increment = fetchIntegerofObject(8, rcvr); index = fetchIntegerofObject(9, rcvr); if (!(successFlag)) { return null; } lastIndex = (startIndex + n) - 1; for (i = startIndex; i <= lastIndex; i += 1) { mySample = (amplitude * (waveTable[index - 1])) / 1000; if (pan > 0) { channelIndex = 2 * i; sample = (aSoundBuffer[channelIndex - 1]) + ((mySample * pan) / 1000); if (sample > 32767) { sample = 32767; } if (sample < -32767) { sample = -32767; } aSoundBuffer[channelIndex - 1] = sample; } if (pan < 1000) { channelIndex = (2 * i) - 1; sample = (aSoundBuffer[channelIndex - 1]) + ((mySample * (1000 - pan)) / 1000); if (sample > 32767) { sample = 32767; } if (sample < -32767) { sample = -32767; } aSoundBuffer[channelIndex - 1] = sample; } index += increment; if (index > waveTableSize) { index -= waveTableSize; } } count -= n; storeIntegerofObjectwithValue(4, rcvr, count); storeIntegerofObjectwithValue(9, rcvr, index); pop(4); } int oldprimSampledSoundmixSampleCountintostartingAtleftVolrightVol(void) { int rcvr; int n; short int *aSoundBuffer; int startIndex; int leftVol; int rightVol; int sliceIndex; int sampleIndex; int sample; int s; int lastIndex; int i; int scaledVol; int scaledVolIncr; int scaledVolLimit; int count; short int *samples; int samplesSize; int incrementTimes1000; int indexTimes1000; rcvr = stackValue(5); n = checkedIntegerValueOf(stackValue(4)); aSoundBuffer = arrayValueOf(stackValue(3)); aSoundBuffer -= 1; startIndex = checkedIntegerValueOf(stackValue(2)); leftVol = checkedIntegerValueOf(stackValue(1)); rightVol = checkedIntegerValueOf(stackValue(0)); scaledVol = fetchIntegerofObject(3, rcvr); scaledVolIncr = fetchIntegerofObject(4, rcvr); scaledVolLimit = fetchIntegerofObject(5, rcvr); count = fetchIntegerofObject(7, rcvr); samples = fetchArrayofObject(8, rcvr); samples -= 1; samplesSize = fetchIntegerofObject(10, rcvr); incrementTimes1000 = fetchIntegerofObject(11, rcvr); indexTimes1000 = fetchIntegerofObject(12, rcvr); if (!(successFlag)) { return null; } lastIndex = (startIndex + n) - 1; sliceIndex = startIndex; sampleIndex = indexTimes1000 / 1000; while ((sampleIndex <= samplesSize) && (sliceIndex <= lastIndex)) { sample = ((int) ((samples[sampleIndex]) * scaledVol) >> 15); if (leftVol > 0) { i = (2 * sliceIndex) - 1; s = (aSoundBuffer[i]) + (((int) (sample * leftVol) >> 15)); if (s > 32767) { s = 32767; } if (s < -32767) { s = -32767; } aSoundBuffer[i] = s; } if (rightVol > 0) { i = 2 * sliceIndex; s = (aSoundBuffer[i]) + (((int) (sample * rightVol) >> 15)); if (s > 32767) { s = 32767; } if (s < -32767) { s = -32767; } aSoundBuffer[i] = s; } if (scaledVolIncr != 0) { scaledVol += scaledVolIncr; if (((scaledVolIncr > 0) && (scaledVol >= scaledVolLimit)) || ((scaledVolIncr < 0) && (scaledVol <= scaledVolLimit))) { scaledVol = scaledVolLimit; scaledVolIncr = 0; } } indexTimes1000 += incrementTimes1000; sampleIndex = indexTimes1000 / 1000; sliceIndex += 1; } count -= n; if (!(successFlag)) { return null; } storeIntegerofObjectwithValue(3, rcvr, scaledVol); storeIntegerofObjectwithValue(4, rcvr, scaledVolIncr); storeIntegerofObjectwithValue(7, rcvr, count); storeIntegerofObjectwithValue(12, rcvr, indexTimes1000); pop(5); }