Chaînes de caractères

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] 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 :

[Note] 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\nnon échappé" sera convertie en

        "Retour à la ligne
         non échappé"
        

avant d'être utilisée, tandis que le chaîne de caractères "Retour à la ligne\\néchappé" sera convertie en

        "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)
}}

Opcodes de manipulation de chaîne

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) :

  • strcpy et strcpyk - Assignation à une variable chaîne.

  • strcat et strcatk - Concaténation de chaînes, avec mémorisation du résultat dans une variable.

  • strcmp et strcmpk - Comparaison de chaînes.

  • 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.

  • strlen et strlenk - Retourne la longueur d'une chaîne.

  • 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.