00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00014
00015 #ifndef __SNDAUDIOFADER_H__
00016 #define __SNDAUDIOFADER_H__
00017
00018 #import <Foundation/Foundation.h>
00019
00020 #import "SndEnvelope.h"
00021 #import "SndAudioProcessor.h"
00022
00023 @class SndStreamManager;
00024 @class SndStreamMixer;
00025 @class SndAudioProcessor;
00026 @class SndAudioBuffer;
00027
00028 #define SND_FADER_ATTACH_RAMP_RIGHT 1
00029 #define SND_FADER_ATTACH_RAMP_LEFT 2
00030
00031
00032
00033
00034
00035 #define MAX_ENV_POINTS_PER_BUFFER 256
00036
00037 typedef struct _UEE {
00038 double xVal;
00039 int ampFlags;
00040 int balanceFlags;
00041 float ampY;
00042 float balanceY;
00043 float balanceL;
00044 float balanceR;
00045 } SndUnifiedEnvelopeEntry;
00046
00054 enum SndFaderParam {
00055 faderAmp = 0,
00056 faderBalance = 1,
00057 faderNumParams = 2
00058 };
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068 typedef int (*BpBeforeOrEqualIMP)(id, SEL, double);
00069 typedef int (*BpAfterIMP)(id, SEL, double);
00070 typedef int (*FlagsForBpIMP)(id, SEL, int);
00071 typedef float (*YForBpIMP)(id, SEL, int);
00072 typedef float (*YForXIMP)(id, SEL, double);
00073 typedef float (*XForBpIMP)(id, SEL, int);
00074
00114 @interface SndAudioFader : SndAudioProcessor
00115 {
00117 id envClass;
00119 id <SndEnveloping, NSObject> ampEnv;
00121 float staticAmp;
00123 id <SndEnveloping,NSObject> balanceEnv;
00125 float staticBalance;
00126
00128 SndUnifiedEnvelopeEntry *uee;
00129
00131 NSLock *envelopesLock;
00133 NSLock *balanceEnvLock;
00135 NSLock *ampEnvLock;
00136
00137 @public
00139 BpBeforeOrEqualIMP bpBeforeOrEqual;
00141 BpAfterIMP bpAfter;
00143 FlagsForBpIMP flagsForBp;
00145 YForBpIMP yForBp;
00147 YForXIMP yForX;
00149 XForBpIMP xForBp;
00150 }
00151
00161 + (void) setEnvelopeClass: (id) aClass;
00162
00170 + (id) envelopeClass;
00171
00183 - (void) setEnvelopeClass: (id) aClass;
00184
00192 - (id) envelopeClass;
00193
00194
00195
00196
00197
00214 - setBalance: (float) newBalance clearingEnvelope: (BOOL) clear;
00215
00222 - (float) getBalance;
00223
00234 - setAmp: (float) amp clearingEnvelope:(BOOL)clear;
00235
00240 - (float) getAmp;
00241
00242
00243
00244
00245
00257 - setBalance:(float)balance atTime:(double)atTime;
00258
00266 - (float)getBalanceAtTime:(double)atTime;
00267
00280 - setAmp: (float) amp atTime: (double) atTime;
00281
00289 - (float) getAmpAtTime: (double) atTime;
00290
00304 - (BOOL) rampAmpFrom:(float)startRampLevel
00305 to:(float)endRampLevel
00306 startTime:(double)startRampTime
00307 endTime:(double)endRampTime;
00308
00324 - (BOOL) rampBalanceFrom:(float)startRampLevel
00325 to:(float)endRampLevel
00326 startTime:(double)startRampTime
00327 endTime:(double)endRampTime;
00328
00336 - (float) paramValue: (const int) index;
00337
00343 - (NSString *) paramName: (const int) index;
00344
00352 - (void) setParam: (const int) index toValue: (const float) v;
00353
00364 - (BOOL) processReplacingInputBuffer: (SndAudioBuffer *) inB
00365 outputBuffer: (SndAudioBuffer *) outB;
00366
00367 @end
00368
00369 #endif