Csbeats

Csbeats est un langage de partition alternatif dont le but est de spécifier de simples partitions dans le système standard occidental de notation des hauteurs et des rythmes. On peut invoquer Csbeats via le composant CsScore d'une partition .csd standard avec bin="csbeats" ou comme un programme autonome qui génère une partition numérique standard.

Le programme autonome lit depuis l'entrée standard et écrit sur la sortie standard.

Le langage csbeats est très simple, n'ayant que cinq sortes d'instructions dont une seule présente quelque complexité. Généralement, le mot clé de chaque type d'instruction est insensible à la casse. Ainsi "QUIT", "quit", "QuIt"... sont tous pareils. Les commentaires s'écrivent dans le format ANSI C89, ou celui de C++ (c'est-à-dire /* ... */ ou bien // jusqu'à la fin de la ligne), ou encore avec le point-virgule de Csound.

  • QUIT

    Provoque la sortie de csbeats. Pour des raisons de souplesse la commande END est aussi admise pour la même action.

  • BEATS=entier

    Fixe le nombre de pulsations par minute pour la suite de la partition, jusqu'à la fin ou jusqu'à ce qu'il soit réinitialisé. La valeur par défaut est de 60 pulsations par minutes. Le mot BPS est aussi accepté à la place de BEATS.

  • PERMEASURE=entier

    Fixe le nombre de pulsations dans une mesure. La valeur par défaut est 4.

  • BAR

    Commence une nouvelle mesure.

  • BAR entier

    Commence la mesure dont le numéro est donné.

  • i entier attributs

    Spécifie un évènement de note pour l'instrument numéroté. Les attributs peuvent indiquer une hauteur, une durée, une dynamique, ou la position d'une note sur un temps ou dans une mesure, et ceci dans n'importe quel ordre.

    Les hauteurs sont données avec un nom de note conventionnel (notation anglaise) en lettre majuscule éventuellement suivie par un caractère #, x (pour double dièse), b (pour bémol) ou bb (pour double bémol). La note Z est un silence (penser à zzz). Toutes les notes, sauf les silences, doivent être suivies par un numéro d'octave, A4 étant le la du diapason international (440 Hz). Les hauteurs sont transmises à Csound en Hz dans le paramètre p4, et s'expriment en tempérament égal à douze demi-tons.

    Les durées sont codées par la première lettre de leur nom anglais en minuscule, whole (ronde), half (blanche), quarter (noire), eigth (croche), sixteeth (double croche) et th (triple croche). A l'exception de w, on peut les modifier en leur ajoutant un suffixe :

    • d ou . Note pointée (allongée de la moitié de sa durée nominale)
    • dd ou .. Note doublement pointée (allongée des trois-quarts de sa durée nominale)
    • t Triolet (trois notes pour deux)
    • t. Triolet de notes pointé
    • q Quintuplet (cinq notes pour quatre)
    • s Septuplet (Sept notes pour huit)

    On peut ajouter les données entre elles en donnant plus d'une durée. On peut utiliser un signe + à la place d'un espace pour rendre ceci plus intuitif.

    Les dynamiques sont écrites en notation conventionnelle, fff, ff, f, mf, mp, p, pp, ppp, pppp. Elles sont transmises à l'instrument dans p5 avec 0 pour fff et un dB en moins pour chaque niveau inférieur. La dynamique par défaut est fortissimo.

    On peut spécifier des paramètres supplémentaires (p-champs) dans une instruction d'instrument sous une forme semblable à p6=42, qui donnerait la valeur 42 au champ p6 jusqu'à ce qu'il change. Le numéro du p-champ doit être supérieur ou égal à 6 car les 5 premiers champs sont utilisés avec une information définie. Chaque instrument numéroté possède ses propres paramètres supplémentaires.

    Si l'un de ces attributs est omis, il est reporté de la note précédente, sa position étant incrémentée depuis la fin de la note précédente.

    De plus, un évènement peut être placé dans une mesure particulière avec un attribut m, ou sur un temps particulier avec un attribut b.

On peut coder l'ouverture de la variation Goldberg n°3 de Bach comme ceci :

; Bach - Goldberg Variations - Variato 3
; by Brian Baughn 3-14-05
; bbaughn@berklee.net
beats = 120
permeasure = 6

i101    m1 b1 B4 mp qd+s
i101          C5    s
i101          D5
i101          C5
i101          D5
i101          E5
i101          A4    qd+s
i101          B4    s
i101          C5
i101          B4
i101          C5
i101          D5

i101    m2 b1 G4    qd
i101          G5    qd+e
i101          A5    s
i101          G5
i101          F#5
i101          G5
i101          A5    e

i101  m3 b1.5 D5    s
i101          C5
i101          B4
i101          A4
i101          B4    e
i101          C5    s
i101          B4
i101          A4
i101          B4
i101          G4    e
i101          E5
i101          D5
i101          C5
i101          F#5
i101          A5

i101  m4 b1   B4    q
i101          G5    e
i101          G5    q
i101          F#5   e
i101          Z     e   // Z is a rest (zzzzz..)
i101                e
i101          B5    e
i101          A5    q
i101          D5    e

quit

      

La sortie produite est

;;;setting bpm=120.000000
;;;setting permeasure=6
i101 0.000000 0.875000 493.883621 -4
i101 0.875000 0.125000 523.251131 -4
i101 1.000000 0.125000 587.329536 -4
i101 1.125000 0.125000 523.251131 -4
i101 1.250000 0.125000 587.329536 -4
i101 1.375000 0.125000 659.255114 -4
i101 1.500000 0.875000 440.000000 -4
i101 2.375000 0.125000 493.883621 -4
i101 2.500000 0.125000 523.251131 -4
i101 2.625000 0.125000 493.883621 -4
i101 2.750000 0.125000 523.251131 -4
i101 2.875000 0.125000 587.329536 -4
i101 3.000000 0.750000 391.995436 -4
i101 3.750000 1.000000 783.990872 -4
i101 4.750000 0.125000 880.000000 -4
i101 4.875000 0.125000 783.990872 -4
i101 5.000000 0.125000 739.988845 -4
i101 5.125000 0.125000 783.990872 -4
i101 5.250000 0.250000 880.000000 -4
i101 6.250000 0.125000 587.329536 -4
i101 6.375000 0.125000 523.251131 -4
i101 6.500000 0.125000 493.883621 -4
i101 6.625000 0.125000 440.000000 -4
i101 6.750000 0.250000 493.883621 -4
i101 7.000000 0.125000 523.251131 -4
i101 7.125000 0.125000 493.883621 -4
i101 7.250000 0.125000 440.000000 -4
i101 7.375000 0.125000 493.883621 -4
i101 7.500000 0.250000 391.995436 -4
i101 7.750000 0.250000 659.255114 -4
i101 8.000000 0.250000 587.329536 -4
i101 8.250000 0.250000 523.251131 -4
i101 8.500000 0.250000 739.988845 -4
i101 8.750000 0.250000 880.000000 -4
i101 9.000000 0.500000 493.883621 -4
i101 9.500000 0.250000 783.990872 -4
i101 9.750000 0.500000 783.990872 -4
i101 10.250000 0.250000 739.988845 -4
;;rest at 10.500000 for 0.250000
;;rest at 10.750000 for 0.250000
i101 11.000000 0.250000 987.767243 -4
i101 11.250000 0.500000 880.000000 -4
i101 11.750000 0.250000 587.329536 -4
e
      

Un exemple complet

Voici un exemple simple du générateur de partition csbeats. Il utilise le fichier csbeats.csd.

Exemple 1234. Un exemple simple de csbeats.

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>
</CsOptions>

<CsInstruments>
sr      =           44100
nchnls 	= 		2

gi1 ftgen 1, 0, 4096, 10, 1
gi2 ftgen 2, 0, 4096, 7, -1, 4096, 1    ; sawtooth
gi3 ftgen 3, 0, 4096, 7,  0, 1024, 1, 2048, -1, 1024, 0  ;triangle

instr 101,102,103
  iamp =      ampdbfs(p5)
  a1   oscil  iamp, p4, p1-100
  kenv expseg 1, p3, .01
  a1   =      a1 * kenv
       outs   a1, a1
endin
 
</CsInstruments>
<CsScore bin="csbeats">
; by Brian Baughn 3-14-05
; bbaughn@berklee.net

beats = 100
permeasure = 4

i101    m1 b1   q    mp   D3
i101                      F3
i101                      D3

i101    m2 b1             D3
i101       b3             D3

i101    m3 b1             D3
i101                      F3
i101                      D3

i101    m4 b1             D3
i101       b3             D3

i101    m5 b1              D3
i101       b4              G5

i101    m6 b1              E5
i101       b2              F5
i101       b3     e      Eb5
i101       b3.5   e          
i101       b4     q          

i101    m7 b1     e       D5
i101                            
i101                q          
i101                e      Db5
i101                            
i101                q          

i101    m8 b1     q       D5
i101                         E5
i101                         D5

i102    m1 b2      q      D4
i102       b4              E4
i102       b4             Bb3

i102    m2 b2              F4
i102       b2              B3
i102       b4             C#4
i102       b4             Bb3

i102    m3 b2      q      D4
i102       b4              E4
i102       b4             Bb3

i102    m4 b2              F4
i102       b2              B3
i102       b4             C#4
i102       b4             Bb3

i103    m5 b2      e     F6
i103       b2      e     A5
i103       b2.5    e     D6
i103       b3      e     F6
i103       b3      e     A5
i103       b4      e     E6

i103    m6 b1      q     C#6
i103               q     D6
i103               e     C6
i103                           
i103               q        

i103    m7 b1      e     B5
i103                            
i103                 q         
i103                 e    Bb5
i103                            
i103                 q         

i103     m8 b1     e     F5
i103        b1     e     A5
i103        b1.5   e     D6
i103        b2     e    Bb5
i103        b2.5   e     D6
i103        b3     q     F5
i103        b3           A5
end
</CsScore>

</CsoundSynthesizer>