59 lines
56 KiB
JavaScript
59 lines
56 KiB
JavaScript
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.kYoizZ4A.js";import{G as Qa,g as Wa,a as Pa}from"./guides.fqK5Mftf.js";import{I as Xa}from"./Info.ITY44f4q.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" alt="SuperCollider meme"/></a></div> <p>Si vous avez lu et suivi le premier article, tout est en place et vous devriez
|
||
maintenant être prêt à jouer. L’une des qualités mais aussi l’un 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 qu’il 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> d’une 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='L’approche 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 qu’elle est désormais intégrée par défaut à <strong>SuperCollider</strong> lors de l’installation. Les avantages offerts par cette dernière ne sont pas évidents à saisir lorsqu’on débute sur <strong>SuperCollider</strong>. Un grand nombre d’utilisateurs l’ignorent complètement dans leur travail. La raison qui nous pousse à l’utiliser 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>, n’importe 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 l’activité de programmation dans le déroulement du programme. Dans ce paradigme, le programme n’est pas considéré comme un outil qui est conçu avant d’être utilisé plus tard de manière productive. Plutôt, il s’agit de concevoir la conception dynamique des programmes comme une description et comme une conversation. Écrire du code devient une partie intégrante de l’expé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 d’une incompatibilité entre la librairie standard et <strong>JITLib</strong>. Par ailleurs, <strong>JITLib</strong> est si finement intégré qu’il est parfois délicat de savoir si telle ou telle fonctionnalité relève de cette librairie ou vient de l’installation 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 s’agit 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. N’hé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. C’est 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 à l’aide de <em>proxys</em>, il nous faut donc comprendre ce qu’est un <em>proxy</em>. C’est une notion relativement simple, il s’agit d’un 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. C’est un objet vide ou non-vide. Un <em>proxy</em> peut contenir le <em>node</em> d’un 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 qu’il contient et réalise à notre place tout un tas d’opérations qu’il est d’ordinaire nécessaire de gérer manuellement. Par exemple, on peut remplacer le contenu d’un <em>proxy</em> par un autre <em>node</em> sans interruption du signal, supprimer le contenant d’un <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 l’environnement 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> l’environnement 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 l’environnement actuel deviennent mécaniquement des <code>NodeProxy</code> dans le <strong>ProxySpace</strong>. Pour s’en convaincre, il suffit de taper le nom d’une variable et d’observer 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 n’est 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">{</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">}</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">{</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">}</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>). C’est 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 d’une variable en dehors de l’utilisation de <strong>JITLib</strong>.",je,we,Re,U,Nt="Ce n’est plus une variable, c’est 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 l’audio: <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 s’amusant à 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">{</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">}</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">{</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">}</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">{</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">}</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">{</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">}</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 d’utiliser n’importe quel algorithme audio et de le mettre à jour graduellement tout au long d’une performance. Ce type de <em>live coding</em> centré autour de la musique à jour d’un 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> l’utilisation 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 s’agit d’une 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 s’agit d’une préférence personnelle, presque d’ordre 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. C’est une autre manière de désigner exactement le même type d’objet que ce que nous manipulons depuis le début ! Seule la syntaxe diffère. Profitons-en quand même pour évoquer rapidement ce qu’est 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 d’objets présents sur le serveur sont des <em>nodes</em>. Il s’agit d’un objet générique utilisé pour une opération audio : contrôle ou synthétiseur. C’est un objet abstrait, qu’on ne manipule jamais directement. Les fonctions audio que nous venons d’utiliser dans l’exemple précédent sont des <em>nodes</em> que l’on 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 l’environnement local. Elles rendent tout un petit peu plus clair. Réécrivons l’exemple 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">{</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">}</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">{</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">}</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>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">}</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>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">}</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="C’est à 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>. C’est une fonctionnalité très pratique, surtout lorsque vous manipulez des sources audio dynamiques et que vous souhaitez faire des transitions souples de l’une à l’autre. Il existe trois types de <em>fade</em> :",Ls,an,Ft="<li><em>fade-in</em> à l’entrée : c’est 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 : c’est 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 : c’est un attribut du <code>NodeProxy</code> que l’on 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">{</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">}</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">{</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">}</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 l’environnement 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 l’algorithme 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 s’appliquent. Ce problème sera particulièrement sensible lorsque vous utiliserez des effets tels qu’un délai ou une réverbération.",ws,Rs,zs,fn,Yt="Si vous changez uniquement de valeur en réévaluant l’algorithme en entier, cela causera des problèmes avec l’amplitude 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">{</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">}</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">{</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">}</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 d’un 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">{</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">}</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">{</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">}</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 qu’est un <code>NodeProxy</code> et un <code>ProxySpace</code>, l’outil de base offert par <strong>JITLib</strong></li> <li>La différence entre <code>ProxySpace.push</code> et l’utilisation 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 qu’effleurer 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-lfyw9f"&&(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};
|