├── .gitignore ├── LICENSE └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Timo Hoogland 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 👩🏻‍💻🧑🏼‍💻👩🏽‍💻👨🏾‍💻 Collaborative Coding Practices 2 | 3 | A repository with suggestions, repertoire, tools and exercises for collaborating coders that use live coding to make music. Part of the *Collaborative Coding Music in Flok* workshop by Lina Bautista and Timo Hoogland, first presented at [/* VIU */ Festival 2024](https://toplap.cat/posts/viu-2024/). 4 | 5 | # 📖 Table of Content 6 | 7 | - [Setup](#-setup) 8 | - [Exercises](#-exercises) 9 | - [Collaborative Editors](#-collaborative-editors) 10 | - [Repertoire](#-repertoire) 11 | - [Further Reading](#-further-reading) 12 | - [Inspiration](#-inspiration-from-other-performances) 13 | - [Useful Tools](#-other-useful-tools) 14 | 15 | # 📟 Setup 16 | 17 | First we setup the collaborative coding environment. For this workshop we use [**Flok**](#flok). Flok allows for using the languages Foxdot, Mercury, Sardine, Strudel, SuperCollider and Tidal. In the future you can choose a different editor depending on personal preferences and the language you like to code with. For a list of other collaborative editors see [Collaborative Editors](#-collaborative-editors). 18 | 19 | 1. Go to [https://flok.cc](https://flok.cc) 20 | 2. Choose a username 21 | 3. Share the url with your collaborator 22 | 4. In the top-left menu choose the language you want to use 23 | 5. If you choose `Mercury-web` or `Strudel` you are ready to go! 24 | 5. If you use a language that is not browser based (eg. Tidal, SC, Foxdot) you have to setup the `REPL` via the terminal to connect your editors' output with your interpreter and sound engine. 25 | - Click `REPLs` in the top-right corner. 26 | - Copy the command and paste/run it in the terminal (you need to have `npm`/`npx` installed from [NodeJS](https://nodejs.org/en)) 27 | - Start your environment and check if the code is coming in through the OSC port. 28 | - [More info on using the REPL's](https://github.com/munshkr/flok?tab=readme-ov-file#supported-repl-targets) 29 | 30 | # 🕹 Exercises 31 | 32 | **One rule: No pasting code!** 33 | 34 | ## Exercise 0 35 | 36 | *Start from scratch* 37 | 38 | Listen to a short 3-minute solo-jam from eachother. While one is typing the others are just listening to what this person is making. This will help you to get to know eachothers styles and strengths. 39 | 40 | ## Exercise 1 41 | 42 | *Start from scratch* 43 | 44 | Code only one instruments/sound per person and only work on your individual sound (in parallel). Carefully listen & read what the others are doing and adapt your code based on that. Divide the arrangement of the music in a way that makes sense for you all. For example one person can work on a rhythmic/percussive sound, while the other makes a bass or melodic instrument. Think in terms of complementary sounds. You can divide an arrangement in many ways, percussive-tonal, dense-sparse, staccato-legato, high-low, and much more. 45 | 46 | ## Exercise 2 47 | 48 | *Continue with the code you wrote above* 49 | 50 | Create a new instrument/sound from scratch and work on that code together, slowly changing the instrument to both your tastes. Only, don't remove each others ideas but build upon them. Accept decisions from the other, also if you don't immediately like them. 51 | 52 | ## Exercise 3 53 | 54 | *Start from scratch or continue with the code above* 55 | 56 | In this exercise one of you will be the *"initiator"* of a new instrument/sound, while the other will be the *"adjuster"*. The *initiator* will code new ideas and execute them. After evaluating and listening to the result, the *adjuster* will start to delete and change the values or functions of the thing that was just coded, introducing variations on the original idea. Don't feel bad about deleting each others work, allow ["code to die"](https://www.pastagang.cc/blog/let-code-die/). 57 | 58 | ## Exercise 4 59 | 60 | *For this exercise you continue with the instruments from above.* 61 | 62 | It is quite common in live coding performances to evaluate the code after every little change, so you can hear the results directly. However, for this exercise one of you will only be allowed to evaluate small changes in the instrument. At the same time the other has to make a lot of changes to another instrument, but wait till the best moment to evaluate introducing some radical changes in the composition. It could help to code things as a comment to avoid things being evaluated before they are ready to go. 63 | 64 | # 🛰 Collaborative Editors 65 | 66 | ## Flok 67 | 68 | - site: https://flok.cc 69 | - github: https://github.com/munshkr/flok 70 | - docs: https://github.com/munshkr/flok?tab=readme-ov-file#usage 71 | 72 | Flok is an online collaborative coding editor developed by Damián Silvani (a.k.a Munshkr). The editor allows you to join with multiple people by accessing the same URL. You can add various panels for different languages. Some run directly in the browser, others are send to the terminal via OSC. 73 | 74 | Languages (in browser): `Hydra` `Strudel` `Mercury` 75 | 76 | Languages (with repl): `Foxdot` `Mercury` `Sardine` `SClang` `TidalCycles` 77 | 78 | ## Estuary 79 | 80 | - site: https://estuary.mcmaster.ca/ 81 | - github: https://github.com/dktr0/estuary 82 | 83 | Estuary is a platform for collaboration and learning through live coding. It enables you to experiment with sound, music, and visuals in a web browser. Estuary brings together a curated collection of live coding languages in a single environment, without the requirement to install software (other than a web browser), and with support for networked ensembles (whether in the same room or distributed around the world). 84 | 85 | Languages (in browser): `MiniTidal` `Punctual` `Hydra` `CineCer0` `LocoMotion` `Seis8s` `TimeNot` `TransMit` 86 | 87 | ## Nudel 88 | 89 | - site: https://nudel.cc/ 90 | - github: https://github.com/pastagang/nudel 91 | - docs: https://github.com/pastagang/nudel?tab=readme-ov-file#nudel 92 | 93 | Nudel was born out of curiosity, to see if Flok.cc could be treated as a protocol, where different web clients access the same session. 94 | 95 | Languages (in browser): `Hydra` `Strudel` `KabelSalat` `Shader` `JS` 96 | 97 | ## Troop 98 | 99 | - site: https://github.com/Qirky/Troop/releases 100 | - github: https://github.com/Qirky/Troop 101 | - docs: https://github.com/Qirky/Troop?tab=readme-ov-file#getting-started 102 | 103 | Troop is a real-time collaborative tool that enables group live coding within the same document across multiple computers. Hypothetically Troop can talk to any interpreter that can take input as a string from the command line but it is already configured to work with live coding languages FoxDot, TidalCycles, and SuperCollider. It was developed by Ryan Kirkbride (a.k.a. Quirky). 104 | 105 | Languages (locally): `Foxdot` `TidalCycles` `SuperCollider` `SonicPi` 106 | 107 | ## P5Live 108 | 109 | - site: https://www.teddavis.org/p5live/ 110 | - github: https://github.com/ffd8/P5LIVE 111 | 112 | P5Live is a collaborative live coding editor for P5.js (but also includes Hydra) developed by Ted Davis. Through the "cocoding" functionality you can edit code together. 113 | 114 | Languages (in browser): `p5.js` `Hydra` `p5.sound` 115 | 116 | # 👾 Repertoire 117 | 118 | Below is a list of repertoire from people collaborating on live coding via these various tools. Suggestions are welcome! 119 | 120 | - [**Sabrina Verhage & Flor de Fuego** - Live at Livecodera 8m](https://www.youtube.com/live/iY9Vc8LpMFQ?si=BWR1m3NZNcf9zkfs&t=3526) 121 | - Using: Flok, Mercury, Hydra 122 | 123 | - [**Damage Such** - Live at Sala Taro](https://youtu.be/Ykhjx7ZkaEQ?si=UbrMjEvV58BQozb4&t=1336) 124 | - Using: Flok, Mercury, Animatron 125 | 126 | - [**Benoît and the Mandelbrots** - Live at TEDx](https://youtu.be/Ix2b_qFYfAA?si=q128_ddemHYy7z9X&t=238) 127 | - Using: Supercollider 128 | 129 | - [**Bad Circulation** - Live at Corridor of Light Algorave](https://youtu.be/AlhEc2N8VII?si=ysRyQamkiIIGlW3w&t=838) 130 | - Using: Troop, TidalCycles 131 | 132 | - [**iTypeMusic** - Live Coding Techno Vibes](https://youtu.be/aB1mdxLCR7c?si=cA7Z5FSpl7LpuVHX&t=766) 133 | - Using: Flok, Mercury, Hydra 134 | 135 | - [**CrashServer** - Live at TOPLAP 20](https://youtu.be/UZ4fAR3yk1c?si=KQpTz5V2DdJInxD-) 136 | - Using: Troop, Foxdot 137 | 138 | - [**Epiploke** - Live at Solstice Stream 2023](https://youtu.be/fMd1CwLwMj4?si=bO77HpSdDP-9kSj8&t=257) 139 | - Using: Flok, Tidal 140 | 141 | - [**Estuary WeekendJam** - Over more than 160 jamsessions in Estuary streamed weekly in Eulerroom](https://www.youtube.com/playlist?list=PLMBIpibV-wQLvP7jitjnV9E61DfV11235) 142 | - Using: Estuary, MiniTidal, Punctual 143 | 144 | - [**Damage Such** - Live at /* VUI */ Festival in Sala Vol ](https://youtu.be/7KH7fn4k8kE?si=fnD3A5u_uZOMrl9R&t=1501) 145 | - Using: Flok, Mercury 146 | 147 | - [**RGGTRN**](https://rggtrn.github.io/) 148 | - Using: Supercollider 149 | 150 | - [Enter your suggestion here](https://github.com/tmhglnd/collaborative-coding-practices/issues) 151 | 152 | # 📚 Further Reading 153 | 154 | Below is a list of reading material that touches on the subject of collaborative coding and remote performances. 155 | 156 | - [**Remote Sets** - Blogpost on TOPLAP.org by GEIKHA 芸下☭](https://blog.toplap.org/2024/05/27/remote-sets-livecoding-in-its-purest-form/) 157 | 158 | - [**How To: Live Coding Jams** - Blogpost by TH4](https://th4music.net/how-to-live-coding-jams.html) 159 | 160 | - [**Bad Code Only** - Pastagang Blogpost](https://www.pastagang.cc/blog/bad-code-only/) 161 | 162 | - [**Let Code Die** - Pastagang Blogpost](https://www.pastagang.cc/blog/let-code-die/) 163 | 164 | # ✨ Inspiration from other performances 165 | 166 | - [**Overmono** - Live at Boilerroom](https://youtu.be/xgJBhezlMoE?si=3nSXC_0DBkCmd0mY&t=2053) 167 | 168 | - [**Moderat** - Live at KEXP](https://youtu.be/HVkVq_qs7FM?si=6eQEzd4yqg6T3QwL&t=1036) 169 | 170 | # 🛠 Other Useful Tools 171 | 172 | ## Brave Browser 173 | 174 | - site: https://brave.com/download/ 175 | - github: https://github.com/brave/brave-browser 176 | 177 | Many collaborative coding editors run in the browser. Brave is an open source browser running on chromium and is very suitable for all the platforms. It supports WebGL, WebAudio and WebMidi. 178 | 179 | OS: `Mac` `Windows` `Linux` 180 | 181 | ## Sonobus 182 | 183 | - site: https://sonobus.net/ 184 | - github: https://github.com/sonosaurus/sonobus 185 | - docs: https://sonobus.net/sonobus_userguide.html 186 | 187 | SonoBus is an easy to use application for streaming high-quality, low-latency peer-to-peer audio between devices over the internet or a local network. 188 | 189 | OS: `Mac` `Windows` `Linux` `iOS` `Android` 190 | 191 | ## OBS (Open Broadcast Software) 192 | 193 | - site: https://obsproject.com/ 194 | - github: https://github.com/obsproject/obs-studio 195 | - docs: https://obsproject.com/help 196 | 197 | Free and open source software for video recording and live streaming. This platform allows you to livestream or record your screen or seperate Windows from applications. Very helpful if you like to record your works or want to go live on Youtube, Twitch, Facebook or wherever. 198 | 199 | OS: `Mac` `Windows` `Linux` 200 | 201 | ## BlackHoleAudio 202 | 203 | - site: https://existential.audio/blackhole/ 204 | - github: https://github.com/ExistentialAudio/BlackHole 205 | - docs: https://github.com/ExistentialAudio/BlackHole/wiki 206 | 207 | BlackHole is a modern MacOS virtual audio loopback driver that allows applications to pass audio to other applications with zero additional latency. 208 | 209 | OS: `Mac` 210 | 211 | ## VB-Cables 212 | 213 | - site: https://www.vb-audio.com/Cable/ 214 | 215 | VB-CABLE is a virtual audio device working as virtual audio cable. All audio coming in the CABLE input is simply forwarded to the CABLE output. 216 | 217 | OS: `Windows` 218 | 219 | ## Spout 220 | 221 | - site: https://spout.zeal.co/ 222 | - help: https://spout.discourse.group/ 223 | 224 | Spout leverages your graphics card enabling to you send realtime video between Windows applications with near-zero latency or overhead. It is provided free and open source thanks to support from its users. 225 | 226 | OS: `Windows` 227 | 228 | ## SpoutToNDI 229 | 230 | - site: https://leadedge.github.io/ 231 | - help: https://spout.discourse.group/ 232 | 233 | Spout to NDI is a set of programs that allow Spout senders and receivers to share video, not only with each other but also by way of a network using the Newtek NDI (“Network Device Interface”) protocol version 5. 234 | 235 | OS: `Windows` 236 | 237 | ## NDISyphon 238 | 239 | - site: https://docs.vidvox.net/freebies_ndi_syphon.html 240 | - docs: https://docs.vidvox.net/freebies_ndi_syphon.html#using-ndisyphon 241 | 242 | NDISyphon is a simple, free utility that makes it possible for any Syphon enabled software to efficiently send and receive video streams to and from other applications over a network using the NDI® protocol from Newtek. 243 | 244 | OS: `Mac` 245 | 246 | ## NDITools 247 | 248 | - site: https://ndi.video/tools/ 249 | - docs: https://ndi.video/resources/docs-guides/ 250 | 251 | Wide variety of software for NDI applications. The NDI Virtual Input is especially useful as virtual webcam device. 252 | 253 | OS: `Mac` `Windows` 254 | 255 | ## Ableton Link 256 | 257 | - site: https://www.ableton.com/en/link/products/ 258 | 259 | Link is a technology that keeps devices in time over a local network. Link is part of Ableton Live, and also comes as a built-in feature of other software and hardware for music making. View the site for all available platforms/apps. 260 | --------------------------------------------------------------------------------