 Nous allons parler ce soir un peu de musique, de hacker, et ceci est la traduction en français de Super Collider, la musique pour les hackers. La traduction est pour la première fois dans l'histoire de cette Rolingo une traduction en relais de l'allemand à l'anglais au français, parce que je parle pas allemand. Si vous avez des remarques ou des commentaires à faire sur cette traduction, le mieux c'est le hashtag c3t sur ma soudan ou Twitter ou alors c3lingo.org. Alors, qu'est ce qu'on va faire ? Donc on va parler ce soir. Super Collider, qu'est-ce que c'est ? Il y a des gens qui connaissent peut-être des systèmes comme Super Collider est une plateforme pour la synthèse audio et la composition algorithmique. C'est quelque chose que quelqu'un peut utiliser non seulement pour produire du son mais aussi pour ordonner du son, ordonner des sons, ordonner des tones, des cling, des clang, des bits, des bops. Et la question donc de qui utilise ça va bien sûr des musiciens. Des musiciens en général plutôt dans le monde expérimental, des gens qui regardent quelles sont les possibilités de ce système, quelles sont les possibilités au-delà des simples synthétiseurs ou des pianos, des gens qui regardent à des synthétiseurs dans un sens plus large, des gens qui regardent par exemple des plateformes matérielles ou même des réseaux. Et on s'intéresse ici à une combinaison de tous ces éléments d'un monde plus large dans la musique. Est-ce qu'on peut aussi combiner par exemple la musique avec des illuminations ou d'autres formats d'expression artistique. Et c'est aussi utilisé par des chercheurs qui travaillent avec le son. Donc des gens qui ne sont pas forcément des gens qui l'utilisent aussi simplement parce que c'est amusant, parce que c'est intéressant à utiliser ou des gens qui ont un intérêt pour la musique sur leur temps libre et qui trouvent que c'est intéressant de regarder du code ou alors qui cherche simplement une solution qui n'est pas simplement pas cher mais aussi open source et aussi des gens qui s'intéressent à une plateforme qui peut fonctionner sur une tablette par exemple. Alors qu'est ce que c'est Super Collider et comment ça marche ? On a une documentation ici. La documentation est très bonne je pense. Il y a beaucoup d'efforts qui a été investi pour documenter Super Collider de façon utilisable. Alors en plus de Super Collider je voudrais recommander si vous avez un intérêt pour la musique ou pour la programmation il faut s'intéresser à l'architecture de Super Collider. Donc il y a un serveur SC Synth et c'est un système biliaire. Il y a un interprète qui est ici. Il y a aussi un langage de programmation spécifique qui s'appelle langage Super Collider. C'est utilisé en conjonction avec OpenSyncControl OSC qui permet d'envoyer les informations de l'interprète vers le serveur. Donc ça ça permet d'avoir la synthèse audio dans le serveur qui reçoit lui des effets à travers OSC et il peut échanger des informations. Et vous n'avez donc pas forcément besoin du langage de programmation Super Collider. Vous pouvez utiliser un autre langage tant que vous utilisez l'interface OSC et beaucoup d'autres gens font ça. Par exemple quelqu'un pourrait vouloir programmer en lisp et pouvoir écrire un interprète lisp qui serait embarqué avec le serveur SC Synth et combiné avec le serveur via OSC. Le serveur comprendra l'OSC de la même façon puisque c'est un protocole standardisé. Et donc le serveur fait tout le travail en temps réel. Ce qui est intéressant parce que si vous avez déjà essayé de programmer de la synthèse audio en temps réel vous savez que c'est la partie difficile. Non. La question de comment est-ce que les développeurs voient le langage Super Collider. C'est intégré dans une application. Il y a un environnement de développement intégré et c'est pas forcément un environnement qui est très agréable. Il y a des gens qui utilisent IMAX, des gens qui utilisent Isabelle. La plupart des gens utilisent un mode IMAX pour ça ou alors simplement un autre langage de programmation qu'ils préfèrent. Mais Super Collider l'ensemble de l'écosystème est prêt pour la production. Alors on peut voir ici un exemple. Ce n'est pas forcément l'exemple le plus intéressant. Il y a bien sûr d'autres choses qu'on peut faire. Mais ça génère simplement une synusoïde, l'angle la plus simple. C'est un peu le world of world du monde de la programmation audio. Mais ce qui est intéressant ici c'est ce diagramme à gauche. On peut commencer ici avec par exemple des simples contrôles de fréquence et d'amplitude qu'on passe à un oscillateur. Donc on peut voir ici que ça nous génère une synusoïde à la fréquence donnée et à l'amplitude donnée. Et on a donc ici la sortie qu'on peut voir à droite. Alors dans le code Super Collider, comment ça s'écrit ? Ça s'écrit quelque chose comme ça. Alors avant que j'essaye de faire une démo en live, je vais prendre le temps pour expliquer un peu ce qui se passe ici. On a ici un bloc entre ces accolades. C'est une fonction. Alors on pourrait se demander comment est-ce que cette fonction est déclarée. C'est tout simplement déclarée anonymement. On a un aspect de programmation fonctionnel ici. C'est-à-dire que l'on instantie cette fonction anonyme et on appelle la méthode play sur la fonction qu'on a définie anonymement juste avant. Ce langage est également orienté objet. On a donc l'objet SYNOSC pour oscillateur SYNOSO-IDAL. Et il a une méthode AR qui signifie audio rate, le Db audio. Et ça ça permet de dire avec FREQ la fréquence en kilohertz à laquelle je lis et MUL qui est l'amplitude. AR reçoit implicitement aussi la fréquence d'échantillonnage en kilohertz à travers play. On a tout ce qu'il faut pour gérer du son puisqu'on a la fréquence d'échantillonnage, on a la fréquence de long d'agénérer et on a ici l'amplitude. Par exemple ici on dit ne pas générer un signal avec toute la puissance mais simplement la moitié de l'amplitude possible. Et ça c'est donc mon dernier slide. Maintenant on va pouvoir passer à de la démo en live. J'espère que je pouvoir vous intéresser en vous montrant un peu en live comment c'est. Donc ici vous pouvez, j'espère entendre aussi si ça marche le son que je vais produire. Donc ici vous avez l'idée de Super Collider à l'interface développement que j'ai déjà démarré. Il est déjà connecté au serveur SC Synth et j'espère que vous pourrez entendre le résultat sur le stream. Donc ici on a un grand éditeur de texte. On peut écrire du code ici. On a un navigateur pour lire l'aide dynamiquement. Donc vous pouvez par exemple chercher la référence de l'objet SYNOSC, l'oscillateur sinusoidal. Et ça ça faut vous dire par exemple, c'est une interpolation de sinusoid et ça nous explique comment l'utiliser, toutes les méthodes de la classe, les méthodes d'instance. On a des exemples. Donc c'est à la fois détaillé et très utile à utiliser. Donc la documentation je l'ai déjà dit est très bonne et avec ça vous n'avez pas besoin de stacker en flow puisque vous avez la documentation directement dans l'éditeur ce qui est très pratique. Donc ici on a une fenêtre avec notre sortie. Alors vous connaissez peut-être, vous avez peut-être déjà l'habitude si vous utilisez des idées, vous avez déjà la sortie du programme ici en bas à droite, quelque chose d'assez commun de montrer la sortie de l'exécution du programme. Allez, programme on quelque chose. Je vais augmenter l'aide de la police et j'écris donc Hello World parce que bien sûr c'est le point de programme à écrire et si on a Hello World qui s'affiche. Et donc bon c'est bien beau des fiches du texte mais on va bien entendre quelque chose et pas juste voir quelque chose. Donc je vais écrire ce que j'avais mis dans le slide tout à l'heure. Donc je vais mettre 231 comme argument de fréquence. Et donc ici on va augmenter le volume. Donc ici on a quelque chose qui sort d'un canal mais on voit que ça fasse le volume quand ça sortait de deux canaux si on est manche. Et donc ici ça devrait jouer un note. Si j'exécute ça dit et normalement vous l'entendez là. Oui c'est bon vous l'entendez ? Ouais donc c'est bon. On entend bien un son à 233. Super. Donc on ne sait pas très intéressant comme son. Donc on va essayer autre chose. Alors voyons voir ce qu'on peut mettre d'autre. On a le module d'Ost qui est un générateur. Vous pouvez voir dans la documentation que ça génère des pulsations aléatoires. Et on peut entrer la fréquence à laquelle les choses vont être jouées. Et donc maintenant on devrait entendre. Alors bon j'ai déjà entendu des choses plus cool que ça mais qu'est-ce qu'on peut faire d'autre ? Peut-être qu'on peut mettre un filtre. Alors quelqu'un avec un synthé dire sûrement je vais utiliser un match qui est déjà configuré. Ou une matrice de modulation. Ou un modulateur physique. Quelque chose qui est déjà mis en place, quelque chose qui existe physiquement. Par exemple que je peux brancher un câble ou je peux faire un routage de la sortie. Mais ici on a des fonctions. Et donc on peut composer ces fonctions. Donc par exemple ici on a un filtre passband. Et on va filtrer un segment de la fréquence audio. Essayons une bande à 600 Hz avec un facteur Q de 1. Ce qui va faire une bande plutôt petite. Donc ça devrait être suffisant. Alors on n'entend pas grand chose. Alors c'est probable que tout le son soit filtré là si je mets mon facteur Q à 0.2 et que j'amplifie la sortie de mon filtre. Alors est-ce qu'on peut entendre ça ? Ouais un peu. Ça marche. Alors ça pourrait être plus intéressant si on commençait avec quelque chose qui n'était pas aussi statique. Quelque chose d'un peu plus dynamique. Alors peut-être qu'un exemple plus gros ce serait quelque chose de plus glorieux d'un peu plus intéressant. Ce serait quelque chose comme ça. Alors j'ai déjà du code ici que j'ai écrit. Comme ça vous n'avez pas besoin d'attendre que je tente tout ça à la main. Alors ici on a un exemple. Et normalement ça devrait être plutôt simple à comprendre. Mais c'est un exemple qui est assez intéressant, assez puissant. J'espère que vous pouvez le voir dans le stream. Donc ici on a une variable qu'on a définie. Dans laquelle on a diverses fonctions. On génère des impulsions aléatoires. Ensuite on les filtre. Et ensuite on fait un effet stéréo pour envoyer ces impulsions à gauche ou à droite aléatoirement. Et on fait ça 23 fois précisément. Alors ça fait du bruit. Alors ce que je vais parler maintenant c'est comment est-ce qu'on peut construire des choses un peu plus avancées en utilisant ces éléments très simples. Parce qu'on peut prendre du coup des briques élémentaires. On peut les arranger ensemble. On peut les filtrer. Et comment est-ce qu'on peut utiliser tout ça pour faire de la musique ? Il y a plusieurs possibilités. On peut créer des routines. On peut créer des fonctions qui vont être séquencées dans le temps. Ça c'est une possibilité qui a beaucoup de potentiel créatif. Par exemple si vous voulez essayer des idées plus mathématiques. Par exemple des séquences de nombre particulière. Ou par exemple de faire un morphisme entre le temps et un ton donné. Alors regardons par exemple un autre aspect qui est l'aspect live coding. Alors vous avez peut-être déjà entendu parler. C'est quand vous écrivez un programme en temps réel. Pour j'ai pas forcément le temps de tout écrire à la main maintenant. Donc j'ai préparé quelque chose à l'avance. C'est un peu comme une émission de cuisine. J'ai déjà fait toute la préparation. Et on peut s'intéresser à la partie intéressante. Ici on va créer un mixeur. Ça va être utile. Je vais juste augmenter un petit peu tout ça. Comme ça ça va être plus lisible. Donc ici on a une abstraction qui est utile. Puisqu'on définit notre propre générateur audio. Donc ici on a créé notre propre synthétiseur. Je lui ai donné un nom pulse. Donc le backslash, l'anti-slash, ça représente simplement le fait que c'est un symbole. Vous êtes peut-être habitué à ce concept dans d'autres langages de programmation. Ça me permet juste de définir ce nom globalement. Ici on a une fonction qui génère le son et qui utilise la syntaxe ici avec les pipes, les barres verticales. Vous avez peut-être aussi l'habitude de cette syntaxe dans votre langage. Ça permet de définir les arguments de la fonction. Alors on a déjà vu des variables. Donc ici j'utilise des variables également. Ici on génère un signal à partir d'un filtre pass-bas et d'une onde carré, une onde PWM. On utilise un générateur d'enveloppe pour moduler cette onde. Et on a quelques autres paramètres. Donc si vous voulez, vous pouvez lire la documentation de chacun des objets que j'utilise et de chaque argument de ce sujet. Vous avez le temps de lire tout ça. Mais si vous n'avez pas de temps, en ce moment beaucoup de gens ont pas mal de temps libre chez eux. Donc c'est une bonne opportunité pour apprendre quelque chose de nouveau. Ici on peut définir le volume de notre onde. Donc on a un oscillateur, un filtre et une enveloppe qui filtre également. Une enveloppe d'amplitude. Et à la fin, on envoie ça balancé à gauche ou à droite dans le spectro-sérieux. Donc il y a d'autres choses plutôt simples. On a un kick, on a un hi-hat, donc des sons de percussion. Peut-être qu'il y a des gens qui reconnaissent d'où viennent ces nombres. Ce n'est pas des nombres que j'ai sortis nulle part. Ce sont des nombres qui sont adaptés d'un périphérique assez connu par un fabricant japonais. Et donc ici vous pouvez voir que vous pouvez définir toute une série d'instruments vous-même. Donc maintenant j'exécute ce code, ce qui me permet de dire au serveur que ces instruments existent. Et maintenant je peux utiliser ces instruments puisqu'ils sont définis. J'ai quelques effets également que je vais définir. Donc par exemple de la réservération, une reverb. Donc ici on a une référence à une source, donc il va être un de nos instruments. Et ce que j'apprécie beaucoup avec Super Collider, c'est que dès que je vois un effet quelque part ou une idée musicale ou un son qui me plaît, je peux trouver, j'ai le challenge de trouver une technique pour mettre en pratique cette même idée dans le langage de programmation. Le langage de programmation se prête très bien à l'implémentation de toutes sortes de nouvelles idées, de nouvelles textures musicales. Alors si vous avez déjà vu comment marche une reverb, ça, ça vous êtes familier. C'est une approche tout à fait standard pour une reverb simple. Donc ici on a un autre effet, j'avais des commentaires, je peux enlever ça. Alors il y a une question ici dans un effet de shimmer. Donc on a des commentaires parce que tout code peut avoir des commentaires. Par exemple si la question est ce qu'on veut rajouter du délai, je pense que la réponse est oui. C'est utile parce que c'est au final ce qui est important dans un shimmer. Ce qui est important de voir ici, c'est qu'on ne s'intéresse pas à écrire, le but n'est pas d'écrire du code de niveau de qualité de production. On n'est pas en entreprise à écrire du code qui va être vendu ou publié. Le but est de pouvoir écrire du code qui correspond à ce que vous avez en tête et de voir si ça marche et d'itérer rapidement sur votre code. Donc ici on a des instruments, des synthés, on a des effets aussi. Et maintenant le but c'est de trouver comment on peut organiser tout ça pour créer de la musique. Alors pour ça il y a plusieurs approches possibles. Par exemple ici je vais utiliser des patterns, des motifs. Supercollider a un langage riche, des définitions de motifs qui peuvent être répétées. Donc par exemple ici on peut définir un motif ou on dit qu'on va prendre un instrument donné et on va jouer des notes qui sortent d'une gamme, par exemple la gamme mineure ici. C'est plutôt approprié. Il est tard dans la nuit des notes en gamme mineure c'est bien. Beaucoup de techno étant la mineure. On va aussi prendre des échantillons, on va prendre certaines notes dans cette gamme. Ça va nous générer un motif qui se répète à l'infini. Donc on applique une distribution gaussienne, une distribution normale pour la valeur du decay. Donc ça ça nous permet d'avoir des notes qui vont durer plus ou moins longtemps aléatoirement. Et on a une nouvelle séquence pour la durée des notes elle-même. Ça va donner une notion plutôt rythmique. On se rapproche de la composition rythmique pittagorienne parce que si vous savez des rythmes qui sont aléatoires complètement sans aucune contrainte, ça va un son qui va être assez étrange et qui va pas sembler rythmique à l'auditeur. Et donc enfin on dit pas trop fort, amplitude juste 0.3, donc un tiers à peu près du volume maximum. Donc là on va prendre ce qu'on avait ici, cette séquence et on va créer des variantes de ça. Donc on va simplement rajouter des couches par dessus. Donc on va dire par exemple qu'on a notre pattern P ici. Donc on va jouer ça et en parallèle avec un léger délai, on va jouer une variation de ce pattern dans lequel la durée des notes a été changée. En l'occurrence ici on a inversé l'ordre des durées par rapport à le liste qui était précédente, qui était avant. On va aussi jouer après 0 vers 25 secondes la même liste de notes mais transposé d'un 7ème vers le bas et après 0,75 secondes transposé d'une carte vers le haut. Et donc ça c'est variante de motif. On met ça dans un effet de notre shimmer qu'on a défini avant et là on a du coup déjà un pattern, un motif assez complexe et on va définir un deuxième donc pour un kick ou pour un bass drum. Donc on a à nouveau un autre pattern ici pour le hi-hat, un autre pour la basse dans lequel on varie à nouveau la durée des tones et on a enfin un autre pattern ici. Et donc si j'exécute ça maintenant, d'abord on ne devrait rien entendre. Donc il n'y a pas d'erreur, c'est déjà pas mal. Malheureusement vous ne pouvez pas voir le mixer que j'ai là parce que la fenêtre, je stream seulement la fenêtre Super Collider donc il faut imaginer ici que j'ai un mixer dans lequel je peux voir mes différents motifs et je peux les lancer, les arrêter et changer leur volume. Donc j'ai pas besoin de tout faire dans le code, je peux aussi utiliser une interface de contrôle graphique. Donc et traditionnellement c'est comme ça que c'est utilisé, il y a des choses qui sont programmées et d'autres choses qui vont être contrôlées de façon plus dynamique. Comme vous contrôleriez d'autres instruments de musique électronique. Alors voyons comment ça marche. Ok alors là on entend un pattern assez simple et donc on peut en ajouter un deuxième. C'est facile n'est-ce pas ? Alors il faut que je fasse attention au volume parce que si je suis trop fort ça va clipper, vous allez avoir que du bruit très agréable sur le stream. Donc il faut que je fasse attention. En général c'est pas quelque chose que je fais, en général j'ai un feedback beaucoup plus direct de ce que les gens entendent. Là je peux pas vous voir et je peux pas vous entendre non plus. Et je sais même pas si le son passe bien sur le stream donc c'est un petit peu plus difficile. Ces motifs ne sont pas forcément statiques. Par exemple je peux les changer en live. Par exemple ici je peux changer la fréquence de cutoff du filtre qui est appliqué sur ma base. Alors on dirait que c'est un crash. Ok c'est de retour. Peut-être je ne sais pas. Je suis pas sûr. Bon je vais essayer de relancer le serveur parce que j'ai l'impression qu'il a crashé. Malheureusement ça n'a pas l'air de marcher. Peut-être si j'éteins tout et que je relance tout. Est-ce que ça marche ? Bon il va probablement falloir que je reconfigure la connexion à Jack, le serveur audio d'enreal de Linux ou peut-être pas. Alors je pense qu'à utiliser OBS en même temps que Super Collider ça a causé des problèmes. Donc je pense qu'on peut s'arrêter là parce que après ça on a une performance system crash. Si il y a des questions je ne sais pas quand ça marche s'il n'y a pas de héros mais en tout cas si vous avez des questions vous pouvez les poser sur le pad qui est connecté à partir du far plan je pense sur di.c3vox, c3voc, de.c3voxfartlanfahrplan. Bien et pendant qu'on attend les questions je vais demander aux personnes qui écoutent le stream si vous avez des retours à faire sur cette traduction en français puisque c'est la première fois que nous testons de traduire par relais c'est à dire une conférence en allemand traduite par le C3 lingo en anglais que je retraduis de l'anglais au français. Donc si vous avez des retours à faire sur la traduction vous pouvez nous contacter sur Twitter au mastodon au hashtag c3t ou alors toutes nos infos de contact sont sur c3lingo.org par email hello at c3lingo.org. On attend toujours les questions. J'espère que vous pouvez me voir on a eu quelques petits problèmes techniques mais maintenant je vais pouvoir passer aux questions. Merci pour cette super présentation. Alors la première question c'est quels sont les différences avec Sonic Pi entre Sonic Pi et ce projet Super Collider. Alors je peux pas vous entendre désolé je sais pas si c'était volontaire alors je crois que l'audience a pu m'entendre mais pas vous pas toi désolé alors je répète la question c'est bon on s'entend. La première question est donc quelle est la différence entre Super Collider et Sonic Pi. Alors Sonic Pi c'est une super question. Sonic Pi ça utilise je crois le piton ça utilise le ruby. Alors j'ai pas vraiment utilisé c'est plus récent que Super Collider et de ce que j'en ai vu il faudrait que je regarde à nouveau parce que c'est quelque chose que j'ai pas regardé mais je crois que c'est similaire à ce qu'on a fait et que c'est aussi inspiré par Super Collider. Alors l'audience demande également est ce que tu as publié le code de cette présentation quelque part. Non je l'ai pas publié mais je pourrais il n'y a pas de raison. Je sais pas vraiment où je pourrais le publier. Là pour le moment j'ai juste un repos guide privé et sinon à un Lighting Talk prochain événement ce serait sympa pour pouvoir motiver les gens à faire ça et on m'a dit aussi que Twitter est pas mal pour publier ce genre de choses. Alors Twitter c'est une bonne idée. Sur Twitter aussi Super Collider code est un utilisateur et vous pouvez trouver du code Super Collider sur Twitter directement ce qui est plutôt intéressant. Ok la prochaine question s'enchaîne assez bien là dessus puisque la question est à quel point est-ce que Super Collider est utilisable en live pour des performances en live. Alors je pense que ça peut donner lieu à des anecdotes intéressantes. Alors oui j'ai une anecdote. Alors actuellement ce n'est pas si robuste que ça c'est un système assez complexe et donc le son passe par plusieurs buffers. Il passe par Jack et par l'interface audio et il rentre dans Jack dans le système en live. C'est assez intéressant quand il utilise plusieurs démons de Jack comme ça. Ça donne des comportements émergents assez particuliers. En normalement sur un système plus classique utilisé pour du live déjà vous drez un système moins complexe et vous pouvez vérifier entièrement avant une performance donc ça marche. Il faut aussi s'assurer que Jack utilise le scheduler temps réel ce qui est un travail un petit peu technique mais je pense que l'audience de ce genre de talk devrait être capable de s'en sortir et je pense que c'est important de voir, de s'attendre à ce que quelque chose de cool ressort de ça. En tout cas moi j'ai pu faire des trucs assez cool avec donc je pense que c'est possible de faire quelque chose en temps réel qui intéresse les gens. Par exemple généralement ce que je fais c'est que je vais avoir une idée que je vais lire ça quelque part ou j'entends de quelque chose et je vais pouvoir improviser avec directement et sortir quelque chose rapidement. Est-ce que c'est utilisable pour des applications en live? Est-ce qu'on peut utiliser des samples et des waveforms? La réponse est oui. Une autre question est est-ce qu'on peut utiliser un micro comme entrée pour supercollider? Toutes les sources audio qui peuvent entrer dans votre système peuvent être utilisées dans supercollider. Est-ce qu'on peut utiliser toutes les interfaces audio? La réponse est toutes. Toutes les interfaces audio. Ça supporte le midi. Vous pouvez utiliser même la souris ou un clavier ou quoi que ce soit comme périphérique d'entrée pour contrôler des effets. Tous les périphériques d'EO générique. Vous pouvez utiliser aussi le réseau sur TCP ou sur UDP. C'est un peu old school. Bien sûr le protocole OSC. C'est celui qui est utilisé par supercollider lui-même. C'est aussi bien sûr un complètement open donc c'est possible de l'étendre pour d'autres applications ou d'autres entrées. Avec un minimum de connaissance technique c'est possible de faire des choses vraiment cool. Ça a l'air d'être quelque chose de très à câble. Il n'y a pas d'autre question donc un tonnerre d'applaudissement virtuel s'il vous plaît pour ce mitone et sa super présentation sur supercollider.