#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.
Here is a simple example of the conditional.
Example 12. 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. Play ifdef.csd
Example 13. Detailed example of the #ifdef form.
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<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>