#ifdef
Conditional reading of code.
Macros are textual replacements which are made in the orchestra as it is being read. The orchestra macro system in Csound is a very simple one, and uses the characters # and $ to define and call macros. This can save typing, and can lead to a coherent structure and consistent style. This is similar to, but independent of, the macro system in the score language.
If a macro is defined then #ifdef can incorporate text into an orchestra upto the next #end.
Syntax
#ifdef NAME
....
#else
....
#end
Note that the #ifdef can be nested, like in the C preprocessor language.
Examples
Here is a simple example of the conditional.
Simple example of the #ifdef form.#define debug ##
instr 1
#ifdef debug
print "calling oscil"
#end
a1 oscil 32000,440,1
out a1
endin
Here is another example of the #ifdef conditional. It uses the file ifdef.csd.
Detailed example of the #ifdef form. |
---|
| <CsoundSynthesizer>
<CsOptions>
; Select audio/midi flags here according to platform
-odac ;;;realtime audio out
;-iadc ;;;uncomment -iadc if realtime audio input is needed too
; For Non-realtime ouput leave only the line below:
; -o oscil.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>
sr = 44100
ksmps = 10
nchnls = 2
0dbfs = 1
; Determines which instrument outputs debug statements with defines:
; Change which one is commented out to alter behavior before execution
#define debug1 ##
; #define debug2 ##
instr 1
iFreq = p4
; Outputs text if debug1 is defined
; This one should print by default
#ifdef debug1
prints "instr 1 debug called\n"
#end
a1 vco2 .25, iFreq
outs a1, a1
endin
instr 2
iFreq = p4
; Outputs text if debug2 is defined
; This one should not print by default
#ifdef debug2
prints "instr 2 debug called\n"
#end
a1 vco2 .25, iFreq
outs a1, a1
endin
</CsInstruments>
<CsScore>
i1 0 2 440
i2 0 2 660
</CsScore>
</CsoundSynthesizer>
|
See also
Orchestra Macros
Credits
Author: John ffitch
University of Bath/Codemist Ltd.
Bath, UK
April 2005
New in Csound5 (and 4.23f13)