Les variables chaîne de caractères sont des variables dont le nom commence par S ou par gS (pour les variables chaîne locales ou globales, respectivement). On peut utiliser ces variables comme argument d'entrée de n'importe quel opcode qui attend une chaîne constante entre apostrophes, et on peut les manipuler durant les périodes d'initialisation ou d'exécution avec les opcodes dont la liste suit.
Il est également possible d'utiliser des chaînes dans les p-champs. Un p-champ chaîne peut être utilisé directement par plusieurs opcodes de l'orchestre, ou il peut être d'abord copié dans une variable chaîne :
a1 diskin2 p5, 1
Snom strget p5 a1 diskin2 Snom, 1
Les chaînes dans Csound peuvent être exprimées par les doubles apostrophes traditionnelles (" "), mais aussi par {{ }}. La seconde méthode est utile si l'on veut utiliser les caractères ';' et '$' dans la chaîne sans avoir recours aux codes ASCII.
Note | |
---|---|
Les variables chaînes et les opcodes correspondants ne sont pas disponibles dans les versions de Csound antérieures à la 5.00. |
On peut également lier une chaîne à un numéro au moyen de strset et strget.
Csound 5 a aussi amélioré l'analyse des constantes chaîne. Il est possible de spécifier une chaîne multi-lignes en l'entourant avec {{ et }} à la place des habituelles doubles apostrophes, et les séquences d'échappement suivantes sont automatiquement converties :
\a : cloche d'alerte
\b : retour arrière
\n : nouvelle ligne
\r : retour chariot
\t : tabulation
\\ : le caractère '\'
\nnn : le caractère ayant le code ASCII (en octal) nnn
Note | |
---|---|
Si l'on veut éviter qu'une séquence d'échappement soit automatiquement
convertie, il faut l'échapper avec un caractère '\' supplémentaire afin
que Csound sache qu'il ne doit pas l'interpréter. Par exemple la chaîne
de caractères "Retour à la ligne non échappé"
avant d'être utilisée, tandis que le chaîne de caractères
"Retour à la ligne\néchappé" avant d'être utilisée. |
Les chaînes peuvent être utilement employées avec l'opcode system :
instr 1 ; csound5 permet de placer une chaîne sur plusieurs lignes dans des accolades doubles system {{ ps date cd ~/Desktop pwd ls -l whois csounds.com }} endin
Et avec les opcodes python, entre autres :
pyruni {{
import random
pool = [(1 + i/10.0) ** 1.2 for i in range(100)]
def get_number_from_pool(n, p):
if random.random() < p:
i = int(random.random() * len(pool))
pool[i] = n
return random.choice(pool)
}}
Ces opcodes effectuent des opérations sur les variables chaîne (note : la plupart des opcodes ne sont exécutés qu'au moment de l'initialisation, et ils ont une version avec un suffixe "k" qui s'exécute au taux-i et au taux-k ; les exceptions à cette règle comprennent puts et strget) :
strcat et strcatk - Concaténation de chaînes, avec mémorisation du résultat dans une variable.
strget - Assignation à une variable chaîne de la valeur trouvée dans la table strset à l'index spécifié, ou d'un p-champ chaîne de la partition.
sprintf - conversion de sortie formatée à la manière de printf, avec mémorisation du résultat dans une variable chaîne.
sprintfk - conversion de sortie formatée à la manière de printf, avec mémorisation du résultat dans une variable chaîne au taux-k.
puts - Impression d'une constante ou d'une variable chaîne.
strindex et strindexk - Retourne la première occurence d'une chaîne dans une autre chaîne.
strrindex et strrindexk - Retourne la dernière occurence d'une chaîne dans une autre chaîne.
strsub et strsubk - Retourne une sous-chaîne de la chaîne passée en paramètre.