tcs.cc v1.4 - boucle de bande pour Organelle S2 (Pure Data vanilla, aucun external)
(English version below / version anglaise plus bas)

Ce n'est pas un synthé : c'est un EFFET qui traite l'entrée audio de l'Organelle (saxophone au micro ou dans le jack,
une autre machine en ligne). Une boucle de bande magnétique virtuelle qu'on enregistre et qu'on recouvre avec AUX ou la
pédale, relue par une tête à vitesse variable, avec l'usure et les accidents de la bande.

Inspiré des Frippertronics de Robert Fripp et Brian Eno (deux magnétophones en boucle), du Make Noise Morphagene
(vitesse variable) et des Disintegration Loops de William Basinski (bandes qui s'effritent). Ce n'est la copie d'aucun
appareil. Ce qui est sourcé est marqué « (source) » ; le reste (temps, longueurs, courbes) est un CHOIX. Aucun nom de
marque à l'écran.

DEUX PATCHS DISTINCTS
  gcs.cc v1.0 faisait tout (20 pages, 80 réglages). Il est séparé en deux :
    tcs.cc v1.4 ... la BANDE : ce patch (9 pages)
    gcs.cc v2.4 ... les GRAINS façon Arbhar (11 pages)
  Les deux ont le même looper (AUX / pédale) et le même écran. Détails : plus bas, HISTORIQUE.

------------------------------------------------------------------------------------------------
INSTALLATION
------------------------------------------------------------------------------------------------
  Copier tcs.cc (et gcs.cc si voulu) dans Patches (carte ou /usbdrive/Patches), ainsi que gcs-check : une sonde à
  lancer UNE fois (voir gcs-check/LISEZMOI.txt) : objets, fréquence d'échantillonnage, niveau des entrées G / D.

ENTRÉE (jack ou micro interne)
  Entrée jack TRS stéréo niveau ligne ou micro intégré (derrière la grille sous les potards 1 et 2), au choix par le
  SÉLECTEUR À L'ARRIÈRE (matériel ; source : manuel Organelle M / S / S2). Le patch reçoit [r~ inL] / [r~ inR] (source :
  mother.pd) dans les deux cas. Câble mono (TS) : canal gauche seulement (source : manuel).
  Page INPUT > IN.SRC : L | R | L+R [L+R]. Mesuré : signal à gauche seulement -> L : -23,2 dB, R : silence,
  L+R : -23,2 dB (entrée -23,0 dB, sortie sèche). L+R ADDITIONNE les deux canaux : un même signal des deux côtés sort
  plus fort (mesuré : -17,6 dB au lieu de -23,6) ; baisser alors IN.GAIN de 6 dB ou choisir L.
  ATTENTION au larsen avec le micro interne et une enceinte proche (le manuel conseille de démarrer sur LINE).
  Signalé sur le forum Critter & Guitari (non confirmé) : un contrôleur USB branché au démarrage peut empêcher le
  sélecteur de fonctionner ; le brancher après le démarrage.

ÉCRAN DE DÉMARRAGE : « // tcs.cc v1.4 » et « // loading... », deux bobines qui tournent et la bande qui défile entre
  elles (environ 3 s), puis la page 1. Aperçu : sources/bench/resultats/tcs/ecran_demarrage.png.

------------------------------------------------------------------------------------------------
LE LOOPER : AUX, PÉDALE (footswitch) ou CC64 (les trois font la même chose)
------------------------------------------------------------------------------------------------
  couche vide  --appui-->  REC   --appui-->  PLAY  --appui-->  DUB  --appui-->  PLAY  --appui-->  DUB ...
  AUX tenu 1 s : la couche active s'efface (fondu de 300 ms) et redevient vide.
  - REC : premier enregistrement. Longueur de la boucle = temps entre les deux appuis (0,1 à 10 s) ; arrêt tout seul à
    10 s. Fondu de 30 ms au point de bouclage (CHOIX). Mesuré : appuis à 1,0 et 3,0 s -> boucle de 2000 ms.
  - PLAY : la boucle tourne et elle est rejouée au bit près, QUOI QU'ON RÈGLE (mesuré : écart 0,0 sur 4 tours). Depuis
    v1.2, LOOP / HEAD / WEAR / DRIFT ne réécrivent plus jamais la bande : l'usure et le pleurage agissent sur la tête de
    lecture, LENGTH est une fenêtre de lecture (voir plus bas). La bande ne change que pendant REC / DUB.
  - DUB : on joue par-dessus ; l'ancien contenu est gardé à DUB [85 % = -1,41 dB par tour ; mesuré -1,41 dB :
    -21,23 / -22,64 / -24,05 / -25,46 dB], comme le volume du retour des Frippertronics (source).
  - Chaque appui agit tout de suite ; le garder enfoncé 1 s efface la couche. Relâcher avant 1 s : rien n'est effacé.
  - Changer de couche (touches do à fa) pendant REC ou DUB termine proprement l'enregistrement de la couche quittée
    (mesuré : REC à 1,0 s, couche 2 à 2,5 s -> couche 1 = 1500 ms, en PLAY).
  Écran (bandeau) : nom de la page, 6 petits carrés = les 6 couches (plein = joue ; creux = enregistrée mais muette ou pas jouée ; trait = vide ; souligné = couche active),
  état (--- vide, REC, PLY, DUB ; écrit en inversé = REVERSE), « n/9 ». Aperçu : sources/bench/resultats/tcs/ecran_couches.png.
  LED : une couleur par état (valeurs du mother : REC 1, PLAY 3, DUB 2 ; éteinte si vide ; couleurs à vérifier).
  Le contenu des boucles n'est pas sauvegardé (comme une vraie bande : il disparaît à l'extinction).

AUTRES COMMANDES
  ENCODEUR : tourner = page (de la 8 on revient à la 1) ; appuyer = menu de l'Organelle.
  Prise en main douce (comme vcs.cc / wcs.cc) : après un changement de page, un potard ne reprend la main qu'en passant
  par la valeur enregistrée (petit repère).

CLAVIER (24 touches)
  do  do# ré  ré# mi  fa   (6 touches graves) ... SOLO : couche active 1 à 6 (chacune a sa boucle, sa longueur,
                                                       son état) ; MULTI : court = muet / audible, long = couche
                                                       à enregistrer (voir COUCHES)
  fa# ................................................ REVERSE (bascule : la tête lit à l'envers)
  sol à si (17 touches) .............................. vitesse de la tête en demi-tons, tant que la touche est tenue :
                                                       do du milieu (72) = vitesse SPEED, sol grave -5, si aigu +11.
                                                       Mesuré : sol aigu (+7) -> 659,2 Hz pour 440 (attendu 659,3).
  Dernière touche tenue (mono). Pitch bend : +/-2 demi-tons (fixe). Un clavier MIDI externe joue de la même façon.

COUCHES : SOLO / MULTI (v1.3) - une tête de lecture par couche
  Chaque couche a sa propre tête de lecture ; toutes avancent à la même vitesse (SPEED, REVERSE, touches de vitesse), comme un
  magnétophone multipiste. Le potard L.MODE (page OUT) choisit ce qu'on entend :
    SOLO [usine] : seule la couche active joue (comme avant). Touche de couche (do à fa) = choisir la couche active.
    MULTI : toutes les couches pleines et non muettes jouent ensemble. Touche de couche :
      appui COURT = muet / audible (fondu de 30 ms) ;
      appui LONG (0,5 s) = choisir la couche que AUX enregistre / DUB (elle devient audible).
  Une tête qui se remet à sonner (couche démutée, retour en SOLO) se replace à la position de lecture habituelle (un
  tour derrière l'enregistrement).
  Mesuré (couche 1 = 220 Hz, couche 2 = 330 Hz, niveau dans chaque bande) : SOLO couche 2 -> 220 Hz -121 dB / 330 Hz
  -14 dB ; MULTI -> -15 / -14 dB ; couche 1 muette (appui court) -> -105 / -14 dB ; de nouveau audible -> -15 / -14 dB ;
  couche 2 muette -> -15 / -66 dB ; appui long sur la couche 3 vide puis AUX -> la couche 3 s'enregistre (2000 ms) et les
  3 couches jouent ensemble (-15 / -14 / -14 dB). Bascules SOLO / MULTI et muet / audible : rafale d'aigus -66,6 dB
  (aucun clic). Une tête ne calcule que si elle sonne.

------------------------------------------------------------------------------------------------
PAGES (9 pages de 4 potards ; détails : LISEZMOI-PAGES.txt / README-PAGES.txt)
------------------------------------------------------------------------------------------------
  1 LOOP     LENGTH | DUB | REINJ | DRY/WET
  2 HEAD     H.LEVEL | SPEED | H.POS | H.INERT        la tête de lecture
  3 WEAR     HF.LOSS | EROSION | DROPS | HISS         usure, à la lecture (la bande reste intacte)
  4 DRIFT    L.WOW | L.FLUT | DRIFT | L.SAT           pleurage, vitesse, saturation, à la lecture
  5 INPUT    IN.GAIN | IN.SRC | IN.HPF | IN.GATE
  6 DELAY    DELAY | D.TIME | D.FDBK | CHAR           delay d'ambiance (DRY / WET, après la boucle)
  7 REVERB   VERB | R.TIME | SMEAR | SHIM             reverb d'ambiance (DRY / WET, après la boucle)
  8 OUT      FX.IN | PRINT | L.MODE | VOLUME         effets ; L.MODE = couches SOLO / MULTI
  9 VIEW     la boucle et les têtes ; potards = SPEED | H.POS | DUB | LENGTH (les mêmes réglages que leurs pages)
  Réglages fixés (retirés des pages, CHOIX) : REC.LVL 100 %, BEND 2 demi-tons, réinjection neutre (R.TONE)
  prise avant les effets, limiteur de boucle -3 dB, tête au centre (H.PAN).
  DRY/WET : à puissance constante ; tout à droite (WET) = plus du tout de son direct (ni sa reverb, ni son delay). Mesuré (couche vide, sinus
  -23 dB à gauche) : DRY -23,6 dB, D50/W50 -26,6 dB, WET : sortie nulle (-240 dB).

CHEMIN DU SON
  entrée -> IN.SRC -> IN.GAIN -> IN.HPF -> IN.GATE -> (REC ou DUB seulement) -> [ couche active : lu x DUB (1 en
  PLAY) + entrée + réinjection + PRINT -> limiteur de boucle (REC / DUB) -> écrit ]
  -> tête (vitesse, sens, inertie, position, fenêtre LENGTH, pleurage) -> usure (EROSION, DROPS, HF.LOSS, L.SAT, HISS) -> DRY / WET (sec = entrée) -> DELAY puis REVERB en DRY / WET (FX.IN : ce qui y passe)
  -> VOLUME -> limiteur -> sortie ; REINJ : sortie de la tête (avant effets) -> bande ; PRINT : entrée passée dans les effets -> bande (REC / DUB).

------------------------------------------------------------------------------------------------
LA BANDE (sourcé / choix, mesuré)
------------------------------------------------------------------------------------------------
  Principe (CHOIX) : chaque couche est une ligne à retard rebouclée, comme le montage de Fripp à deux magnétophones
  (source : Wikipedia « Frippertronics » : retard « usually three to five seconds », répétitions réglées par « the
  volume on the second machine »). Pas de point de collage pendant PLAY / DUB, donc pas de clic de bouclage : la période
  est exactement la longueur (mesuré : 88 200 échantillons pour 2 s, tours identiques au bit près).
  6 COUCHES de 10 s (CHOIX, repris de l'Arbhar : source), plus 3 s de marge.
  LENGTH (v1.2) : FENÊTRE DE LECTURE, non destructive. La couche garde la longueur fixée par les deux appuis ; LENGTH
  dit combien de cet enregistrement la tête joue, depuis son début (de 0,1 s à la longueur enregistrée). Quand la tête
  sort de la fenêtre, elle revient au début de la fenêtre (fondu de 30 ms). Chaque couche garde sa fenêtre ; changer de
  couche remet le potard sur la fenêtre de la couche. Mesuré : boucle de 2 s (220 Hz puis 440 Hz), LENGTH 1 s -> la tête
  ne lit plus que 220 Hz (4 mesures sur 4) ; LENGTH 2 s -> 440 / 220 / 440 Hz ; ensuite, tête replacée au même endroit :
  écart 0,0 avec la boucle jamais touchée. Clic : -80,9 dB (= la référence).
  (Avant, v1.0 / v1.1 : LENGTH faisait glisser la longueur de la boucle elle-même et réécrivait la bande : c'était une
  des causes de la boucle « qui part en vrille ».)

TÊTE DE LECTURE (vitesse façon Morphagene ; source : manuel Morphagene)
  SPEED : -2 à +2 ; au milieu la bande s'arrête ; à droite on avance, à gauche on recule (source : Vari-Speed
  bipolaire, arrêt au centre). Crans à 0 et +/-1. La vitesse ne change que la lecture, pas l'enregistrement (source).
  H.POS : distance à la tête d'enregistrement (100 % = un tour = la boucle classique). H.INERT : inertie (5 ms à 5 s).
  Le niveau baisse sous x0,25 (CHOIX). Quand la tête sort de la boucle, une deuxième reprend un tour plus tôt / plus
  tard avec un fondu de 30 ms (CHOIX). La tête se tait sur une couche vide.
  Mesuré (sinus 440 Hz) : x0,5 -> 219,95 Hz ; x1,5 -> 660,04 ; x2 -> 879,94 ; x-1 -> 439,59 ; x-0,5 -> 220,15 ;
  STOP -> silence ; H.INERT 1 s (x1 -> x0,5) : 417 / 339 / 292 / 247 / 230 Hz à +0 / +0,5 / +1 / +2 / +3 s.

USURE ET DÉRIVE (v1.2 : à la LECTURE ; la bande n'est jamais réécrite ; tout à 0 = identité exacte ; CHOIX sauf mention)
  Elles colorent ce que la tête lit, sans s'accumuler : les mesures sont les mêmes à chaque tour (tours 1 à 11).
  HF.LOSS : passe-bas 7 kHz -> 800 Hz. Mesuré, bruit rose (centroïde 3412 Hz sans usure) : 2380 Hz (15 %), 1203 Hz
    (50 %), 544 Hz (100 %), identique du tour 1 au tour 11.
  EROSION : les passages faibles s'effacent, le cœur fort reste (inspiré de Basinski, « the sustains sort of fell away,
    and yet somehow the core of it stayed », The Fader 2012). Mesuré à 100 % : passage fort -20,1 dB (inchangé),
    passage faible (-24 dB sous le fort) ramené à -57,9 dB, à chaque tour.
  DROPS : petites coupures au hasard (-0,4 à -1 dB en moyenne à 60 %). HISS : souffle constant (-60,4 dB à 100 %, boucle
    vide, à 3 / 7 / 13 s). L.SAT : saturation tanh(k x)/k (-2 dB à 100 %).
  L.WOW / L.FLUT / DRIFT : pleurage 0,5 Hz, scintillement 6,8 Hz, dérive lente, sur la position lue par la tête.
    Mesuré à 100 % (tours 1 / 5 / 11) : L.WOW +/-14 / 15 / 19 cents ; L.FLUT +/-9 cents ; DRIFT +/-7 / 7 / 5 cents.
  NON DESTRUCTIF : WEAR et DRIFT tous à 100 % pendant 11 s, puis remis à 0 -> écart 0,0 (au bit près) avec la boucle
    jamais usée.
  Vieillir la bande VOLONTAIREMENT (façon Basinski) : en DUB, REINJ réenregistre la sortie de la tête, usure comprise ;
    c'est la seule façon d'user la bande pour de bon, et seulement pendant l'enregistrement. Mesuré : DUB + REINJ 100 %
    + HF.LOSS 50 % pendant 8,5 s, puis PLAY et usure à 0 -> centroïde de la boucle 3457 Hz sans ce passage, 833 Hz avec.
  (Avant, v1.0 / v1.1 : l'usure et le pleurage agissaient dans la boucle à chaque tour, en PLAY aussi : HF.LOSS 15 %
  faisait passer le centroïde de 3412 à 841 Hz en 11 tours, L.WOW 100 % de +/-14 à +/-45 cents, et remettre les
  réglages à 0 ne réparait rien.)

------------------------------------------------------------------------------------------------
EFFETS D'AMBIANCE : DELAY et REVERB (pages DELAY, REVERB, OUT) - en vrai DRY / WET depuis tcs.cc v1.2
------------------------------------------------------------------------------------------------
  Inspirés des pédales Chase Bliss (sources plus bas) : canal Wet de la MOOD MkII, Dark World, Habit. Ce sont des
  inspirations : les algorithmes ici sont des CHOIX, rien n'est copié.
  CHAÎNE (comme des pédales branchées après le looper) :
    1. DRY/WET (page 1) : son direct contre boucle. À WET, plus aucun son direct, ni sa reverb, ni son delay
       (mesuré : couche vide, WET, quel que soit FX.IN : sortie nulle).
    2. FX.IN choisit ce qui entre dans les effets : INPUT (le son direct), BOTH (son direct + boucle), LOOP (la boucle).
       Ce qui n'y entre pas les contourne et s'ajoute à la sortie, intact.
    3. DELAY puis REVERB, en série, chacun avec un vrai DRY / WET à puissance constante (D100 = effet éteint, sans calcul ;
       D50/W50 ; W100 = seulement l'effet).
  RÈGLE : les effets ne modifient JAMAIS la boucle (ils sont après elle). Mesuré : boucle enregistrée avec les effets à
  fond (FX.IN BOTH, PRINT OFF), puis effets remis à DRY -> écart 0,0 (au bit près) avec la même boucle sans effets.
  La boucle ne reçoit des effets que pendant l'enregistrement (REC / DUB), et seulement si PRINT = ON.
  Niveaux mesurés (bruit rose continu, son direct seul dans les effets) : REVERB W100 +1,3 dB, D50/W50 +2,5 dB ;
  DELAY W100 (retour 45 %) +3,9 dB, D50/W50 +3,7 dB, par rapport à l'entrée.

  REVERB (page 7)
    VERB ..... DRY / WET de la reverb [D75/W25].
    R.TIME ... taille ET déclin ensemble, comme le TIME de la MOOD (source) : 0,4 s à 30 s ; au-delà de 95 % : FREEZE,
               la queue est figée et tient indéfiniment, rien de nouveau n'y entre (comme le Decay au maximum de la
               Dark World, source). Mesuré (bruit rose, -60 dB) : affiché 1,0 / 6,1 / 23,9 s -> 0,9 / 5,8 / 20,4 s.
               FREEZE : -23,4 / -22,9 / -22,0 / -22,1 dB à 2 / 6 / 10 / 13 s (il tient) ; un bruit fort joué pendant
               le gel n'y entre pas (-218 dB) ; relâché (60 %) : -21 -> -33 -> -62 dB en 4 s. [6,1 s]
    SMEAR .... de multi-taps (échos séparés) à nappe, comme le MODIFY de la MOOD en Reverb (source). Mesuré, facteur de
               crête de la queue : 77 à 0 %, 24 à 100 %. [70 %]
    SHIM ..... la queue, montée d'une octave, est réinjectée : elle monte d'octave en octave (Shim de la Dark World,
               source). Mesuré (sinus 220 Hz) : 440 Hz à -17 dB sous 220 Hz sans SHIM, à +0,3 dB avec SHIM 100 % ;
               880 Hz : -21 -> -1 dB. [0 %]
    Moteur (CHOIX) : 3 passe-tout par côté, réseau de 4 lignes rebouclées (67 à 108 ms x taille, matrice de Hadamard),
    2 lignes modulées, amorti 4,8 kHz ; au gel : longueurs arrondies à l'échantillon, sans modulation ni amorti, gain 1.
    Chaque ligne a un plafond doux transparent : gel + SHIM à fond ne peuvent pas s'emballer.

  DELAY (page 6)
    DELAY .... DRY / WET du delay [DRY = éteint, sans calcul].
    D.TIME ... 40 ms à 2 s [283 ms]. Le temps GLISSE comme une bande (300 ms), puis se pose exactement sur un
               échantillon. Mesuré : répétitions toutes les 280-285 ms pour 283 ms (fenêtres de 5 ms).
    D.FDBK ... retour ; à 100 % les répétitions tiennent et s'empilent sans s'emballer (comme le MODIFY de la MOOD en
               Delay, source). Mesuré : 50 % -> -6,0 / -5,9 / -6,4 dB par répétition ; 100 % (CHAR CLEAN) ->
               -11,9 / -12,3 / -12,8 / -13,4 dB à 2 / 5 / 10 / 19 s. [45 %]
    CHAR ..... gauche = TAPE : chaque répétition plus sombre (jusqu'à 1,2 kHz), qui pleure et sature (mesuré à 100 %,
               retour 100 % : -25 -> -39 dB et centroïde 333 -> 142 Hz en 17 s) ; milieu = CLEAN ; droite = chaque
               répétition monte d'une QUINTE (UP 5th) puis d'une OCTAVE (UP OCT), comme la Habit (source). Mesuré
               (sinus 220 Hz, 600 ms) : UP 5th 220 / 332 / 494 Hz (attendu 220 / 329,6 / 493,9) ; UP OCT
               220 / 444 / 893 Hz (attendu 220 / 440 / 880). [TAPE 22 %]
    Stéréo : tête gauche à D.TIME, tête droite à 1,5 x D.TIME (CHOIX).

  OUT (page 8) : FX.IN | PRINT | L.MODE | VOLUME
    FX.IN .... INPUT / BOTH / LOOP, voir plus haut [BOTH].
    PRINT .... OFF : on enregistre l'entrée sèche. ON : pendant REC et DUB SEULEMENT, on enregistre l'entrée passée dans
               DELAY puis REVERB (mêmes réglages, dans une deuxième chaîne qui ne traite que l'entrée) à la place de
               l'entrée sèche : la couche reçoit ce que la chaîne donne (avec son DRY / WET). La boucle déjà là n'est
               jamais repassée dans les effets. [OFF]
               Mesuré : partie silencieuse de la boucle, effets coupés ensuite : PRINT OFF -240 dB, PRINT ON -34,4 dB
               (la queue est dans la boucle). DUB 10 s sans jouer avec PRINT ON et FX.IN BOTH : écart 0,0 avec le même
               DUB en PRINT OFF.
  Sécurité : retour 100 % + UP OCT + FREEZE + SHIM 100 % + IN.GAIN +24 dB, 40 s : aucun NaN, crête < 1, niveau stable.
  Clics (sinus 220 Hz ; référence avec effets au repos -60,7 dB) : glissement de D.TIME -54,4 ; gel / dégel -58,7 ;
  FX.IN changé -60,2 ; DELAY allumé -63,1 : aucun clic.

RÉINJECTION ET SÉCURITÉ
  REINJ renvoie la sortie de la tête (usure comprise, avant les effets) dans la bande pendant REC / DUB. La boucle a son limiteur (-3 dB, linéaire jusqu'à
  70 % du plafond) et deux garde-fous (CHOIX) : la réinjection baisse quand la boucle approche du plafond, et quand ce
  qui est réinjecté dépasse -12 dBFS efficaces. La sortie a le limiteur de wcs.cc.
  Mesuré (REINJ 100 %, DUB 100 %, tête 100 %, IN.GAIN +24 dB, DELAY et VERB 70 %, PRINT ON, D.FDBK 45 % puis
  D.FDBK 100 % + UP OCT + FREEZE + SHIM 100 %, 42 s, bruit rose 4 s puis silence) : aucun NaN, crête jamais au-dessus
  de 0 dBFS (limiteur), niveau stabilisé vers -9 dB efficaces (-6,6 dB dans le pire cas) ; puis REINJ 0 et DUB 50 % :
  la boucle retombe (-24,5 dB ; -9,8 dB dans le pire cas, où la reverb reste gelée : voulu).
  Un larsen ACOUSTIQUE (micro interne devant l'enceinte) ne peut pas être empêché par un patch.
  Réglages extrêmes et au hasard (14 tirages) : pas d'erreur Pd, pas de NaN, crête <= 1. Au repos : sortie nulle.
  Effacement : sortie nulle de 8 à 10 s (AUX tenu à 6,0 s).
  Clics (sinus 220 Hz ; rafales d'aigus > 4 kHz par fenêtres de 2 ms ; référence sans action, point de bouclage
  compris : -80,9 dB) : PLAY -> DUB -> PLAY -80,9 ; effacement -79,8 ; tête qui boucle (x0,5) -78,5 ; touche de
  vitesse -75,8 ; lecture à l'envers -75,1 ; changement de couche -71,6 ; REVERSE -67,1 ; glissement de LENGTH -52,8.

PAGE VIEW
  Forme de la couche active, tête d'enregistrement (trait plein), tête de lecture (petit trait en bas),
  « x1 P100 D85 2s » (vitesse, position, DUB, longueur). 8 images/s, rien ne calcule hors de la page.
  Aperçu : sources/bench/resultats/tcs/ecran_view.png.

------------------------------------------------------------------------------------------------
CPU ET MÉMOIRE
------------------------------------------------------------------------------------------------
  CPU (machine de test x86, PAS l'Organelle : seuls les rapports comptent ; méthode de vcs.cc : t(40 s) - t(10 s),
  entrée = bruit, boucle de 4 s enregistrée ; référence mesurée dans la même série) :
    vcs.cc v2.20 8v, 8 notes tenues ................................. 11,5 % d'un cœur (référence)
    tcs.cc boucle en PLAY sans effets (VERB DRY) ..................... 1,3 %  (x0,11)
    tcs.cc réglages d'usine, boucle de 4 s en PLAY (VERB D75/W25) .... 1,8 %  (x0,15)
    tcs.cc 6 couches en MULTI (6 têtes) .............................. 1,5 %  (x0,13)
    tcs.cc DUB + usure et dérive à fond + REINJ ...................... 2,0 %  (x0,17)
    tcs.cc pire cas : DUB + usure + DELAY (UP OCT) + REVERB (SHIM)
      + PRINT (deux chaînes d'effets) ................................ 3,4 %  (x0,29)
  (Écarts de +/-0,04 entre séries : bruit de mesure.) Une tête ne calcule que si elle sonne.
  DELAY et REVERB sont éteints (switch~) à 0 % ; la page VIEW ne calcule que quand elle est affichée.
  MÉMOIRE : l'Organelle S2 a 1 Go de RAM (source : forum Critter & Guitari, « The S2 uses the 1GB RAM version » du
  module Raspberry Pi CM4). Tampons : 6 couches x 13 s x 44 100 x 4 octets = 13,8 Mo, + environ 1,7 Mo (2 delays de 3,2 s, 2 reverbs, décaleurs),
  soit environ 1,6 % de la RAM.

SAUVEGARDE DES RÉGLAGES
  2 s après le dernier mouvement, dans tcs-etat-v14.txt (dossier du patch), relu au démarrage (mesuré). Effacer ce
  fichier = réglages d'usine. Les boucles ne sont pas sauvegardées.

------------------------------------------------------------------------------------------------
HISTORIQUE (avant -> après)
------------------------------------------------------------------------------------------------
  v1.4 (demandé : « une petite indication pour savoir si les layers sont actifs ou non, quelque chose de très simple ») :
  bandeau : « L1 » et « R » -> 6 carrés (plein = joue, creux = enregistrée mais silencieuse, trait = vide, couche active
  soulignée) ; REVERSE = état écrit en inversé. Le son ne change pas.
  v1.3 (demandé : « une option qui permette de jouer les layers en simultané et/ou en séparé (mute / démute avec les
  touches) ») : une tête par couche, même vitesse ; L.MODE SOLO / MULTI (page OUT, à la place de H.PAN, fixé au centre) ;
  touches court = muet / audible, long = couche à enregistrer. Corrigé pendant la mise au point : un [delay] qui recevait
  un nombre au lieu d'un bang (l'appui court ne mettait rien en muet) -> conforme.
  v1.2 (demandé : « les réglages appliqués après avoir enregistré une loop s'appliquent sur l'enregistrement et à
  l'infini elle se dégrade » ; « les effets doivent être DRY/WET, pas juste un SEND » ; « quand LOOP / HEAD / WEAR /
  DRIFT bougent après l'enregistrement, la boucle part en vrille ») :
  - la bande ne change plus que pendant REC / DUB : usure et pleurage à la lecture (avant : HF.LOSS 15 % = 3412 -> 841 Hz
    en 11 tours et rien ne revenait ; après : 2380 Hz à chaque tour, et réglages à 0 = boucle intacte, écart 0,0) ;
  - LENGTH : fenêtre de lecture au lieu de réécrire la bande (écart 0,0 après usage) ;
  - DELAY et VERB : vrai DRY / WET en série au lieu d'envois ; FX.IN : ce qui entre dans la chaîne, le reste la
    contourne ; à WET (page 1), plus aucun son direct, effets compris (avant, la reverb du sax restait : -31,8 dB) ;
  - PRINT : enregistre la sortie de la chaîne (avec son DRY / WET), plus seulement les queues ajoutées.
  v1.1 (effets, demandé : « enlever la SPRING, une reverb plus ambient avec sa page, un delay plus expressif et
  ambient, inspiré de la MOOD MkII ou d'autres Chase Bliss ; les effets ne touchent pas la boucle, sauf pendant
  l'enregistrement ») : ECHO, SPRING, LOFI, WIDTH -> pages DELAY et REVERB, FX.IN et PRINT (voir EFFETS D'AMBIANCE).
  8 -> 9 pages. La réinjection (REINJ) est prise sur la tête seule, avant les effets.
  v1.0 : tcs.cc v1.0 reprend la partie bande de gcs.cc v1.0 :
  - 20 pages / 80 réglages -> 8 pages / 28 réglages (+ 4 sur VIEW). Retirés : grains, attaques, LFO / RANDOM / WHEEL,
    COMP et TAPE de la section vintage, couches lues, ERASE.T, F.FADE, AUTO.L, R.TONE, R.POINT, LIMIT (fixés).
  - FREEZE -> looper REC / PLAY / DUB, effacement par AUX tenu 1 s. Les touches sol à si règlent la vitesse de la tête
    (avant : hauteur des grains). H.LEVEL d'usine 70 % -> 100 % (la tête est la seule sortie).
  - L'usure agit maintenant aussi en PLAY (avant : seulement sur la couche en écriture) : c'est ce qui donne
    l'effritement d'une boucle qu'on laisse tourner. Toutes les mesures d'usure restent celles de v1.0.
  - Corrigé pendant la séparation : ECHO muet (HEADS plus initialisé) -> fixé à 1+2 ; la tête rejouait encore un tour
    après l'effacement -> coupée selon l'état de la couche (sortie nulle de 8 à 10 s) ; écran de démarrage qui
    plantait (grains de la bande à 0 dans tcs.cc) -> corrigé.

BANC : sources/bench (Pd 0.54.1 en mode batch + numpy ; sources/bench/LISEZMOI.txt). Résultats : resultats/tcs/*.json.

NON VÉRIFIÉ / À VÉRIFIER SUR L'ORGANELLE
  - version de Pd de l'Organelle S2 ; objets et canal du micro : gcs-check ; couleurs de la LED ;
  - CPU réel (seuls les rapports comptent) ; le son sur un vrai saxophone.

SOURCES (consultées le 17/10/2026)
  Frippertronics : https://en.wikipedia.org/wiki/Frippertronics
  Basinski : entretien, The Fader (2012) https://www.thefader.com/2012/09/11/interview-william-basinski
  Morphagene : manuel (Make Noise, copie Juno) https://imagescdn.juno.co.uk/manual/638949-01U.pdf
  Arbhar (6 couches de 10 s) : https://www.instruomodular.com/wp-content/uploads/2023/10/Arbhar-Manual-Firmware-2.0-A5.pdf
  Organelle M / S / S2 : https://docs.critterandguitari.com/Organelle/og_sms2/
  Organelle S2, 1 Go : https://forum.critterandguitari.com/t/organelle-returns-with-new-model-s2/11109
  Sélecteur micro / ligne (bogue signalé) : https://forum.critterandguitari.com/t/organelles-s2-internal-microphone-always-on-even-changing-the-input-selector/11367
  mother.pd, gWaveform, gCircle : https://github.com/critterandguitari/Organelle_OS
  Chase Bliss MOOD MkII (canal Wet, routage, MIX) : https://www.chasebliss.com/s/MOOD-MKII_Manual_Pedal_Chase-Bliss.pdf
  Chase Bliss Dark World (Shim, Decay au maximum = gel) : https://www.chasebliss.com/s/Dark-World_Manual_Pedal_Chase-Bliss.pdf
  Chase Bliss Habit (vitesse par paliers en quintes et octaves) : https://guitar.com/review/effects-pedal/the-big-review-chase-bliss-habit-echo-collector/
  Limiteur, prise en main douce : vcs.cc v2.20 / wcs.cc v3.0.1.

################################################################################################
ENGLISH VERSION
################################################################################################
tcs.cc v1.4 - tape loop for Organelle S2 (vanilla Pure Data, no externals)

An EFFECT on the Organelle's audio input. A virtual tape loop you record and overdub with AUX or the footswitch, read
by a variable-speed head, with tape wear. Inspired by Fripp & Eno's Frippertronics, the Make Noise Morphagene
(Vari-Speed) and Basinski's Disintegration Loops; a copy of none. Sourced facts are marked "(source)", the rest is a
CHOICE. No brand names on screen.

TWO SEPARATE PATCHES: gcs.cc v1.0 (20 pages) is split into tcs.cc v1.4 (TAPE, this patch, 9 pages) and gcs.cc v2.4
(GRAINS, 11 pages). Same looper, same screen.

INSTALL: copy tcs.cc (and gcs.cc) plus gcs-check into Patches; run gcs-check once. INPUT: TRS jack or internal mic via
the hardware selector (source); mono cable = left only. IN.SRC L | R | L+R [L+R] (L+R adds both channels: a signal on
both sides comes out ~6 dB louder). Beware of acoustic feedback with the mic.

LOOPER (AUX, footswitch or CC64): empty -> REC -> PLAY -> DUB -> PLAY ...; hold 1 s = erase the active layer. The tape
  only changes during REC / DUB: in PLAY it repeats bit-exact whatever you turn (since v1.2).
  Loop length = time between the two first presses (0.1-10 s, auto stop at 10 s, 30 ms seam). PLAY repeats the loop
  bit-exact. DUB keeps the old content at DUB
  [85 % = -1.41 dB per pass, measured]. Switching layer during REC / DUB closes the recording cleanly. Header: page,
  6 small squares = the 6 layers (filled = playing; hollow = recorded but silent; dash = empty; underlined = active layer), state (--- REC PLY DUB; inverted = REVERSE), "n/9". LED colour follows the state (to be checked). Loops are not saved.
KEYS: C to F (low) = active layer 1-6 (MULTI: short = mute, long = record layer); F# = REVERSE; G to B = head speed in semitones while held (middle C = SPEED;
  +7 measured 659.2 Hz for 440). Pitch bend +/-2 st.
PAGES: LOOP (LENGTH, DUB, REINJ, DRY/WET), HEAD (H.LEVEL, SPEED, H.POS, H.INERT), WEAR (HF.LOSS, EROSION, DROPS, HISS),
  DRIFT (L.WOW, L.FLUT, DRIFT, L.SAT), INPUT (IN.GAIN, IN.SRC, IN.HPF, IN.GATE), DELAY (DELAY, D.TIME, D.FDBK, CHAR), REVERB
  (VERB, R.TIME, SMEAR, SHIM), OUT (FX.IN, PRINT, L.MODE, VOLUME), VIEW. See README-PAGES.txt. Fixed: REC level 100 %,
  bend 2 st, neutral reinjection before the effects, loop limiter -3 dB. DRY/WET full WET = no direct sound at all (measured -240 dB).
TAPE (CHOICE): each layer is a delay line fed back on itself (Fripp's two machines, source); exact period, no seam
  click. 
HEAD (source: Morphagene Vari-Speed): SPEED -2..+2 with stop at centre; measured x0.5 / x1.5 / x2 / x-1 -> 219.95 /
  660.04 / 879.94 / 439.59 Hz for 440; STOP silent; H.INERT works as measured.
WEAR / DRIFT (since v1.2, on PLAYBACK: the tape is never rewritten): HF.LOSS (centroid 2380 / 1203 / 544 Hz at 15 / 50 /
  100 %, the same every pass), EROSION (soft passages vanish, the core stays: Basinski, source), DROPS, HISS, L.WOW,
  L.FLUT, DRIFT, L.SAT. All at 100 % for 11 s then back to 0 -> bit-identical to the untouched loop. To age the tape on
  purpose: DUB + REINJ records the head output, wear included (measured centroid 3457 -> 833 Hz).
LENGTH (since v1.2): a play window from the start of the recording, non-destructive (measured difference 0).
SAFETY: loop limiter + two reinjection guards + output limiter. Everything at maximum for 42 s: no NaN, peak never above
  0 dBFS, level settles around -8.5 dB RMS, decays when REINJ / DUB are lowered. Silence at rest. Clicks: -52.8 dB
  (LENGTH glide, worst) to -80.9 dB (reference without action -80.9 dB).
AMBIENT EFFECTS: DELAY and REVERB, true DRY / WET inserts in series (since tcs.cc v1.2), inspired by Chase Bliss pedals
  (MOOD MkII, Dark World, Habit; algorithms are CHOICES). Chain: DRY/WET (direct vs loop; at WET no direct sound at all,
  nor its reverb / delay) -> FX.IN picks what enters the effects (INPUT / BOTH / LOOP; the rest bypasses them) ->
  DELAY dry/wet -> REVERB dry/wet. The effects NEVER change the loop (measured: bit-identical). REVERB: VERB dry/wet
  [D75/W25] | R.TIME 0.4-30 s, above 95 % FREEZE (holds) | SMEAR | SHIM. DELAY: DELAY dry/wet [DRY = off] | D.TIME
  40 ms-2 s, tape glide | D.FDBK, 100 % = repeats hold | CHAR TAPE / CLEAN / UP 5th / UP OCT. PRINT ON: during REC / DUB
  only, the input processed by a second DELAY -> REVERB chain is recorded instead of the dry input; the existing loop is
  never re-processed (measured: difference 0). Safety and clicks: no NaN, peak < 1, no click.
LAYERS (since v1.3): one play head per layer, all at the same speed (multitrack tape). L.MODE SOLO = only the active
  layer plays (layer key = choose it); MULTI = all non-muted layers play together; layer key short press = mute /
  unmute, long press (0.5 s) = choose the layer AUX records / overdubs. Measured: mute -105 dB, no click (-66.6 dB).
CPU (x86 test machine, ratios only; t(40 s) - t(10 s), noise input, 4 s loop): PLAY without effects 0.11x vcs.cc 8v;
  factory 0.15x; 6 layers in MULTI 0.13x; worst case (DUB + wear + DELAY + REVERB + PRINT, two effect chains) 0.29x.
MEMORY: 6 x 13 s x 44,100 x 4 bytes = 13.8 MB (+ about 1.7 MB for the effects), about 1.6 % of the S2's 1 GB (source: C&G forum).
SETTINGS saved to tcs-etat-v14.txt 2 s after the last move; delete it for factory settings.
HISTORY v1.4: header layer squares (filled / hollow / dash, active underlined; REVERSE = inverted state).
v1.3: one play head per layer, L.MODE SOLO / MULTI (replaces H.PAN), mute with short key press.
v1.2: the tape only changes during REC / DUB (wear and drift act on playback, LENGTH is a play window: both
  measured non-destructive, difference 0); DELAY / VERB are true dry/wet inserts; PRINT records the chain output.
v1.1: ambient DELAY / REVERB pages, FX.IN, PRINT (replace ECHO / SPRING / LOFI / WIDTH); 9 pages.
v1.0: taken from the tape part of gcs.cc v1.0; 20 pages -> 8; FREEZE -> looper; keys G-B now set head speed;
  H.LEVEL 70 -> 100 %; wear now also acts in PLAY; fixed during the split: silent ECHO, one extra head pass after
  erasing, splash crash.
NOT VERIFIED: Pd version on the S2, objects and mic channel (gcs-check), LED colours, real CPU, real saxophone.
