Chipgrid / Documentation / Référence

Temps et logique

Horloges, battements, séquences, hasard et calcul : les opérateurs qui fabriquent les nombres et les bangs dont tout le reste se sert.

C horloge

Compte les ticks et écrit le compte dessous.

Compte les ticks. Écrit (tick ÷ pas) mod mod en dessous : 1C4 compte 0 1 2 3 0 1 2 3… Branchez-le sur une séquence S pour parcourir une mélodie.

CaseRôleCe qu’elle prend
à gauchepasdivise le compte des ticks
à droitemodcombien de valeurs / combien de ticks
dessoussortiesortie, écrite à chaque tick

Histoire. Les vieux jeux faisaient tourner leur musique sur un compteur lié à l’écran : 50 images par seconde en Europe (PAL), 60 aux États-Unis et au Japon (NTSC). Le tempo se comptait en « images par ligne » — c’est pourquoi un même jeu joue plus vite sur une console américaine.

Exemple

# HORLOGE - exemple #
.
...2C8
.1D2.SCDEFGABb
...P4.12

Ouvrir dans Chipgrid ↗

2C8 compte 0 1 2 … 7, un pas tous les 2 ticks, et écrit le compte dessous. Ce nombre est l’index de la séquence S : il parcourt les 8 notes. D2 fait jouer P tous les 2 ticks : chaque pas est entendu une fois, une gamme qui monte.

À essayer

  • Changez le 8 en 4 : seules les 4 premières notes bouclent.
  • Changez le pas 2 en 4 : chaque note est jouée deux fois.
  • Essayez 3 comme modulo : une boucle de 3 sur une mesure de 4.

D battement

Écrit un bang * dessous tous les N ticks.

Écrit un bang * en dessous tous les pas × mod ticks. D4 = tous les 4 ticks = chaque temps (un tick est une double-croche). D8 tous les deux temps, 3D3 tous les 9 — décalé.

CaseRôleCe qu’elle prend
à gauchepasdivise le compte des ticks
à droitemodcombien de valeurs / combien de ticks
dessoussortiesortie, écrite à chaque tick

Histoire. Un tick = une double-croche : 4 ticks par temps. Les trackers (Soundtracker 1987, FamiTracker, LSDJ sur Game Boy) comptent pareil, une ligne par double-croche.

Exemple

# BATTEMENT - exemple #
.
...D4....D6
....B3C2o.N530

Ouvrir dans Chipgrid ↗

D4 écrit un bang tous les 4 ticks (chaque temps) à côté d’une grosse caisse au triangle. D6 bange tous les 6 ticks à côté d’une caisse claire en bruit. Ils se retrouvent tous les 12 ticks : une polyrythmie, 3 contre 2.

À essayer

  • Changez 6 en 8 : grosse caisse à chaque temps, caisse claire tous les 2 temps — un rythme rock.
  • Tapez un pas à gauche : 2D4 bange tous les 2 × 4 = 8 ticks.
  • Essayez D5 ou D7 pour des rythmes qui ne tiennent pas en place.

S séquence

Choisit le pas donné par son index (à gauche) et l’écrit dessous.

Une séquence : les cases à sa droite (jusqu’à 16, jusqu’à une case vide) sont les pas. L’index à sa gauche choisit le pas écrit en dessous. Les pas peuvent être des notes (CEGA), des nombres ou des bangs : *000*000 est un motif de batterie (0 = silence).

CaseRôleCe qu’elle prend
à gaucheindexquel pas sortir
à droite, jusqu’à une case videpasjusqu’à 16 : notes, nombres ou bangs
dessoussortiesortie, écrite à chaque tick

Histoire. C’est un pattern de tracker couché sur le côté. Des compositeurs comme Koji Kondo ou Rob Hubbard écrivaient la musique en colonnes de codes de notes, une ligne par tick.

Exemple

# SÉQUENCE - exemple #
.
.1Cg
...S*0*0*0*0*0*0*0*0
..J.N010
...S0000*0000000*000
..J.N530
...S000000*000000*0*
....N421

Ouvrir dans Chipgrid ↗

Une horloge 1Cg compte 0–15 (une mesure de 16 ticks). Trois séquences la lisent — les J font descendre le compte. Leurs pas sont des bangs * et des silences 0 : un motif de batterie sur une grille de 16 pas, comme une boîte à rythmes. Chacune joue un bruit différent.

À essayer

  • Déplacez les * dans une ligne : le rythme change à la mesure suivante.
  • Une séquence peut aussi contenir des notes : SCEGA devant l’entrée note d’une voix.
  • Raccourcissez un motif (finissez-le par une case vide) : il boucle sur moins de pas.

R hasard

Écrit un nombre au hasard dessous, à chaque tick.

Écrit en dessous une valeur au hasard entre min et max, à chaque tick. Placez-le sur l’index d’une séquence pour tirer des notes au hasard dans une gamme.

CaseRôleCe qu’elle prend
à gaucheminplus petite valeur
à droitemaxplus grande valeur
dessoussortiesortie, écrite à chaque tick

Histoire. Les consoles n’avaient pas de puce de hasard. Les jeux utilisaient la même astuce que le canal de bruit — un registre à décalage — ou lisaient le compteur d’images au moment où l’on appuyait sur un bouton.

Exemple

# HASARD - exemple #
.
...0R4
.1D2.SCDEGA
...P5.12
.
....0Rn
....X.c3
.
.T3

Ouvrir dans Chipgrid ↗

0R4 écrit un nombre au hasard de 0 à 4 à chaque tick. C’est l’index d’une séquence qui contient une gamme pentatonique (do ré mi sol la) : les notes sont au hasard, mais jamais fausses. Dessous, un second R donne un x au hasard à un pixel X : il saute le long d’une ligne.

À essayer

  • Changez le max 4 en 2 : seulement do, ré, mi.
  • Remplacez la gamme par vos notes, par exemple SCdFGa (une gamme plutôt mineure).
  • Changez le max n du pixel en 8 : il reste à gauche.

A addition

Écrit a + b dessous.

Additionne a + b et l’écrit en dessous (en base 36). Pour transposer : un index de note + 7 = une quinte plus haut.

CaseRôleCe qu’elle prend
à gaucheapremier nombre
à droitebsecond nombre
dessoussortiesortie, écrite à chaque tick

Histoire. Le processeur 6502 de la NES, du C64 et de l’Apple II passait sa vie à faire des ADC (addition avec retenue) sur un seul octet — 8 bits, de 0 à 255. C’est ça, « 8 bits ».

Exemple

# ADDITION - exemple #
.
...2C4
.....S0247
...D2.A3
....P4.12

Ouvrir dans Chipgrid ↗

La séquence contient une petite mélodie en demi-tons au-dessus de do : 0 2 4 7 (do ré mi sol). A ajoute 3 à chacun avant qu’il n’arrive à P : le même air, 3 demi-tons plus haut (ré# fa sol la#). C’est transposer.

À essayer

  • Changez 3 en 0, 1 ou 2 pendant la lecture : l’air garde sa forme et se déplace d’un bloc.
  • Attention : une somme au-delà de 10 s’écrit avec une lettre (b, c…), et dans une entrée note, a–g sont des noms de notes (c = do#). Restez jusqu’à 10, ou transposez par octaves sur l’entrée octave.

J saut

Copie la case du dessus dans celle du dessous.

Copie la case du dessus dans la case du dessous. Une colonne de J partage une même horloge entre plusieurs séquences (voir le chapitre Batterie).

CaseRôleCe qu’elle prend
au-dessusentréecase à copier
dessoussortiesortie, écrite à chaque tick

Exemple

# SAUT - exemple #
.
...2C8
.1D2.SCEGEAGED
...P4.12
.....J
...Xv.4
.
.M05

Ouvrir dans Chipgrid ↗

La note de la mélodie va dans P. J recopie la même note une case plus bas, dans le y d’un pixel X au bord droit (x = v = 31). M05 fait défiler l’image vers la gauche : chaque note laisse un point à sa hauteur — un piano roll.

À essayer

  • Empilez deux J pour descendre une valeur de deux cases.
  • Changez la mélodie : le dessin suit.

W onde

Écrit une onde douce (un sinus) dessous : 0 → max → 0, un cycle tous les pas×4 ticks.

Une onde : écrit un sinus dessous, qui va doucement de 0 → max → 0, un cycle tous les pas × 4 ticks (4W = une fois par mesure). La phase le décale : deux ondes décalées d’un quart (9) dessinent un cercle. Branchez-la sur une coordonnée pour un mouvement qui ralentit aux bords.

CaseRôleCe qu’elle prend
à gauchepasdivise le compte des ticks
à droitemaxplus grande valeur
2e à droitephaseoù commence le cycle (0–35 = un cycle entier)
dessoussortiesortie, écrite à chaque tick

Histoire. Les démos ne calculaient jamais de sinus en direct : le 6502 ne savait pas multiplier. Elles les lisaient dans une table de sinus — 256 octets précalculés — parcourue par un compteur. Logos qui rebondissent, copper bars, scrollers : tout ça, ce sont des tables de sinus.

Exemple

# ONDE - exemple #
.
...4Wn
..Xv.6
.
.M05

Ouvrir dans Chipgrid ↗

4Wn va doucement de 0 à 23 (n) et revient, un cycle tous les 16 ticks. Il alimente le y d’un pixel au bord droit, et M05 fait défiler vers la gauche : l’écran dessine une sinusoïde, comme un oscilloscope.

À essayer

  • Pas 2 : deux fois plus vite. Pas 8 : lent et large.
  • Max 8 : une petite onde en haut.
  • Ajoutez une phase à droite : 4Wn9 commence un quart plus tard.

Y envoi

Envoie la valeur à sa gauche dans la case dx à droite, dy en bas.

Envoie la valeur à sa gauche dans une case dx à droite et dy en bas. Utile quand une entrée ne peut pas être alimentée juste au-dessus — par exemple le y d’un X dont le x est déjà alimenté par une onde.

CaseRôleCe qu’elle prend
à gauchevaleurce qu’il faut envoyer
à droitedxcombien de cases à droite
2e à droitedycombien de cases en bas
dx à droite, dy en bassortie · ciblela case où il écrit

Histoire. C’est une écriture à une adresse : l’instruction STA du 6502 écrivait un octet n’importe où en mémoire — y compris dans les registres de la puce vidéo.

Exemple

# ENVOI - exemple #
.
....3Wn
......Y23
.
......1Cw
......X..4
.
.T1

Ouvrir dans Chipgrid ↗

Le pixel X prend son x d’une horloge juste au-dessus. Son entrée y est deux cases à droite — rien ne peut l’atteindre par le haut. L’onde 3Wn passe donc dans Y23, qui l’envoie 2 cases à droite et 3 en bas, droit dans ce y. Le point trace une sinusoïde.

À essayer

  • Survolez la case où Y écrit : elle est marquée comme sa cible.
  • Changez Y23 en Y33 : l’onde tombe dans l’entrée couleur.

I écoute

Écoute un canal de la puce : écrit son volume (0–f) dessous.

Écoute un des quatre canaux de la puce et écrit son volume actuel (0–f) dessous : 0 pulse 1, 1 pulse 2, 2 triangle, 3 bruit. Branchez-le sur une largeur, un rayon ou une couleur et l’image suit la musique.

CaseRôleCe qu’elle prend
à droitecanal0 pulse 1 · 1 pulse 2 · 2 triangle · 3 bruit
dessoussortiesortie, écrite à chaque tick

Histoire. Les programmes pouvaient relire la puce sonore : le SID du C64 permettait de lire l’enveloppe de la voix 3, et les démos s’en servaient pour faire pulser l’image avec la musique.

Exemple

# ÉCOUTE - exemple #
.
...2C8
.1D2.SCEGEAGED
...P4.12
.
.....I0
..Qgc.3
.
.T5

Ouvrir dans Chipgrid ↗

La mélodie joue sur le pulse 1. I0 écoute ce canal et écrit son volume (0–f) dessous, dans le rayon d’un anneau. Chaque note commence fort et s’éteint : l’anneau bondit et rétrécit à chaque note.

À essayer

  • Changez I0 en I3 (bruit) : rien, aucun bruit ne joue. Ajoutez-en un !
  • Allongez les notes (P4.14) : une respiration plus lente.

! tempo

Règle le tempo avec les trois chiffres à sa droite : !150 = 150 BPM.

Règle le tempo à chaque tick pendant la lecture. Les trois cases à sa droite se lisent comme un nombre : !150 = 150 BPM, de 40 à 999. Chacune peut être alimentée par-dessus : une onde ou une séquence peut donc faire bouger le tempo. Sans chiffres, il ne fait rien. Pendant la lecture, un ! a priorité sur la case BPM. Il n’y a qu’un seul tempo : s’il y a plusieurs !, c’est le dernier tapé ou modifié qui décide, et les autres sont grisés. Effacez-le et le précédent reprend la main. Avec une porte, ?! change le tempo sur un bang.

CaseRôleCe qu’elle prend
à droitecentainespremier chiffre du BPM
2e à droitedizainesdeuxième chiffre du BPM
3e à droiteunitéstroisième chiffre du BPM

Exemple

# TEMPO - exemple #
.
..8Wi
.!1.0
.
.1D4
.
..B2C2

Ouvrir dans Chipgrid ↗

Une onde lente W écrit dans le chiffre des dizaines de !1.0 : le tempo oscille entre 100 et 280 BPM. La grosse caisse en dessous accélère et ralentit avec lui.

À essayer

  • Enlevez le W et tapez un chiffre à la place de sa sortie : un tempo fixe.
  • Changez le 1 en 5 : 500 BPM et plus.

? gate

Porte : l’opérateur à sa droite ne tourne que si un bang touche la porte. Rouge = elle ne peut rien faire là.

Une porte. L’opérateur à sa droite ne tourne plus tout seul et ne s’exécute que lorsqu’un bang touche la porte, par la gauche, le haut ou le bas. ?X dessine sur le temps, ?V change de palette à une nouvelle partie, ?! change le tempo au bon moment, ?T estompe sur la caisse claire. Les voix, F et K se déclenchent sur un bang à la porte, comme s’il les touchait. Une porte affichée en rouge ne peut rien faire : mobiles, ; et opérateurs qui ont une entrée à gauche, comme C ou D.

Exemple

# GATE - exemple #
.
.1D40Rv
...?X.c7
.
.T2

Ouvrir dans Chipgrid ↗

1D4 bange tous les 4 ticks et le bang touche la porte. Le X derrière ne dessine qu’à ce moment-là, à un x au hasard : les points tombent sur le temps.

À essayer

  • Effacez le ? : X dessine de nouveau à chaque tick.
  • Mettez une porte devant T2 : l’image ne s’estompe que sur un bang.

@ envoi

Envoie sa valeur de gauche, ou un bang, sur un lien nommé. Majuscule = partagé avec la salle.

Envoie sur un lien nommé : un fil sans câble, pour placer le code n’importe où sur la grille. Il envoie la valeur à sa gauche, ou un bang si un bang est à sa gauche, au-dessus ou en dessous. & avec le même nom le reçoit. Un nom en minuscule n’est qu’à vous. Un nom en majuscule est partagé avec toute la salle en multijoueur : quelqu’un envoie sur B, et qui veut écoute. Un bang arrive dans le même tick ; une valeur arrive au son dans le même tick et aux autres opérateurs au tick suivant.

CaseRôleCe qu’elle prend
à gauchevaleurce qu’il faut envoyer
à droitenomminuscule = à vous · majuscule = partagé avec la salle

Exemple

# ENVOI - exemple #
.
.1D4
...@k
.
.
..&k
...P4C24

Ouvrir dans Chipgrid ↗

Le bang sous D entre dans @k, et &k le ressort en dessous de lui, juste à côté de la voix. Pas de câble : déplacez le bas où vous voulez, ça joue encore.

À essayer

  • Ajoutez un second &k ailleurs, avec sa propre voix.
  • En multijoueur, mettez K au lieu de k : tout le monde peut écouter.

& receive

Reçoit depuis un lien nommé et l’écrit en dessous.

Reçoit ce qu’un @ envoie sous le même nom et l’écrit en dessous : la dernière valeur envoyée, ou un bang pendant un tick. Plusieurs & peuvent écouter le même nom.

CaseRôleCe qu’elle prend
à droitenomminuscule = à vous · majuscule = partagé avec la salle
dessoussortiesortie, écrite à chaque tick

Exemple

# RECEIVE - exemple #
.
.2C4
...@n
.
...&n
.D2.SCEGA
..P4.24

Ouvrir dans Chipgrid ↗

Cette fois le lien transporte une valeur : le compte de l’horloge voyage de @n à &n et parcourt la séquence en dessous.

À essayer

  • Changez le 2 de 2C4 : la mélodie accélère, à distance.

; swell

Saute à sa crête sur un bang, puis redescend : branchez-la et tout bat.

Une impulsion. Un bang la met à crête (15 si vide), puis elle baisse de un tous les chute ticks et écrit sa valeur en dessous. Branchez-la sur une taille, une couleur ou une quantité et tout bat avec la musique : la grosse caisse fait sauter l’anneau, qui se rétracte tout seul.

CaseRôleCe qu’elle prend
à droitecrêteoù un bang la met (vide = 15)
2e à droitechuteticks entre deux baisses
dessoussortiesortie, écrite à chaque tick

Exemple

# SWELL - exemple #
.
..1D8
....;f1
.Qgc.7
.
.T41

Ouvrir dans Chipgrid ↗

Chaque bang met ; à f (15), puis elle baisse de 1 à chaque tick. Sa valeur est le rayon de l’anneau : il saute puis se rétracte.

À essayer

  • Changez la chute 1 en 3 : une impulsion plus lente.

, eye

Regarde un bloc de l’image et écrit sa couleur, ou un bang, en dessous.

Un œil : il regarde un bloc de l’image, en x, y, et écrit en dessous ce qu’il voit : la couleur, ou rien. Avec allumé à 1, il écrit un bang si quelque chose y est dessiné. L’image peut donc jouer la musique : dessinez des barres, faites-les parcourir par un œil, et chaque barre est une note. Il lit le calque où il se trouve : une ligne de balayage sur un autre calque ne le gêne pas.

CaseRôleCe qu’elle prend
à droitex0–31 blocs (×5 pixels)
2e à droitey0–23 blocs
3e à droiteallumé1 = un bang s’il y a quelque chose
dessoussortiesortie, écrite à chaque tick

Exemple

# EYE - exemple #
.
.H0841
.
.1Cw
.,.81
..P5C02

Ouvrir dans Chipgrid ↗

Une barre est dessinée à partir de x = 0, sur 4 blocs, et l’horloge fait parcourir la ligne à l’œil. Quand il passe sur la barre, il écrit un bang et la voix joue. L’image est la partition.

À essayer

  • Changez la largeur de la barre : un motif de notes plus long.
Esc