53 lines
10 KiB
HTML
53 lines
10 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<link rel="icon" href="../favicon.png" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||
<meta name="theme-color" content="#ffffff">
|
||
|
||
<link href="../_app/immutable/assets/0.x88-ymMa.css" rel="stylesheet">
|
||
<link rel="modulepreload" href="../_app/immutable/entry/start.Jn5WKbrf.js">
|
||
<link rel="modulepreload" href="../_app/immutable/chunks/scheduler.aZRR5A_O.js">
|
||
<link rel="modulepreload" href="../_app/immutable/entry/app.LLQVUDg1.js">
|
||
<link rel="modulepreload" href="../_app/immutable/chunks/preload-helper.0HuHagjb.js">
|
||
<link rel="modulepreload" href="../_app/immutable/chunks/index.kYoizZ4A.js">
|
||
<link rel="modulepreload" href="../_app/immutable/nodes/0.K0tPhl4P.js">
|
||
<link rel="modulepreload" href="../_app/immutable/nodes/5.CytN02Ad.js">
|
||
<link rel="modulepreload" href="../_app/immutable/chunks/dynamic-import-helper.0gtGTknh.js">
|
||
</head>
|
||
<body data-sveltekit-preload-data="hover">
|
||
<div style="display: contents"> <div><div class="bg-neutral-800"><nav class="pl-8 py-2 md:flex md:justify-between md:items-center pr-8"><div class="flex items-center justify-between"><a href="/" class="website-title text-2xl font-bold bg-gradient-to-r from-orange-700 via-blue-500 to-green-400 text-transparent bg-clip-text animate-gradient" data-svelte-h="svelte-15xybd8">livecoding.fr</a> <div role="button" class="flex md:hidden" data-svelte-h="svelte-1s4k442"><button type="button" class="text-gray-100 hover:text-gray-400 focus:outline-none focus:text-gray-400"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-6 h-6"><path stroke-linecap="round" stroke-linejoin="round" d="M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5"></path></svg></button></div></div> <div class="flex-col mt-8 space-y-4 md:flex md:space-y-0 md:flex-row md:items-center md:space-x-10 md:mt-0 hidden"><a href="/evenements" class="mobile-menu-link" data-svelte-h="svelte-11zf95a">Évènements</a> <a href="/membres" class="mobile-menu-link" data-svelte-h="svelte-1a3do61">Membres</a> <a href="/outils" class="mobile-menu-link" data-svelte-h="svelte-ee0p45">Outils</a> <a href="/guides" class="mobile-menu-link" data-svelte-h="svelte-5misk3">Guides</a> <a href="/articles" class="mobile-menu-link" data-svelte-h="svelte-kglg6r">Articles</a> <a href="/reseaux" class="mobile-menu-link" data-svelte-h="svelte-6wk0bt">Réseaux</a> <a href="/ressources" class="mobile-menu-link" data-svelte-h="svelte-ziwryh">Ressources</a> <a href="/presse" class="mobile-menu-link" data-svelte-h="svelte-6fl78t">Presse</a> <a href="/contacts" class="mobile-menu-link" data-svelte-h="svelte-1skvj1i">Contact</a></div></nav></div></div> <main class="bg-neutral-900"><div class="drawer lg:drawer-open"><input id="my-drawer-2" type="checkbox" class="drawer-toggle"> <div class="drawer-content space-y-4 flex flex-col lg:px-16 px-4 py-8"><article><h1>Scheme for Max/Pure Data : LISP encore et toujours</h1> <div class="pt-4 flex justify-between mb-12"><p class="inline font-bold">Publié le : 2024-11-02</p> <p class="inline font-bold">Auteur : Raphaël Maurice Forment</p></div> <div class="lg:px-12 content-center"><img src="https://repository-images.githubusercontent.com/232438669/2786d100-7d94-11ea-81b9-74d9e19db04a" alt="Biset Blank" style="display:block; margin-left:auto;margin-right:auto;max-width:500px;width:75%"> <br> <h2 data-svelte-h="svelte-1v4p4uu">Présentation</h2> <p data-svelte-h="svelte-1t86df7">Iain Duncan est l’auteur de deux utilitaires, <a href="https://github.com/iainctduncan/scheme-for-max" rel="nofollow">Scheme for Max</a> et <a href="https://github.com/iainctduncan/scheme-for-pd" rel="nofollow">Scheme for Pure
|
||
Data</a>. Ces deux outils font
|
||
sensiblement la même chose, à différents niveaux d’avancement. Ils intègrent un
|
||
interpréteur pour le langage <a href="https://ccrma.stanford.edu/software/snd/snd/s7.html" rel="nofollow">S7 Scheme</a> (publié par Bill Schottstaedt au <a href="https://ccrma.stanford.edu/" rel="nofollow">CCRMA</a>) et permettent de contrôler plus ou moins finement Max ou Pure Data directement depuis LISP. Vous pouvez programmer vos propres séquenceurs, manipuler des données, générer des tableaux et des <em>buffers</em> etc. S7 est un dialecte de Scheme/LISP qui a été conçu pour être facilement intégré dans différentes applications. C’est un langage léger et facile à porter un peu partout. Il a initialement été développé par un musicien pour des musiciens. Il existe une longue tradition dans les milieux créatifs qui consiste à présenter les langages de la famille LISP comme particulièrement adaptés au travail en musique. Il suffit de regarder des outils comme <a href="https://opusmodus.com/forums/live-coding-instrument/" rel="nofollow">OpusModus</a>, <a href="https://extemporelang.github.io/" rel="nofollow">ExTempore</a>, <a href="https://github.com/overtone/overtone" rel="nofollow">Overtone</a>, <a href="https://incudine.sourceforge.net/" rel="nofollow">Incudine</a>, <a href="https://github.com/byulparan/cl-collider" rel="nofollow">cl-collider</a> ou encore <a href="https://www.ircam.fr/transmission/formations-professionnelles/openmusic" rel="nofollow">OpenMusic</a> pour s’en convaincre. Tous réinventent la même idée : faire de LISP un environnement de choix pour la composition électronique/algorithmique. L’utilisation de Scheme for Max et de Scheme for Pure Data s’adresse à des <em>live coders</em> expérimentés et qui maîtrisent déjà un petit peu la programmation et l’utilisation de Max/Pure Data. Il ne faut pas non plus être effrayé de l’aspect académique et un peu <em>nerd</em> de l’expérience. On fait beaucoup de programmation et de technique pour développer, <em>in fine</em>, des super pouvoirs et une maîtrise inégalée de l’environnement de composition.</p> <br> <iframe width="800" height="600" src="https://www.youtube.com/embed/rcLWTjN4qBI" title="Stochastic Study #1 for Scheme for Max and modular synthesizer, Iain C.T. Duncan (2021)" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen style="display:block; margin-left:auto;margin-right:auto;max-width:800px;width:75%"></iframe> <br> <p data-svelte-h="svelte-czrwfr">Iain Duncan est l’un des derniers musiciens frappés par le sortilège LISP et il a pris le
|
||
temps de publier <a href="https://iainctduncan.github.io/scheme-for-max-docs/s7.html#about-s7-and-s74-scheme" rel="nofollow">quelques</a> <a href="https://iainctduncan.github.io/scheme-for-max-docs/motivations.html" rel="nofollow">documents</a> qui détaillent les avantages de LISP pour le travail en musique. Ces outils s’adressent à un public qui aime expérimenter et qui préfère développer de petites librairies/fonctions réutilisables entre différents <em>patchs</em> plutôt que de tout sacrifier pour apprendre l’utilisation d’un <em>framework</em> ou d’un outil/usine à gaz. La documentation est très bien faite et cela vaut le coup de tout lire ne serait-ce que pour s’en imprégner. Même si le fait d’apprendre LISP peut engendrer des réticences plus ou moins justifiées, faire un petit <em>patch</em> pour essayer n’a jamais tué personne. Contrairement à d’autres familles de langages, LISP, il est vrai, à l’air <em>naturellement</em> et presque par accident adapté à la pratique du <em>live coding</em>.</p> <br> <h2 data-svelte-h="svelte-grw4hp">Conclusion</h2> <br> <img src="https://imgs.xkcd.com/comics/lisp_cycles.png" alt="Biset Blank" style="display:block; margin-left:auto;margin-right:auto;max-width:800px;width:75%"> <br> <p data-svelte-h="svelte-1df9fw3">Quelle conclusion tirer de tout cela ? Aucune idée. Parler des langages LISP comme d’un outil ou d’une expérience magique est un poncif un peu usant à la longue. Si les langages LISPs étaient vraiment nécessaires et adaptés, pourquoi ne sont-ils pas utilisé partout et tout le temps ? Il semble que le vent ait juste tourné et que les langages LISP se soient retrouvés dans une niche qu’ils n’arrivent désormais plus vraiment à quitter. Les langages LISP restent présents un peu partout en informatique musicale, surtout dans les coulisses, et ressurgissent périodiquement pour nous rappeler à quel point ils sont élégants, adaptés et efficaces. Essayez Scheme for Pure Data et faites vous une idée par vous-même.</p> <p class="rounded-lg font-bold border-2 py-2 pl-2 mt-8 bg-neutral-800" data-svelte-h="svelte-o6y0y"><a href="/articles">Revenir à l'index</a></p></div></article></div> <div class="drawer-side no-scrollbar m-0" data-svelte-h="svelte-11ixv29"><label for="my-drawer-2" aria-label="close sidebar" class="drawer-overlay scrollbar-hide whitespace-nowrap overflow-hidden no-scrollbar"></label> <ul class="menu sidemenu-style no-scrollbar my-0"><li class="sideli"><a class="sidebar-link" href="/evenements">Évènements</a></li> <li class="sideli"><a class="sidebar-link" href="/membres">Membres</a></li> <li class="sideli"><a class="sidebar-link" href="/outils">Outils</a></li> <li class="sideli"><a class="sidebar-link" href="/guides">Guides</a></li> <li class="sideli"><a class="sidebar-link" href="/articles">Articles</a></li> <li class="sideli"><a class="sidebar-link" href="/reseaux">Réseaux</a></li> <li class="sideli"><a class="sidebar-link" href="/ressources">Ressources</a></li> <li class="sideli"><a class="sidebar-link" href="/presse">Presse</a></li> <li class="sideli"><a class="sidebar-link" href="/contacts">Contact</a></li></ul></div></div></main> <footer class="footer-style" data-svelte-h="svelte-1gkeg8z"><div class="flex justify-between"><p class="inline indent-4 text-bold text-white">Raphaël Forment</p> <p><a class="inline pl-4" href="https://github.com/Bubobubobubobubo/livecodingfr">GitHub</a></p></div></footer>
|
||
|
||
<script>
|
||
{
|
||
__sveltekit_1xnkgn2 = {
|
||
base: new URL("..", location).pathname.slice(0, -1),
|
||
env: null
|
||
};
|
||
|
||
const element = document.currentScript.parentElement;
|
||
|
||
const data = [{"type":"data","data":null,"uses":{}},null];
|
||
|
||
Promise.all([
|
||
import("../_app/immutable/entry/start.Jn5WKbrf.js"),
|
||
import("../_app/immutable/entry/app.LLQVUDg1.js")
|
||
]).then(([kit, app]) => {
|
||
kit.start(app, element, {
|
||
node_ids: [0, 5],
|
||
data,
|
||
form: null,
|
||
error: null
|
||
});
|
||
});
|
||
}
|
||
</script>
|
||
</div>
|
||
</body>
|
||
</html>
|