MusicKit  0.0.0
_synthPatchInclude.h
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