MusicKit
0.0.0
|
00001 /* 00002 $Id$ 00003 00004 Defined In: The MusicKit 00005 Description: 00006 (See discussion below) 00007 00008 Original Author: David A. Jaffe 00009 00010 Copyright (c) 1988-1992, NeXT Computer, Inc. 00011 Portions Copyright (c) 1994 NeXT Computer, Inc. and reproduced under license from NeXT 00012 Portions Copyright (c) 1994 Stanford University. 00013 Portions Copyright (c) 1999-2001, The MusicKit Project. 00014 */ 00015 /* 00016 Modification history: 00017 00018 $Log$ 00019 Revision 1.3 2001/09/10 17:38:28 leighsmith 00020 Added abstracts from IntroSynthPatches.rtf 00021 00022 Revision 1.2 2001/09/08 20:22:09 leighsmith 00023 Merged RTF Reference documentation into headerdoc comments and prepended MK to any older class names 00024 00025 09/19/89/daj - Changed macros to use Note C-function parameter access. 00026 10/3/93/daj - Got rid of some unused macros (FREQ_SCALE, TWO_TO_M_23) 00027 */ 00028 #ifndef __MK__synthPatchInclude_H___ 00029 #define __MK__synthPatchInclude_H___ 00030 00031 /* Various useful macros for SynthPatches. */ 00032 00033 #import <string.h> 00034 00035 /* Global temporary variables */ 00036 extern int _MKSPiVal; 00037 extern double _MKSPdVal; 00038 extern id _MKSPoVal; 00039 extern NSString *_MKSPsVal; 00040 00041 /* Macros for checking the validity of parameter values. I return 0 or 1 00042 so that these expressions can be bitwise-ored as well as used as boolean 00043 expressions. */ 00044 00045 #define iValid(intPar) ((intPar) != MAXINT) 00046 #define dValid(dblPar) (!MKIsNoDVal(dblPar)) 00047 #define oValid(objPar) ((objPar) != nil) 00048 #define sValid(strPar) ((strPar) && [((NSString *)strPar) length]) 00049 00050 /* Macros for retrieving parameter values */ 00051 00052 #define doublePar(note,par,default) \ 00053 (dValid (_MKSPdVal=MKGetNoteParAsDouble(note,par)) ? _MKSPdVal : default) 00054 #define intPar(note,par,default) \ 00055 (iValid (_MKSPiVal=MKGetNoteParAsInt(note,par)) ? _MKSPiVal : default) 00056 #define envPar(note,par,default) \ 00057 (oValid (_MKSPoVal=MKGetNoteParAsEnvelope(note,par)) ? _MKSPoVal : default) 00058 #define wavePar(note,par,default) \ 00059 (oValid (_MKSPoVal=MKGetNoteParAsWaveTable(note,par)) ? _MKSPoVal : default) 00060 #define stringParNoCopy(note,par,default) \ 00061 (sValid (_MKSPsVal=MKGetNoteParAsStringNoCopy(note,par)) ? _MKSPsVal : default) 00062 00063 /* The following macros first check if a parameter is present in the note. 00064 If so, they update a variable and return true. If not, they leave the 00065 variable alone and return false. */ 00066 00067 #define updateDoublePar(note, par, var) \ 00068 (dValid (dValid (_MKSPdVal=MKGetNoteParAsDouble(note,par)) ? (var=_MKSPdVal) : MK_NODVAL)) 00069 #define updateIntPar(note, par, var) \ 00070 (iValid (iValid (_MKSPiVal=MKGetNoteParAsInt(note,par)) ? (var=_MKSPiVal) : MAXINT)) 00071 #define updateEnvPar(note, par, var) \ 00072 (oValid (oValid (_MKSPoVal=MKGetNoteParAsEnvelope(note,par)) ? (var=_MKSPoVal) : nil)) 00073 #define updateWavePar(note, par, var) \ 00074 (oValid (oValid (_MKSPoVal=MKGetNoteParAsWaveTable(note,par)) ? (var=_MKSPoVal) : nil)) 00075 #define updateStringParNoCopy(note, par, var) \ 00076 (sValid (sValid (_MKSPsVal=MKGetNoteParAsStringNoCopy(note,par)) ? (var=_MKSPsVal) : @"")) 00077 00078 #define updateFreq(note, var) \ 00079 (dValid (dValid (_MKSPdVal=[note freq]) ? (var=_MKSPdVal) : MK_NODVAL)) 00080 00081 #define volumeToAmp(vol) pow(10.,((double)vol-127.0)/64.0) 00082 00083 #endif