Skip to content

#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

Performance

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)