Files
livecodingfr/dist/_app/immutable/chunks/livecoding_supercollider_2.GjliqYdz.js
2024-01-06 18:36:03 +01:00

59 lines
56 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import{s as Fa,x as it,y as Ha,n as Va}from"./scheduler.aZRR5A_O.js";import{S as Ga,i as Aa,r as ga,u as Ma,v as Sa,d as Na,t as Oa,w as ja,g as a,s as p,H as f,h as o,x as u,c as l,j as v,C as b,f as e,l as Ka,k as r,a as t}from"./index.AIcdAWo0.js";import{G as Qa,g as Wa,a as Pa}from"./guides.RN6emr9S.js";import{I as Xa}from"./Info.8pLsFJ2C.js";function Ya(zn){let c,L="Introduction",x,d,i="Le labyrinthe <strong>SuperCollider</strong>",m,k,rt=`<br/> <div><a href="https://www.instagram.com/p/CtHWU0fuOKd/"><img style="min-width: 200px;width:30%;height:auto;float:inline-end;padding-right:20px;margin-left:20px" src="/images/supercollider_meme.png"/></a></div> <p>Si vous avez lu et suivi le premier article, tout est en place et vous devriez
maintenant être prêt à jouer. Lune des qualités mais aussi lun des défauts de <strong>SuperCollider</strong> est de ne
pas vous astreindre à suivre une route particulière concernant la manière dont il vous faut approcher la création sonore lorsque vous débutez. Le logiciel est extrêmement générique et chaque
utilisateur développe progressivement ses propres abstractions et une logique qui lui est propre. Il existe plusieurs dizaines de mécanismes
distincts et la documentation tentaculaire du logiciel recommande souvent des
approches contradictoires ou des solutions qui ne fonctionneront pas
nécessairement avec votre méthode de travail. Il est donc nécessaire dêtre toujours
conscient des choix que vous avez opéré et ne pas hésiter à revenir en
arrière si ces derniers ne vous conviennent pas. <strong>SuperCollider</strong> est un logiciel
déjà ancien, et la librairie standard est si vaste quil est difficile de la comprendre entièrement et encore moins de la maîtriser. Il
est toutefois possible de développer une certaine expertise pour utiliser <strong>SuperCollider</strong> dune certaine manière et de construire progressivement ses connaissances en fonction des projets.</p> <br/>`,In,H,mt="<strong>JITLib</strong> et le <em>live coding</em>",hn,Bn,En,P,dt='Lapproche que nous suivons dans ce guide repose sur la librairie <a href="https://doc.sccode.org/Overviews/JITLib.html" rel="nofollow">JITLib</a>. Cette librairie développée par <a href="https://www.rsh-duesseldorf.de/institute/institut-fuer-musik-und-medien/lehrende-mitarbeitende/rohrhuber-julian" rel="nofollow">Julian Rohrhuber</a> est devenue si populaire quelle est désormais intégrée par défaut à <strong>SuperCollider</strong> lors de linstallation. Les avantages offerts par cette dernière ne sont pas évidents à saisir lorsquon débute sur <strong>SuperCollider</strong>. Un grand nombre dutilisateurs lignorent complètement dans leur travail. La raison qui nous pousse à lutiliser est que cette dernière est prévue, <em>par défaut</em>, pour permettre le <em>live coding</em>. Même dans ce domaine déjà très spécifique, <strong>JITLib</strong> reste encore relativement générique. Le mécanisme que la librairie implémente est très simple : <strong>JITLib</strong> permet de remplacer <em>à chaud</em>, <em>en temps réel</em>, nimporte quelle donnée (audio, information) par une information de nature similaire. Voici la traduction du premier paragraphe de la documentation :',Jn,$n,Un,_,kt="<p>La programmation <em>just in time</em> (ou la programmation conversationnelle, le <em>live coding</em>, la <em>programmation à la volée</em>, la programmation interactive) est un paradigme qui inclut lactivité de programmation dans le déroulement du programme. Dans ce paradigme, le programme nest pas considéré comme un outil qui est conçu avant dêtre utilisé plus tard de manière productive. Plutôt, il sagit de concevoir la conception dynamique des programmes comme une description et comme une conversation. Écrire du code devient une partie intégrante de lexpérience musicale ou de la pratique expérimentale.</p>",Dn,Fn,Vn,y,ft="<strong>JITLib</strong> intègre ce principe à <strong>SuperCollider</strong> de manière assez approfondie. On se retrouve rarement bloqué du fait dune incompatibilité entre la librairie standard et <strong>JITLib</strong>. Par ailleurs, <strong>JITLib</strong> est si finement intégré quil est parfois délicat de savoir si telle ou telle fonctionnalité relève de cette librairie ou vient de linstallation standard de <strong>SuperCollider</strong>.",Gn,An,Kn,g,vt="Conseils de lecture",Qn,Wn,Xn,M,bt="Cette partie du guide est <em>de loin la plus pénible</em>. Elle introduit tout les concepts importants que nous manipulerons pour faire de la musique avec <strong>SuperCollider</strong>. Il sagit en quelque sorte du solfège élémentaire pour un <em>live coder</em> utilisant <strong>SuperCollider</strong>. Je suis conscient que les premiers paragraphes sont particulièrement difficiles pour un utilisateur débutant. Nhésitez pas à continuer votre lecture si un détail vous échappe, vous finirez sans doute par comprendre ultérieurement par la pratique. Ne vous laissez pas arrêter par du vocabulaire ou des concepts peu familiers.",Yn,S,xt="<code>ProxySpace</code> et <code>Ndefs</code>",Zn,N,Lt="Le principe de base de la librairie",ne,ee,se,O,_t="Tout commence avec un peu de vocabulaire. <strong>JITLib</strong> introduit la notion de <strong>ProxySpace</strong>, un environnement de références vers des <em>proxys</em> : ”<em>an environment of references on a server</em>”. Une référence est un nom associé à un objet. Cest aussi simple que <code>~a = 2</code> ou <code>~a</code> est un <em>proxy</em> et <code>2</code> un objet. Ce système fonctionne à laide de <em>proxys</em>, il nous faut donc comprendre ce quest un <em>proxy</em>. Cest une notion relativement simple, il sagit dun objet qui contient <em>quelque chose</em>.",te,ae,pe,q,qt="<p><strong>Proxy:</strong> un <em>proxy</em> est un contenant pour <em>quelque chose</em> qui tourne sur le serveur, généralement un contrôle ou un algorithme audio. Cest un objet vide ou non-vide. Un <em>proxy</em> peut contenir le <em>node</em> dun oscillateur (<em>cf.</em> la suite) mais il pourrait aussi contenir un filtre audio, un synthétiseur que nous venons de créer ou même un pattern algorithmique. Le <em>proxy</em> englobe ce quil contient et réalise à notre place tout un tas dopérations quil est dordinaire nécessaire de gérer manuellement. Par exemple, on peut remplacer le contenu dun <em>proxy</em> par un autre <em>node</em> sans interruption du signal, supprimer le contenant dun <em>proxy</em> sans pour autant supprimer la boîte elle-même.</p>",oe,le,ue,j,Tt="Un <strong>ProxySpace</strong> est un ensemble de clés et de valeurs, un grand sac dans lequel on manipule des <em>proxy</em>. Les clés sont des références vers des <code>NodeProxy</code>. Tout ceci est sans aucune importance tant que nous ne le manipulons pas pour générer du son.",ce,ie,re,w,Ct="Remplacer lenvironnement par défaut par un <code>ProxySpace</code>",me,de,ke,R,Ht="Dans le guide précédent se trouvait une ligne assez inhabituelle, celle qui nous servait pour démarrer le serveur :",fe,z,ve,wa='<code class="language-supercollider">p <span class="token operator">=</span> <span class="token class-name">ProxySpace</span><span class="token punctuation">.</span>push<span class="token punctuation">(</span>s<span class="token punctuation">.</span>boot<span class="token punctuation">)</span><span class="token punctuation">;</span></code>',be,I,Pt="Sans entrer dans le détail, cette ligne réalise deux actions distinctes :",xe,T,yt="<br/> <p>1) elle démarre le serveur audio de <strong>SuperCollider</strong> (<code>s.boot</code>)</p> <p>2) elle <em>pousse</em> lenvironnement par défaut dans un <strong>ProxySpace</strong></p>",Le,_e,qe,h,gt="Avec la méthode <code>push</code>, toutes les variables globales de lenvironnement actuel deviennent mécaniquement des <code>NodeProxy</code> dans le <strong>ProxySpace</strong>. Pour sen convaincre, il suffit de taper le nom dune variable et dobserver la valeur de retour :",Te,Ce,He,B,Pe,Ra='<code class="language-supercollider">~bob<span class="token punctuation">;</span> <span class="token comment">// -> NodeProxy.nil(localhost, nil)</span></code>',ye,E,Mt="Ce nest pas très parlant si vous nêtes oas habitués à <strong>SuperCollider</strong> ou à la programmation. Essayons maintenant de voir ce que cela signifie lorsque nous souhaitons manipuler du son, sans spécifiquement aborder tout les détails. Évaluez le code suivant ligne par ligne :",ge,J,Me,za=`<code class="language-cpp"><span class="token operator">~</span>osc <span class="token operator">=</span> <span class="token punctuation">&#123;</span>SinOsc<span class="token punctuation">.</span><span class="token function">ar</span><span class="token punctuation">(</span><span class="token number">200</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">0.5</span><span class="token punctuation">&#125;</span><span class="token punctuation">;</span> <span class="token comment">// J'évalue, rien ne se passe. Associe une fonction audio à un NodeProxy</span>
<span class="token operator">~</span>osc<span class="token punctuation">.</span>play<span class="token punctuation">;</span> <span class="token comment">// On connecte l'audio à la sortie et on joue la fonction</span>
<span class="token operator">~</span>osc <span class="token operator">=</span> <span class="token punctuation">&#123;</span>SinOsc<span class="token punctuation">.</span><span class="token function">ar</span><span class="token punctuation">(</span><span class="token number">400</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">0.5</span><span class="token punctuation">&#125;</span><span class="token punctuation">;</span> <span class="token comment">// On remplace la fonction précédente par une autre (sans interruption !)</span>
<span class="token operator">~</span>osc<span class="token punctuation">.</span><span class="token function">stop</span><span class="token punctuation">(</span>fadeTime<span class="token operator">:</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// On stoppe avec un joli fade-out</span>
<span class="token operator">~</span>osc<span class="token punctuation">.</span>clear<span class="token punctuation">;</span> <span class="token comment">// On libère la mémoire</span></code>`,Se,Ne,Oe,$,St="Nous avons associé une fonction audio (<code>{SinOsc.ar(200) * 0.5}</code>) à une référence (<code>~osc</code>). Cest tout le principe de <strong>JITLib</strong>. Cette association peut être remplacée à tout moment sans interruption grâce au <em>proxy</em>. Le <code>NodeProxy</code> nommé <code>~osc</code> accepte un grand nombre de manipulations différentes et son rôle est totalement redéfini par rapport au comportement habituel dune variable en dehors de lutilisation de <strong>JITLib</strong>.",je,we,Re,U,Nt="Ce nest plus une variable, cest un <code>Proxy</code> dans notre <code>ProxySpace</code>. La ligne <code>~osc.stop(fadeTime: 4)</code> démontre aussi que les <code>NodeProxy</code> intègrent de nombreuses méthodes destinées à gérer laudio: <em>fade in</em>, <em>fade out</em>, contrôle du niveau des sources : etc.",ze,Ie,he,D,Ot="Nous allons utiliser ce principe fondamental introduit par <strong>JITLib</strong> tout au long de ce guide pour contrôler tout ce que nous souhaitons / pouvons contrôler : <strong>algorithmes audio</strong>, <strong>patterns algorithmiques</strong>, <strong>effets sonores</strong>, etc. Il est <strong>essentiel</strong> de retenir ce principe du <em>proxy</em> car il nous permet de savoir réellement ce que nous sommes en train de manipuler à tout moment au cours du jeu : essentiellement des <code>NodeProxy</code>.",Be,Ee,Je,F,jt="Sans en savoir beaucoup plus, il est déjà possible de faire un petit peu de musique en samusant à remplacer une source par un autre :",$e,V,Ue,Ia=`<code class="language-cpp"><span class="token operator">~</span>osc <span class="token operator">=</span> <span class="token punctuation">&#123;</span>SinOsc<span class="token punctuation">.</span><span class="token function">ar</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">200</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">0.5</span><span class="token punctuation">&#125;</span><span class="token punctuation">;</span> <span class="token comment">// On associe une source à un NodeProxy, un double oscillateur</span>
<span class="token operator">~</span>osc<span class="token punctuation">.</span><span class="token function">play</span><span class="token punctuation">(</span>fadeTime<span class="token operator">:</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// On lance le NodeProxy avec un fade-in</span>
<span class="token operator">~</span>osc<span class="token punctuation">.</span>fadeTime <span class="token operator">=</span> <span class="token number">4</span><span class="token punctuation">;</span> <span class="token comment">// On change le fadeTime général</span>
<span class="token operator">~</span>osc <span class="token operator">=</span> <span class="token punctuation">&#123;</span>LPF<span class="token punctuation">.</span><span class="token function">ar</span><span class="token punctuation">(</span>SinOsc<span class="token punctuation">.</span><span class="token function">ar</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">400</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span> SinOsc<span class="token punctuation">.</span><span class="token function">ar</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">/</span><span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">range</span><span class="token punctuation">(</span><span class="token number">200</span><span class="token punctuation">,</span><span class="token number">2000</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">0.5</span><span class="token punctuation">&#125;</span><span class="token punctuation">;</span> <span class="token comment">// On remplace la source</span>
<span class="token operator">~</span>osc <span class="token operator">=</span> <span class="token punctuation">&#123;</span>LPF<span class="token punctuation">.</span><span class="token function">ar</span><span class="token punctuation">(</span>SinOsc<span class="token punctuation">.</span><span class="token function">ar</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">800</span><span class="token punctuation">,</span> <span class="token number">350</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span> SinOsc<span class="token punctuation">.</span><span class="token function">ar</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">/</span><span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">range</span><span class="token punctuation">(</span><span class="token number">200</span><span class="token punctuation">,</span><span class="token number">2000</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">0.5</span><span class="token punctuation">&#125;</span><span class="token punctuation">;</span> <span class="token comment">// On remplace la source</span>
<span class="token operator">~</span>osc <span class="token operator">=</span> <span class="token punctuation">&#123;</span>LPF<span class="token punctuation">.</span><span class="token function">ar</span><span class="token punctuation">(</span>SinOsc<span class="token punctuation">.</span><span class="token function">ar</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">200</span><span class="token punctuation">,</span> <span class="token number">150</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span> SinOsc<span class="token punctuation">.</span><span class="token function">ar</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">/</span><span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">range</span><span class="token punctuation">(</span><span class="token number">200</span><span class="token punctuation">,</span><span class="token number">2000</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">0.5</span><span class="token punctuation">&#125;</span><span class="token punctuation">;</span> <span class="token comment">// On remplace la source</span>
<span class="token operator">~</span>osc<span class="token punctuation">.</span><span class="token function">stop</span><span class="token punctuation">(</span>fadeTime<span class="token operator">:</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Fade-out</span>
<span class="token operator">~</span>osc<span class="token punctuation">.</span>clear<span class="token punctuation">;</span> <span class="token comment">// On libère la mémoire</span></code>`,De,Fe,Ve,G,wt="Même si tout reste assez primitif pour le moment, on peut déjà faire beaucoup de choses en suivant ce principe. Il est possible dutiliser nimporte quel algorithme audio et de le mettre à jour graduellement tout au long dune performance. Ce type de <em>live coding</em> centré autour de la musique à jour dun générateur sonore se prête plutôt bien à de la musique électro-acoustique, <em>ambient</em>, <em>noise</em>, etc.",Ge,Ae,Ke,A,Rt="Les <code>Ndefs</code> : une autre manière de faire la même chose",Qe,We,Xe,K,zt="La technique que nous utilisons avec <code>ProxySpace.push(s.boot)</code> <em>dissimule</em> lutilisation que nous faisons des <code>NodeProxy</code>. Cette fonctionnalité a été intégrée car elle permet de gagner du temps de frappe mais elle a pour désavantage de rendre plus difficilement perceptible ce que nous sommes réellement en train de faire. À première vue, il semble que <code>~a = 2</code> soit juste une assignation de variable comme dans un langage de programmation classique. Pourtant, il sagit dune opération qui crée/modifie un <code>NodeProxy</code>.",Ye,Ze,ns,Q,It="Nous occultons le fait que les variables globales de <strong>SuperCollider</strong> sont maintenant des <code>NodeProxy</code>. Il est possible de se passer entièrement de <code>Proxyspace.push</code> et de cet avantage/désagrément en utilisant les <code>Ndefs</code>. Il sagit dune préférence personnelle, presque dordre stylistique.",es,ss,ts,W,as,ps,os,X,ht="Le terme de <strong>NDef</strong> est un raccourci pour <em>Node Proxy Definition</em>. On retrouve du vocabulaire familier. Cest une autre manière de désigner exactement le même type dobjet que ce que nous manipulons depuis le début ! Seule la syntaxe diffère. Profitons-en quand même pour évoquer rapidement ce quest un <em>node</em> :",ls,us,cs,C,Bt="<p><strong>Node:</strong> un <em>node</em> est un objet défini en interne par le serveur audio de <strong>SuperCollider</strong>. Un synthétiseur est un <em>node</em>, beaucoup dobjets présents sur le serveur sont des <em>nodes</em>. Il sagit dun objet générique utilisé pour une opération audio : contrôle ou synthétiseur. Cest un objet abstrait, quon ne manipule jamais directement. Les fonctions audio que nous venons dutiliser dans lexemple précédent sont des <em>nodes</em> que lon associe à un <em>proxy</em>. Un <em>node</em> tire ce nom du fait que ce sont des <em>noeuds</em> dans un graphe audio, des objets qui ont une position dans un graphe de traitement du signal.</p>",is,rs,ms,Y,Et="Les <code>Ndefs</code> ont pour avantage de ne pas se propager dans lenvironnement local. Elles rendent tout un petit peu plus clair. Réécrivons lexemple précédent en utilisant uniquement des <code>Ndefs</code> :",ds,Z,ks,ha=`<code class="language-cpp"><span class="token function">Ndef</span><span class="token punctuation">(</span>osc<span class="token punctuation">,</span> <span class="token punctuation">&#123;</span>SinOsc<span class="token punctuation">.</span><span class="token function">ar</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">200</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">0.5</span><span class="token punctuation">&#125;</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// On associe une source à un NodeProxy, un double oscillateur</span>
<span class="token function">Ndef</span><span class="token punctuation">(</span>osc<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">play</span><span class="token punctuation">(</span>fadeTime<span class="token operator">:</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// On lance le NodeProxy avec un fade-in</span>
<span class="token function">Ndef</span><span class="token punctuation">(</span>osc<span class="token punctuation">)</span><span class="token punctuation">.</span>fadeTime <span class="token operator">=</span> <span class="token number">4</span><span class="token punctuation">;</span> <span class="token comment">// On change le fadeTime général</span>
<span class="token function">Ndef</span><span class="token punctuation">(</span>osc<span class="token punctuation">,</span> <span class="token punctuation">&#123;</span>LPF<span class="token punctuation">.</span><span class="token function">ar</span><span class="token punctuation">(</span>SinOsc<span class="token punctuation">.</span><span class="token function">ar</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">400</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span> SinOsc<span class="token punctuation">.</span><span class="token function">ar</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">/</span><span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">range</span><span class="token punctuation">(</span><span class="token number">200</span><span class="token punctuation">,</span><span class="token number">2000</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">0.5</span><span class="token punctuation">&#125;</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// On remplace la source</span>
<span class="token function">Ndef</span><span class="token punctuation">(</span>osc<span class="token punctuation">,</span> <span class="token punctuation">&#123;</span>LPF<span class="token punctuation">.</span><span class="token function">ar</span><span class="token punctuation">(</span>SinOsc<span class="token punctuation">.</span><span class="token function">ar</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">800</span><span class="token punctuation">,</span> <span class="token number">350</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span> SinOsc<span class="token punctuation">.</span><span class="token function">ar</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">/</span><span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">range</span><span class="token punctuation">(</span><span class="token number">200</span><span class="token punctuation">,</span><span class="token number">2000</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">0.5</span><span class="token punctuation">&#125;</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// On remplace la source</span>
<span class="token function">Ndef</span><span class="token punctuation">(</span>osc<span class="token punctuation">,</span> <span class="token punctuation">&#123;</span>LPF<span class="token punctuation">.</span><span class="token function">ar</span><span class="token punctuation">(</span>SinOsc<span class="token punctuation">.</span><span class="token function">ar</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">200</span><span class="token punctuation">,</span> <span class="token number">150</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span> SinOsc<span class="token punctuation">.</span><span class="token function">ar</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">/</span><span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">range</span><span class="token punctuation">(</span><span class="token number">200</span><span class="token punctuation">,</span><span class="token number">2000</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">0.5</span><span class="token punctuation">&#125;</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// On remplace la source</span>
<span class="token function">Ndef</span><span class="token punctuation">(</span>osc<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">stop</span><span class="token punctuation">(</span>fadeTime<span class="token operator">:</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Fade-out</span>
<span class="token function">Ndef</span><span class="token punctuation">(</span>osc<span class="token punctuation">)</span><span class="token punctuation">.</span>clear<span class="token punctuation">;</span> <span class="token comment">// On libère la mémoire</span></code>`,fs,nn,Jt="Cest à vous de choisir quelle est la syntaxe que vous préférez.",vs,en,$t="Gestion des <code>NodeProxy</code>",bs,sn,Ut="<code>fadeTime</code>",xs,tn,Dt="Nous avons déjà utilisé la capacité des <code>NodeProxy</code> à opérer des <em>fade-ins</em> et des <em>fade-outs</em>. Cest une fonctionnalité très pratique, surtout lorsque vous manipulez des sources audio dynamiques et que vous souhaitez faire des transitions souples de lune à lautre. Il existe trois types de <em>fade</em> :",Ls,an,Ft="<li><em>fade-in</em> à lentrée : cest un argument de la méthode <code>.play</code> : <code>~osc.play(fadeTime: 4)</code> ou <code>Ndef(\\osc).play(fadeTime: 4)</code></li> <li><em>fade-in</em> en sortie : cest un argument de la méthode <code>.stop</code> ou <code>.clear</code> : <code>~osc.stop(fadeTime: 4)</code> ou <code>Ndef(\\osc).stop(fadeTime: 4)</code></li> <li><em>fade</em> général : cest un attribut du <code>NodeProxy</code> que lon contrôle avec la syntaxe <code>~osc.fadeTime = 4</code>;</li>",_s,pn,qs,Ba=`<code class="language-cpp"><span class="token operator">~</span>osc <span class="token operator">=</span> <span class="token punctuation">&#123;</span>SinOsc<span class="token punctuation">.</span><span class="token function">ar</span><span class="token punctuation">(</span><span class="token number">200</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">0.5</span><span class="token punctuation">&#125;</span><span class="token punctuation">;</span> <span class="token comment">// On crée une source audio</span>
<span class="token operator">~</span>osc<span class="token punctuation">.</span><span class="token function">play</span><span class="token punctuation">(</span>fadeTime<span class="token operator">:</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// On fait entrer doucement</span>
<span class="token operator">~</span>osc<span class="token punctuation">.</span>fadeTime <span class="token operator">=</span> <span class="token number">12</span><span class="token punctuation">;</span> <span class="token comment">// Transition très longue</span>
<span class="token operator">~</span>osc <span class="token operator">=</span> <span class="token punctuation">&#123;</span>SinOsc<span class="token punctuation">.</span><span class="token function">ar</span><span class="token punctuation">(</span><span class="token number">2000</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">0.5</span><span class="token punctuation">&#125;</span><span class="token punctuation">;</span> <span class="token comment">// Transition lente vers la fréquence voulue</span>
<span class="token operator">~</span>osc<span class="token punctuation">.</span><span class="token function">clear</span><span class="token punctuation">(</span>fadeTime<span class="token operator">:</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// On s'arrête</span></code>`,Ts,Cs,Hs,on,Vt="<code>.stop</code> / <code>.clear</code>",Ps,ln,Gt="Les méthodes <code>.stop</code> et <code>.clear</code> ne réalisent pas la même opération :",ys,un,At="<li><code>.stop</code> : déconnecte le <code>NodeProxy</code> du reste de la chaîne audio. Il continue à tourner (et à consommer des ressources) mais en silence ! Vous pourrez le reconnecter plus tard.</li> <li><code>.clear</code> : détruit le <code>NodeProxy</code>. Vous pouvez réaliser la même opération en tapant : <code>~osc = nil</code>. Notez toutefois que <code>.clear</code> permet de spécifier un <em>fade-out</em> avant la destruction.</li>",gs,cn,Kt="Si vous souhaitez vous débarrasser de tout les <code>NodeProxy</code> actifs, il existe cette commande :",Ms,rn,Ss,Ea='<code class="language-supercollider">currentEnvironment<span class="token punctuation">.</span>free<span class="token punctuation">;</span></code>',Ns,mn,Qt=`Elle applique la fonction <code>free</code> à tout ce qui compose lenvironnement global.
Puisque ce dernier est un <code>ProxySpace</code>, on libère tout les <code>NodeProxy</code>.`,Os,dn,Wt="Modifier un/des paramètres",js,kn,Xt="Vous nêtes pas obligés de réévaluer lalgorithme dans son intégralité pour modifier une valeur sur un <code>NodeProxy</code>. Parfois, il est préférable de mettre à jour un paramètre sans que le <em>fade-in</em> et le <em>fade-out</em> ne sappliquent. Ce problème sera particulièrement sensible lorsque vous utiliserez des effets tels quun délai ou une réverbération.",ws,Rs,zs,fn,Yt="Si vous changez uniquement de valeur en réévaluant lalgorithme en entier, cela causera des problèmes avec lamplitude générale du signal. Cela peut aussi causer un effet de brouillon lié à la superposition de plusieurs algorithmes en cours de <em>fade-in</em> / <em>fade-out</em>. Deux méthodes existent pour mettre à jour un paramètre : <code>.set</code> (instantané) et <code>.xset</code> (progressif).",Is,vn,Zt="<code>.set</code>",hs,bn,na="La méthode <code>.set</code> met immédiatement à jour un paramètre <strong>immédiatement</strong>, dès que possible :",Bs,xn,Es,Ja=`<code class="language-cpp"><span class="token operator">~</span>osc <span class="token operator">=</span> <span class="token punctuation">&#123;</span> arg freq<span class="token operator">=</span><span class="token number">200</span><span class="token punctuation">;</span> SinOsc<span class="token punctuation">.</span><span class="token function">ar</span><span class="token punctuation">(</span>freq<span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">0.5</span><span class="token punctuation">&#125;</span><span class="token punctuation">;</span>
<span class="token operator">~</span>osc<span class="token punctuation">.</span><span class="token function">play</span><span class="token punctuation">(</span>fadeTime<span class="token operator">:</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">~</span>osc<span class="token punctuation">.</span><span class="token function">set</span><span class="token punctuation">(</span>\freq<span class="token punctuation">,</span> <span class="token number">800</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">~</span>osc<span class="token punctuation">.</span><span class="token function">set</span><span class="token punctuation">(</span>\freq<span class="token punctuation">,</span> <span class="token number">400</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">~</span>osc<span class="token punctuation">.</span><span class="token function">clear</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code>`,Js,Ln,ea="<code>.xset</code>",$s,_n,sa="La méthode <code>.xset</code> met immédiatement à jour un paramètre <strong>progressivement</strong>, suivant le <code>fadeTime</code> :",Us,qn,Ds,$a=`<code class="language-cpp"><span class="token operator">~</span>osc <span class="token operator">=</span> <span class="token punctuation">&#123;</span> arg freq<span class="token operator">=</span><span class="token number">200</span><span class="token punctuation">;</span> SinOsc<span class="token punctuation">.</span><span class="token function">ar</span><span class="token punctuation">(</span>freq<span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">0.5</span><span class="token punctuation">&#125;</span><span class="token punctuation">;</span>
<span class="token operator">~</span>osc<span class="token punctuation">.</span><span class="token function">play</span><span class="token punctuation">(</span>fadeTime<span class="token operator">:</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">~</span>osc<span class="token punctuation">.</span>fadeTime <span class="token operator">=</span> <span class="token number">8</span><span class="token punctuation">;</span> <span class="token comment">// On change le fadeTime pour .xset</span>
<span class="token operator">~</span>osc<span class="token punctuation">.</span><span class="token function">xset</span><span class="token punctuation">(</span>\freq<span class="token punctuation">,</span> <span class="token number">800</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">~</span>osc<span class="token punctuation">.</span><span class="token function">xset</span><span class="token punctuation">(</span>\freq<span class="token punctuation">,</span> <span class="token number">400</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">~</span>osc<span class="token punctuation">.</span><span class="token function">clear</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code>`,Fs,Tn,ta="Contrôler plusieurs paramètres",Vs,Gs,As,Cn,aa=`Il est possible de contrôler plusieurs paramètres en une seule commande si
besoin est :`,Ks,Hn,Qs,Ua='<code class="language-supercollider">~osc<span class="token punctuation">.</span>xset<span class="token punctuation">(</span><span class="token symbol">\freq</span><span class="token punctuation">,</span> <span class="token number">800</span><span class="token punctuation">,</span> <span class="token symbol">amp</span><span class="token punctuation">,</span> <span class="token number">0.2</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code>',Ws,Pn,pa=`Tout dépend de ce dont vous avez besoin. Réévaluer la fonction entière peut
aussi être une stratégie intéressante dans certains cas.`,Xs,yn,oa="Communication entre <code>NodeProxies</code>",Ys,gn,la="On peut associer plusieurs <code>NodeProxies</code> pour former des algorithmes audio plus complexes et modulaires. Chaque <code>NodeProxy</code> peut être imaginé comme un module remplissant une fonction particulière dans un synthétiseur modulaire plus imposant. Pensez au <em>patching</em> dans un environnement comme <em>Max/MSP</em> ou <em>Pure Data</em> ou au <em>patching</em> analogique dun synthétiseur physique.",Zs,nt,et,Mn,ua="Il est possible de définir un <code>NodeProxy</code> oscillateur puis un contrôle (de type <em>LFO</em>) pour moduler la fréquence de cet oscillateur. Voici la méthode la plus simple que vous puissiez employer :",st,Sn,tt,Da=`<code class="language-cpp"><span class="token operator">~</span>source <span class="token operator">=</span> <span class="token punctuation">&#123;</span>arg freq<span class="token operator">=</span><span class="token number">400</span><span class="token punctuation">;</span> SinOsc<span class="token punctuation">.</span><span class="token function">ar</span><span class="token punctuation">(</span>freq<span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">0.5</span><span class="token punctuation">&#125;</span><span class="token punctuation">;</span> <span class="token comment">// Une source que l'on souhaite moduler</span>
<span class="token operator">~</span>source<span class="token punctuation">.</span>play<span class="token punctuation">;</span>
<span class="token operator">~</span>source<span class="token punctuation">.</span><span class="token function">set</span><span class="token punctuation">(</span>\freq<span class="token punctuation">,</span> <span class="token number">300</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// On peut utiliser set pour une valeur statique</span>
<span class="token operator">~</span>freq <span class="token operator">=</span> <span class="token punctuation">&#123;</span> SinOsc<span class="token punctuation">.</span><span class="token function">ar</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">/</span><span class="token number">2</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">400</span> <span class="token punctuation">&#125;</span><span class="token punctuation">;</span> <span class="token comment">// Voici un LFO (Low Frequency Oscillator)</span>
<span class="token operator">~</span>source<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span>\\freq<span class="token punctuation">,</span> <span class="token operator">~</span>freq<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Utilisation de la fonction map</span></code>`,at,Nn,ca=`<code>.map</code> possède une fonction alternative, nommée <code>.xmap</code>. Elle fonctionne tout
comme <code>.set</code> et <code>.xset</code>.`,pt,On,ia="Conclusion",ot,jn,ra="Dans cette section du guide, nous avons appris :",lt,wn,ma="<li>Ce quest un <code>NodeProxy</code> et un <code>ProxySpace</code>, loutil de base offert par <strong>JITLib</strong></li> <li>La différence entre <code>ProxySpace.push</code> et lutilisation explicite des <code>NDefs</code></li> <li>Comment démarrer, stopper et arrêter un <code>NodeProxy</code></li> <li>Comment contrôler le <em>fade-in</em> et le <em>fade-out</em> et la transition entre algorithmes</li>",ut,Rn,da="Je ne fais ici queffleurer les différentes commandes que possèdent les <code>NodeProxy</code>. Si vous souhaitez en apprendre plus, allez voir la documentation. Nous utiliserons un nombre limité de méthodes au fur et à mesure, lorsque nous en aurons besoin.",ct;return W=new Xa({props:{info:"Pour être plus précis, <code>ProxySpace.push(...)</code> transforme le <em>scope</em> global en un <code>ProxySpace</code>. Seule les variables de <code>a</code> à <code>z</code> sont épargnées.",markdown:"false"}}),{c(){c=a("h2"),c.textContent=L,x=p(),d=a("h3"),d.innerHTML=i,m=p(),k=a("div"),k.innerHTML=rt,In=p(),H=a("h3"),H.innerHTML=mt,hn=p(),Bn=a("br"),En=p(),P=a("p"),P.innerHTML=dt,Jn=p(),$n=a("br"),Un=p(),_=a("blockquote"),_.innerHTML=kt,Dn=p(),Fn=a("br"),Vn=p(),y=a("p"),y.innerHTML=ft,Gn=p(),An=a("br"),Kn=p(),g=a("h3"),g.textContent=vt,Qn=p(),Wn=a("br"),Xn=p(),M=a("p"),M.innerHTML=bt,Yn=p(),S=a("h2"),S.innerHTML=xt,Zn=p(),N=a("h3"),N.textContent=Lt,ne=p(),ee=a("br"),se=p(),O=a("p"),O.innerHTML=_t,te=p(),ae=a("br"),pe=p(),q=a("div"),q.innerHTML=qt,oe=p(),le=a("br"),ue=p(),j=a("p"),j.innerHTML=Tt,ce=p(),ie=a("br"),re=p(),w=a("h3"),w.innerHTML=Ct,me=p(),de=a("br"),ke=p(),R=a("p"),R.textContent=Ht,fe=p(),z=a("pre"),ve=new f(!1),be=p(),I=a("p"),I.textContent=Pt,xe=p(),T=a("div"),T.innerHTML=yt,Le=p(),_e=a("br"),qe=p(),h=a("p"),h.innerHTML=gt,Te=p(),Ce=a("br"),He=p(),B=a("pre"),Pe=new f(!1),ye=p(),E=a("p"),E.innerHTML=Mt,ge=p(),J=a("pre"),Me=new f(!1),Se=p(),Ne=a("br"),Oe=p(),$=a("p"),$.innerHTML=St,je=p(),we=a("br"),Re=p(),U=a("p"),U.innerHTML=Nt,ze=p(),Ie=a("br"),he=p(),D=a("p"),D.innerHTML=Ot,Be=p(),Ee=a("br"),Je=p(),F=a("p"),F.textContent=jt,$e=p(),V=a("pre"),Ue=new f(!1),De=p(),Fe=a("br"),Ve=p(),G=a("p"),G.innerHTML=wt,Ge=p(),Ae=a("br"),Ke=p(),A=a("h3"),A.innerHTML=Rt,Qe=p(),We=a("br"),Xe=p(),K=a("p"),K.innerHTML=zt,Ye=p(),Ze=a("br"),ns=p(),Q=a("p"),Q.innerHTML=It,es=p(),ss=a("br"),ts=p(),ga(W.$$.fragment),as=p(),ps=a("br"),os=p(),X=a("p"),X.innerHTML=ht,ls=p(),us=a("br"),cs=p(),C=a("div"),C.innerHTML=Bt,is=p(),rs=a("br"),ms=p(),Y=a("p"),Y.innerHTML=Et,ds=p(),Z=a("pre"),ks=new f(!1),fs=p(),nn=a("p"),nn.textContent=Jt,vs=p(),en=a("h2"),en.innerHTML=$t,bs=p(),sn=a("h3"),sn.innerHTML=Ut,xs=p(),tn=a("p"),tn.innerHTML=Dt,Ls=p(),an=a("ul"),an.innerHTML=Ft,_s=p(),pn=a("pre"),qs=new f(!1),Ts=p(),Cs=a("br"),Hs=p(),on=a("h3"),on.innerHTML=Vt,Ps=p(),ln=a("p"),ln.innerHTML=Gt,ys=p(),un=a("ul"),un.innerHTML=At,gs=p(),cn=a("p"),cn.innerHTML=Kt,Ms=p(),rn=a("pre"),Ss=new f(!1),Ns=p(),mn=a("p"),mn.innerHTML=Qt,Os=p(),dn=a("h2"),dn.textContent=Wt,js=p(),kn=a("p"),kn.innerHTML=Xt,ws=p(),Rs=a("br"),zs=p(),fn=a("p"),fn.innerHTML=Yt,Is=p(),vn=a("h3"),vn.innerHTML=Zt,hs=p(),bn=a("p"),bn.innerHTML=na,Bs=p(),xn=a("pre"),Es=new f(!1),Js=p(),Ln=a("h3"),Ln.innerHTML=ea,$s=p(),_n=a("p"),_n.innerHTML=sa,Us=p(),qn=a("pre"),Ds=new f(!1),Fs=p(),Tn=a("h3"),Tn.textContent=ta,Vs=p(),Gs=a("br"),As=p(),Cn=a("p"),Cn.textContent=aa,Ks=p(),Hn=a("pre"),Qs=new f(!1),Ws=p(),Pn=a("p"),Pn.textContent=pa,Xs=p(),yn=a("h2"),yn.innerHTML=oa,Ys=p(),gn=a("p"),gn.innerHTML=la,Zs=p(),nt=a("br"),et=p(),Mn=a("p"),Mn.innerHTML=ua,st=p(),Sn=a("pre"),tt=new f(!1),at=p(),Nn=a("p"),Nn.innerHTML=ca,pt=p(),On=a("h2"),On.textContent=ia,ot=p(),jn=a("p"),jn.textContent=ra,lt=p(),wn=a("ul"),wn.innerHTML=ma,ut=p(),Rn=a("p"),Rn.innerHTML=da,this.h()},l(n){c=o(n,"H2",{"data-svelte-h":!0}),u(c)!=="svelte-1ukekoe"&&(c.textContent=L),x=l(n),d=o(n,"H3",{"data-svelte-h":!0}),u(d)!=="svelte-tla2tn"&&(d.innerHTML=i),m=l(n),k=o(n,"DIV",{style:!0,"data-svelte-h":!0}),u(k)!=="svelte-u3kyqm"&&(k.innerHTML=rt),In=l(n),H=o(n,"H3",{"data-svelte-h":!0}),u(H)!=="svelte-hvsu7a"&&(H.innerHTML=mt),hn=l(n),Bn=o(n,"BR",{}),En=l(n),P=o(n,"P",{"data-svelte-h":!0}),u(P)!=="svelte-1ebejs"&&(P.innerHTML=dt),Jn=l(n),$n=o(n,"BR",{}),Un=l(n),_=o(n,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),u(_)!=="svelte-mc41r1"&&(_.innerHTML=kt),Dn=l(n),Fn=o(n,"BR",{}),Vn=l(n),y=o(n,"P",{"data-svelte-h":!0}),u(y)!=="svelte-jjfyzb"&&(y.innerHTML=ft),Gn=l(n),An=o(n,"BR",{}),Kn=l(n),g=o(n,"H3",{"data-svelte-h":!0}),u(g)!=="svelte-kghh5b"&&(g.textContent=vt),Qn=l(n),Wn=o(n,"BR",{}),Xn=l(n),M=o(n,"P",{"data-svelte-h":!0}),u(M)!=="svelte-18ss6m2"&&(M.innerHTML=bt),Yn=l(n),S=o(n,"H2",{"data-svelte-h":!0}),u(S)!=="svelte-wziajp"&&(S.innerHTML=xt),Zn=l(n),N=o(n,"H3",{"data-svelte-h":!0}),u(N)!=="svelte-1czqyl4"&&(N.textContent=Lt),ne=l(n),ee=o(n,"BR",{}),se=l(n),O=o(n,"P",{"data-svelte-h":!0}),u(O)!=="svelte-1qme27z"&&(O.innerHTML=_t),te=l(n),ae=o(n,"BR",{}),pe=l(n),q=o(n,"DIV",{class:!0,"data-svelte-h":!0}),u(q)!=="svelte-1307hli"&&(q.innerHTML=qt),oe=l(n),le=o(n,"BR",{}),ue=l(n),j=o(n,"P",{"data-svelte-h":!0}),u(j)!=="svelte-prqoyf"&&(j.innerHTML=Tt),ce=l(n),ie=o(n,"BR",{}),re=l(n),w=o(n,"H3",{"data-svelte-h":!0}),u(w)!=="svelte-rrudo5"&&(w.innerHTML=Ct),me=l(n),de=o(n,"BR",{}),ke=l(n),R=o(n,"P",{"data-svelte-h":!0}),u(R)!=="svelte-q4c6o4"&&(R.textContent=Ht),fe=l(n),z=o(n,"PRE",{class:!0});var s=v(z);ve=b(s,!1),s.forEach(e),be=l(n),I=o(n,"P",{"data-svelte-h":!0}),u(I)!=="svelte-15qr1gz"&&(I.textContent=Pt),xe=l(n),T=o(n,"DIV",{class:!0,"data-svelte-h":!0}),u(T)!=="svelte-1b0se9j"&&(T.innerHTML=yt),Le=l(n),_e=o(n,"BR",{}),qe=l(n),h=o(n,"P",{"data-svelte-h":!0}),u(h)!=="svelte-39j5eg"&&(h.innerHTML=gt),Te=l(n),Ce=o(n,"BR",{}),He=l(n),B=o(n,"PRE",{class:!0});var ka=v(B);Pe=b(ka,!1),ka.forEach(e),ye=l(n),E=o(n,"P",{"data-svelte-h":!0}),u(E)!=="svelte-1uzz73c"&&(E.innerHTML=Mt),ge=l(n),J=o(n,"PRE",{class:!0});var fa=v(J);Me=b(fa,!1),fa.forEach(e),Se=l(n),Ne=o(n,"BR",{}),Oe=l(n),$=o(n,"P",{"data-svelte-h":!0}),u($)!=="svelte-2ptytj"&&($.innerHTML=St),je=l(n),we=o(n,"BR",{}),Re=l(n),U=o(n,"P",{"data-svelte-h":!0}),u(U)!=="svelte-4rtqxi"&&(U.innerHTML=Nt),ze=l(n),Ie=o(n,"BR",{}),he=l(n),D=o(n,"P",{"data-svelte-h":!0}),u(D)!=="svelte-1n2er81"&&(D.innerHTML=Ot),Be=l(n),Ee=o(n,"BR",{}),Je=l(n),F=o(n,"P",{"data-svelte-h":!0}),u(F)!=="svelte-nk7hbz"&&(F.textContent=jt),$e=l(n),V=o(n,"PRE",{class:!0});var va=v(V);Ue=b(va,!1),va.forEach(e),De=l(n),Fe=o(n,"BR",{}),Ve=l(n),G=o(n,"P",{"data-svelte-h":!0}),u(G)!=="svelte-mlyqm"&&(G.innerHTML=wt),Ge=l(n),Ae=o(n,"BR",{}),Ke=l(n),A=o(n,"H3",{"data-svelte-h":!0}),u(A)!=="svelte-1t7im02"&&(A.innerHTML=Rt),Qe=l(n),We=o(n,"BR",{}),Xe=l(n),K=o(n,"P",{"data-svelte-h":!0}),u(K)!=="svelte-ngon7m"&&(K.innerHTML=zt),Ye=l(n),Ze=o(n,"BR",{}),ns=l(n),Q=o(n,"P",{"data-svelte-h":!0}),u(Q)!=="svelte-f4v0jn"&&(Q.innerHTML=It),es=l(n),ss=o(n,"BR",{}),ts=l(n),Ma(W.$$.fragment,n),as=l(n),ps=o(n,"BR",{}),os=l(n),X=o(n,"P",{"data-svelte-h":!0}),u(X)!=="svelte-l6ldcg"&&(X.innerHTML=ht),ls=l(n),us=o(n,"BR",{}),cs=l(n),C=o(n,"DIV",{class:!0,"data-svelte-h":!0}),u(C)!=="svelte-19ar4er"&&(C.innerHTML=Bt),is=l(n),rs=o(n,"BR",{}),ms=l(n),Y=o(n,"P",{"data-svelte-h":!0}),u(Y)!=="svelte-1i92p2x"&&(Y.innerHTML=Et),ds=l(n),Z=o(n,"PRE",{class:!0});var ba=v(Z);ks=b(ba,!1),ba.forEach(e),fs=l(n),nn=o(n,"P",{"data-svelte-h":!0}),u(nn)!=="svelte-13bak3j"&&(nn.textContent=Jt),vs=l(n),en=o(n,"H2",{"data-svelte-h":!0}),u(en)!=="svelte-1i05dg4"&&(en.innerHTML=$t),bs=l(n),sn=o(n,"H3",{"data-svelte-h":!0}),u(sn)!=="svelte-1clix3u"&&(sn.innerHTML=Ut),xs=l(n),tn=o(n,"P",{"data-svelte-h":!0}),u(tn)!=="svelte-iadzxn"&&(tn.innerHTML=Dt),Ls=l(n),an=o(n,"UL",{"data-svelte-h":!0}),u(an)!=="svelte-1vm6l4q"&&(an.innerHTML=Ft),_s=l(n),pn=o(n,"PRE",{class:!0});var xa=v(pn);qs=b(xa,!1),xa.forEach(e),Ts=l(n),Cs=o(n,"BR",{}),Hs=l(n),on=o(n,"H3",{"data-svelte-h":!0}),u(on)!=="svelte-1pfcn9s"&&(on.innerHTML=Vt),Ps=l(n),ln=o(n,"P",{"data-svelte-h":!0}),u(ln)!=="svelte-wngjim"&&(ln.innerHTML=Gt),ys=l(n),un=o(n,"UL",{"data-svelte-h":!0}),u(un)!=="svelte-1hgojc8"&&(un.innerHTML=At),gs=l(n),cn=o(n,"P",{"data-svelte-h":!0}),u(cn)!=="svelte-qhss8m"&&(cn.innerHTML=Kt),Ms=l(n),rn=o(n,"PRE",{class:!0});var La=v(rn);Ss=b(La,!1),La.forEach(e),Ns=l(n),mn=o(n,"P",{"data-svelte-h":!0}),u(mn)!=="svelte-1scrxs3"&&(mn.innerHTML=Qt),Os=l(n),dn=o(n,"H2",{"data-svelte-h":!0}),u(dn)!=="svelte-1wfsiwi"&&(dn.textContent=Wt),js=l(n),kn=o(n,"P",{"data-svelte-h":!0}),u(kn)!=="svelte-1yofu9l"&&(kn.innerHTML=Xt),ws=l(n),Rs=o(n,"BR",{}),zs=l(n),fn=o(n,"P",{"data-svelte-h":!0}),u(fn)!=="svelte-1tefuf0"&&(fn.innerHTML=Yt),Is=l(n),vn=o(n,"H3",{"data-svelte-h":!0}),u(vn)!=="svelte-1890c3r"&&(vn.innerHTML=Zt),hs=l(n),bn=o(n,"P",{"data-svelte-h":!0}),u(bn)!=="svelte-18br2j9"&&(bn.innerHTML=na),Bs=l(n),xn=o(n,"PRE",{class:!0});var _a=v(xn);Es=b(_a,!1),_a.forEach(e),Js=l(n),Ln=o(n,"H3",{"data-svelte-h":!0}),u(Ln)!=="svelte-1ywd8zx"&&(Ln.innerHTML=ea),$s=l(n),_n=o(n,"P",{"data-svelte-h":!0}),u(_n)!=="svelte-1fkbmv9"&&(_n.innerHTML=sa),Us=l(n),qn=o(n,"PRE",{class:!0});var qa=v(qn);Ds=b(qa,!1),qa.forEach(e),Fs=l(n),Tn=o(n,"H3",{"data-svelte-h":!0}),u(Tn)!=="svelte-1vok2p4"&&(Tn.textContent=ta),Vs=l(n),Gs=o(n,"BR",{}),As=l(n),Cn=o(n,"P",{"data-svelte-h":!0}),u(Cn)!=="svelte-xi4rz2"&&(Cn.textContent=aa),Ks=l(n),Hn=o(n,"PRE",{class:!0});var Ta=v(Hn);Qs=b(Ta,!1),Ta.forEach(e),Ws=l(n),Pn=o(n,"P",{"data-svelte-h":!0}),u(Pn)!=="svelte-7x740t"&&(Pn.textContent=pa),Xs=l(n),yn=o(n,"H2",{"data-svelte-h":!0}),u(yn)!=="svelte-1rbm8z9"&&(yn.innerHTML=oa),Ys=l(n),gn=o(n,"P",{"data-svelte-h":!0}),u(gn)!=="svelte-4omyha"&&(gn.innerHTML=la),Zs=l(n),nt=o(n,"BR",{}),et=l(n),Mn=o(n,"P",{"data-svelte-h":!0}),u(Mn)!=="svelte-10x1h48"&&(Mn.innerHTML=ua),st=l(n),Sn=o(n,"PRE",{class:!0});var Ca=v(Sn);tt=b(Ca,!1),Ca.forEach(e),at=l(n),Nn=o(n,"P",{"data-svelte-h":!0}),u(Nn)!=="svelte-548767"&&(Nn.innerHTML=ca),pt=l(n),On=o(n,"H2",{"data-svelte-h":!0}),u(On)!=="svelte-grw4hp"&&(On.textContent=ia),ot=l(n),jn=o(n,"P",{"data-svelte-h":!0}),u(jn)!=="svelte-v1qoh8"&&(jn.textContent=ra),lt=l(n),wn=o(n,"UL",{"data-svelte-h":!0}),u(wn)!=="svelte-ax6drr"&&(wn.innerHTML=ma),ut=l(n),Rn=o(n,"P",{"data-svelte-h":!0}),u(Rn)!=="svelte-j92gtb"&&(Rn.innerHTML=da),this.h()},h(){Ka(k,"margin-bottom","100px"),r(_,"class","bg-base-300 px-4 py-8 border-l-2"),r(q,"class","pl-8 pt-4 pb-4 bg-base-300"),ve.a=null,r(z,"class","language-supercollider"),r(T,"class","pl-8"),Pe.a=null,r(B,"class","language-supercollider"),Me.a=null,r(J,"class","language-cpp"),Ue.a=null,r(V,"class","language-cpp"),r(C,"class","pl-8 pt-4 pb-4 bg-base-300"),ks.a=null,r(Z,"class","language-cpp"),qs.a=null,r(pn,"class","language-cpp"),Ss.a=null,r(rn,"class","language-supercollider"),Es.a=null,r(xn,"class","language-cpp"),Ds.a=null,r(qn,"class","language-cpp"),Qs.a=null,r(Hn,"class","language-supercollider"),tt.a=null,r(Sn,"class","language-cpp")},m(n,s){t(n,c,s),t(n,x,s),t(n,d,s),t(n,m,s),t(n,k,s),t(n,In,s),t(n,H,s),t(n,hn,s),t(n,Bn,s),t(n,En,s),t(n,P,s),t(n,Jn,s),t(n,$n,s),t(n,Un,s),t(n,_,s),t(n,Dn,s),t(n,Fn,s),t(n,Vn,s),t(n,y,s),t(n,Gn,s),t(n,An,s),t(n,Kn,s),t(n,g,s),t(n,Qn,s),t(n,Wn,s),t(n,Xn,s),t(n,M,s),t(n,Yn,s),t(n,S,s),t(n,Zn,s),t(n,N,s),t(n,ne,s),t(n,ee,s),t(n,se,s),t(n,O,s),t(n,te,s),t(n,ae,s),t(n,pe,s),t(n,q,s),t(n,oe,s),t(n,le,s),t(n,ue,s),t(n,j,s),t(n,ce,s),t(n,ie,s),t(n,re,s),t(n,w,s),t(n,me,s),t(n,de,s),t(n,ke,s),t(n,R,s),t(n,fe,s),t(n,z,s),ve.m(wa,z),t(n,be,s),t(n,I,s),t(n,xe,s),t(n,T,s),t(n,Le,s),t(n,_e,s),t(n,qe,s),t(n,h,s),t(n,Te,s),t(n,Ce,s),t(n,He,s),t(n,B,s),Pe.m(Ra,B),t(n,ye,s),t(n,E,s),t(n,ge,s),t(n,J,s),Me.m(za,J),t(n,Se,s),t(n,Ne,s),t(n,Oe,s),t(n,$,s),t(n,je,s),t(n,we,s),t(n,Re,s),t(n,U,s),t(n,ze,s),t(n,Ie,s),t(n,he,s),t(n,D,s),t(n,Be,s),t(n,Ee,s),t(n,Je,s),t(n,F,s),t(n,$e,s),t(n,V,s),Ue.m(Ia,V),t(n,De,s),t(n,Fe,s),t(n,Ve,s),t(n,G,s),t(n,Ge,s),t(n,Ae,s),t(n,Ke,s),t(n,A,s),t(n,Qe,s),t(n,We,s),t(n,Xe,s),t(n,K,s),t(n,Ye,s),t(n,Ze,s),t(n,ns,s),t(n,Q,s),t(n,es,s),t(n,ss,s),t(n,ts,s),Sa(W,n,s),t(n,as,s),t(n,ps,s),t(n,os,s),t(n,X,s),t(n,ls,s),t(n,us,s),t(n,cs,s),t(n,C,s),t(n,is,s),t(n,rs,s),t(n,ms,s),t(n,Y,s),t(n,ds,s),t(n,Z,s),ks.m(ha,Z),t(n,fs,s),t(n,nn,s),t(n,vs,s),t(n,en,s),t(n,bs,s),t(n,sn,s),t(n,xs,s),t(n,tn,s),t(n,Ls,s),t(n,an,s),t(n,_s,s),t(n,pn,s),qs.m(Ba,pn),t(n,Ts,s),t(n,Cs,s),t(n,Hs,s),t(n,on,s),t(n,Ps,s),t(n,ln,s),t(n,ys,s),t(n,un,s),t(n,gs,s),t(n,cn,s),t(n,Ms,s),t(n,rn,s),Ss.m(Ea,rn),t(n,Ns,s),t(n,mn,s),t(n,Os,s),t(n,dn,s),t(n,js,s),t(n,kn,s),t(n,ws,s),t(n,Rs,s),t(n,zs,s),t(n,fn,s),t(n,Is,s),t(n,vn,s),t(n,hs,s),t(n,bn,s),t(n,Bs,s),t(n,xn,s),Es.m(Ja,xn),t(n,Js,s),t(n,Ln,s),t(n,$s,s),t(n,_n,s),t(n,Us,s),t(n,qn,s),Ds.m($a,qn),t(n,Fs,s),t(n,Tn,s),t(n,Vs,s),t(n,Gs,s),t(n,As,s),t(n,Cn,s),t(n,Ks,s),t(n,Hn,s),Qs.m(Ua,Hn),t(n,Ws,s),t(n,Pn,s),t(n,Xs,s),t(n,yn,s),t(n,Ys,s),t(n,gn,s),t(n,Zs,s),t(n,nt,s),t(n,et,s),t(n,Mn,s),t(n,st,s),t(n,Sn,s),tt.m(Da,Sn),t(n,at,s),t(n,Nn,s),t(n,pt,s),t(n,On,s),t(n,ot,s),t(n,jn,s),t(n,lt,s),t(n,wn,s),t(n,ut,s),t(n,Rn,s),ct=!0},p:Va,i(n){ct||(Na(W.$$.fragment,n),ct=!0)},o(n){Oa(W.$$.fragment,n),ct=!1},d(n){n&&(e(c),e(x),e(d),e(m),e(k),e(In),e(H),e(hn),e(Bn),e(En),e(P),e(Jn),e($n),e(Un),e(_),e(Dn),e(Fn),e(Vn),e(y),e(Gn),e(An),e(Kn),e(g),e(Qn),e(Wn),e(Xn),e(M),e(Yn),e(S),e(Zn),e(N),e(ne),e(ee),e(se),e(O),e(te),e(ae),e(pe),e(q),e(oe),e(le),e(ue),e(j),e(ce),e(ie),e(re),e(w),e(me),e(de),e(ke),e(R),e(fe),e(z),e(be),e(I),e(xe),e(T),e(Le),e(_e),e(qe),e(h),e(Te),e(Ce),e(He),e(B),e(ye),e(E),e(ge),e(J),e(Se),e(Ne),e(Oe),e($),e(je),e(we),e(Re),e(U),e(ze),e(Ie),e(he),e(D),e(Be),e(Ee),e(Je),e(F),e($e),e(V),e(De),e(Fe),e(Ve),e(G),e(Ge),e(Ae),e(Ke),e(A),e(Qe),e(We),e(Xe),e(K),e(Ye),e(Ze),e(ns),e(Q),e(es),e(ss),e(ts),e(as),e(ps),e(os),e(X),e(ls),e(us),e(cs),e(C),e(is),e(rs),e(ms),e(Y),e(ds),e(Z),e(fs),e(nn),e(vs),e(en),e(bs),e(sn),e(xs),e(tn),e(Ls),e(an),e(_s),e(pn),e(Ts),e(Cs),e(Hs),e(on),e(Ps),e(ln),e(ys),e(un),e(gs),e(cn),e(Ms),e(rn),e(Ns),e(mn),e(Os),e(dn),e(js),e(kn),e(ws),e(Rs),e(zs),e(fn),e(Is),e(vn),e(hs),e(bn),e(Bs),e(xn),e(Js),e(Ln),e($s),e(_n),e(Us),e(qn),e(Fs),e(Tn),e(Vs),e(Gs),e(As),e(Cn),e(Ks),e(Hn),e(Ws),e(Pn),e(Xs),e(yn),e(Ys),e(gn),e(Zs),e(nt),e(et),e(Mn),e(st),e(Sn),e(at),e(Nn),e(pt),e(On),e(ot),e(jn),e(lt),e(wn),e(ut),e(Rn)),ja(W,n)}}}function Za(zn){let c,L;const x=[zn[0],ya];let d={$$slots:{default:[Ya]},$$scope:{ctx:zn}};for(let i=0;i<x.length;i+=1)d=it(d,x[i]);return c=new Qa({props:d}),{c(){ga(c.$$.fragment)},l(i){Ma(c.$$.fragment,i)},m(i,m){Sa(c,i,m),L=!0},p(i,[m]){const k=m&1?Wa(x,[m&1&&Pa(i[0]),m&0&&Pa(ya)]):{};m&2&&(k.$$scope={dirty:m,ctx:i}),c.$set(k)},i(i){L||(Na(c.$$.fragment,i),L=!0)},o(i){Oa(c.$$.fragment,i),L=!1},d(i){ja(c,i)}}}const ya={title:"Introduction au live coding sur SuperCollider (II)",author:"Raphaël Maurice Forment",date:"2023-24-12"};function np(zn,c,L){return zn.$$set=x=>{L(0,c=it(it({},c),Ha(x)))},c=Ha(c),[c]}class pp extends Ga{constructor(c){super(),Aa(this,c,np,Za,Fa,{})}}export{pp as default,ya as metadata};