Retired Document
Important: This sample code may not represent best practices for current development. The project may use deprecated symbols and illustrate technologies and techniques that are no longer recommended.
FlatInstrumentTest.c
#include <QuickDraw.h> |
#include <types.h> |
#include <Resources.h> |
#include <Memory.h> |
#include <math.h> |
#include "FlatInstrumentTest.h" |
static void FillInFlatFieldsMostly(SingleFlatInstrument *f) |
/* |
* Fill in fields, but not the snd fields |
*/ |
{ |
short i; |
f->z1 = 0; |
f->z2 = 0; |
f->z3 = 0; |
f->z4 = 0; |
for(i = 0; i < 12; i++) |
f->z[i] = 0; |
f->tone.synthesizerType = 'ss '; |
f->tone.synthesizerName[0] = 0; |
f->tone.instrumentName[0] = 0; |
f->tone.instrumentNumber = 0; |
f->tone.gmNumber = 1; |
f->quality = 5; |
f->transpose = 1; |
f->volumeAttackRate = 10; |
f->volumeDecayRate = 400; |
f->volumeSustainLevel = 38174; |
f->volumeNaturalDecayRate = 64640; |
f->volumeReleaseRate = 250; |
f->k1 = 1; |
f->k127 = 127; |
f->maxInterpolation = 0; |
f->k124 = 124; |
} |
FlatInstrument *CreateFlatInstrument(void) |
{ |
SingleFlatInstrument *f; |
long i; |
#define kSampleLength 40000 |
f = (SingleFlatInstrument *) |
NewPtrClear(sizeof(SingleFlatInstrument) + kSampleLength); |
FillInFlatFieldsMostly(f); |
/* |
* Fill in the 'snd ' |
*/ |
f->k0x00010001 = 0x00010001; |
f->k0x00050000 = 0x00050000; |
f->k0x00A00001 = 0x00A00001; |
f->k0x80510000 = 0x80510000; |
f->k0x00000014 = 0x00000014; |
f->z5 = 0; |
#define kSampleLength 40000 |
f->sampleLength = kSampleLength; |
f->sampleRate = 0x56ee8ba3; |
f->loopStart = kSampleLength - 2 - 2044; |
f->loopEnd = kSampleLength - 2; |
f->midiKey = 50; |
for(i = 0; i < 256; i++) |
f->sample[i] = Random(); |
for(i = 256; i < kSampleLength; i++) |
f->sample[i] = (f->sample[i-256] + f->sample[i-255] + 1) >> 1; |
#if 0 |
for(i = 0; i < kSampleLength; i++) |
{ |
double a,b,c; |
long k; |
a = i; |
a = a/30; |
b = i; |
b = b / 30 + 8 * sin(b/19); |
c = i; |
c = c * c / 4000.0 ; |
a = sin(a) * sin(b) * 127 + 128; |
// a = sin(a) * sin(b) * sin(c) * 127 + 128; |
k = a; |
f->sample[i] = k; |
} |
#endif |
f->size = ((char *)(&f->sample[i])) - ((char *)(&f->size)); |
return (FlatInstrument *)f; |
} |
FlatInstrument *CreateFlatInstrumentFromSnd(short id) |
{ |
Handle snd; |
SingleFlatInstrument *f; |
long sndSize,flatSize; |
f = 0; |
snd = GetResource('snd ',id); |
if(!snd) |
goto goHome; |
sndSize = GetHandleSize(snd); |
flatSize = sndSize + kFlatInstrumentNoSndSize; |
f = (SingleFlatInstrument *)NewPtrClear(flatSize); |
if(!f) |
goto goHome; |
FillInFlatFieldsMostly(f); |
BlockMove(*snd,&f->k0x00010001,sndSize); |
f->size = flatSize - sizeof(ToneDescription); |
ReleaseResource(snd); |
goHome: |
return (FlatInstrument *)f; |
} |
Copyright © 2003 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2003-01-14