$NOM — Appelle une macro définie.
Les macros sont des substitutions de texte qui sont faites dans l'orchestre lors de sa lecture. Le système de macro de l'orchestre de Csound est très simple, et il utilise les caractères # et $ pour définir et appeler les macros. Il permet d'économiser de la frappe et peut conduire à une structure cohérente dans un style consistant. Il est similaire, tout en étant indépendant, au système de macros du langage de partition.
$NOM $NOM. -- appelle une macro définie. Pour appeler une macro, on utilise son nom précédé du caractère $. La fin du nom est marquée par le premier caractère qui n'est ni une lettre ni un chiffre. S'il est nécessaire que le nom soit suivi d'une lettre ou d'un chiffre, un point, qui sera ignoré, peut être utilisé pour terminer le nom. La chaîne, $NOM., est remplacée par le texte de substitution de la définition. Le texte de substitution peut lui-même comprendre des appels de macro.
# texte de substitution # -- Le texte de substitution est une chaîne de caractères (ne contenant pas de #) et peut s'étendre sur plusieurs lignes. Le texte de substitution est entouré par des caractères #, ce qui garantit qu'aucun caractère supplémentaire ne sera capturé par inadvertance.
Il faut prendre certaines précautions avec les macros de substitution de texte, car elles peuvent parfois produire d'étranges résultats. Elles ne tiennent compte d'aucune valeur sémantique, et ainsi les espaces sont significatifs. C'est pourquoi, au contraire du langage C, la définition délimite le texte de substitution par des caractères #. Utilisé avec discernement, ce système de macro est un concept puissant, mais il peut aussi être mal employé.
Voici un exemple d'appel de macro. Il utilise le fichier define.csd.
Exemple 15. Un exemple d'appel de macro.
Voir les sections Audio en Temps Réel et Options de la Ligne de Commande pour plus d'information sur l'utilisation des options de la ligne de commande.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o define.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Define the macros. #define VOLUME #5000# #define FREQ #440# #define TABLE #1# ; Instrument #1 instr 1 ; Use the macros. ; This will be expanded to "a1 oscil 5000, 440, 1". a1 oscil $VOLUME, $FREQ, $TABLE ; Send it to the output. out a1 endin </CsInstruments> <CsScore> ; Define Table #1 with an ordinary sine wave. f 1 0 32768 10 1 ; Play Instrument #1 for two seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
Sa sortie présentera des lignes comme celles-ci :
Macro definition for VOLUME Macro definition for CPS Macro definition for TABLE
Voici un exemple d'appel de macro avec arguments. Il utilise le fichier define_args.csd.
Exemple 16. Un exemple d'appel de macro avec arguments.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o define_args.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Define the oscillator macro. #define OSCMACRO(VOLUME'FREQ'TABLE) #oscil $VOLUME, $FREQ, $TABLE# ; Instrument #1 instr 1 ; Use the oscillator macro. ; This will be expanded to "a1 oscil 5000, 440, 1". a1 $OSCMACRO(5000'440'1) ; Send it to the output. out a1 endin </CsInstruments> <CsScore> ; Define Table #1 with an ordinary sine wave. f 1 0 32768 10 1 ; Play Instrument #1 for two seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
Sa sortie présentera des lignes comme celle-ci :
Macro definition for OSCMACRO