<story><title>Starting Your Computer Music Journey with Clojure and Overtone in Emacs</title><url>https://savo.rocks/posts/starting-your-computer-music-journey-with-clojure-and-overtone-in-emacs/</url></story><parent_chain></parent_chain><comment><author>chaosprint</author><text>I have been studying different music programming languages for years and eventually landed on the design of Glicol:
&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;glicol.org&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;glicol.org&lt;/a&gt;&lt;p&gt;I think the combo of Overtone and Emacs is really cool. Essentially, Overtone, Tidalcycles, Sonic Pi or FoxDot are note&amp;#x2F;OSC msg generators for SuperCollider. Perhaps the post should mention that. The reason is that when users start to care about audio synthesis and &amp;quot;sound-based music&amp;quot;, then they will find a missing picture&amp;#x2F;concept between the pattern-based language abstraction to the audio float numbers. My experience is that if a user does not understand this process, it is very hard to master the language, tend to forget the syntax and is prone to errors.&lt;p&gt;One example is that before I made Glicol, I made QuaverSeries (&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;quaverseries.web.app&amp;#x2F;&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;quaverseries.web.app&amp;#x2F;&lt;/a&gt;), which shares a very similar syntax to Glicol. I would call it a functional wrapper for Tone.js. But as a functional programming language, even I myself forget the input&amp;#x2F;output type for each function after not using it for a while. Yet in Glicol, this problem is solved from the first day as Glicol&amp;#x27;s node IO are all audio streams. One reason I call Glicol &amp;quot;the next generation computer music&amp;quot; is partly because we are now in an era when browsers can also handle real-time GC-free audio, and audio-first makes a modern design.&lt;p&gt;In designing Glicol, my experience is that when one begins from the audio level, it does affect the language design a lot. How to make the trade-off among readability, simplicity and ergonomics for speedy writing in live coding performance, error handing, abstraction from audio to language, lowering the learning curve is really an art.</text></comment>
<story><title>Starting Your Computer Music Journey with Clojure and Overtone in Emacs</title><url>https://savo.rocks/posts/starting-your-computer-music-journey-with-clojure-and-overtone-in-emacs/</url></story><parent_chain></parent_chain><comment><author>clx75</author><text>I&amp;#x27;m really fond of the idea of writing music like this.&lt;p&gt;From all available implementations of the idea, I probably like Extempore (&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;digego&amp;#x2F;extempore&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;digego&amp;#x2F;extempore&lt;/a&gt;) the most. Extempore provides a low-level C-like language (xtlang) which compiles into LLVM and can be meta-programmed from a variant of Scheme (TinyScheme I believe). This arrangement makes it possible to generate the code for the audio graph from Scheme, compile&amp;#x2F;optimize it via LLVM, then drive it in a live-coding fashion from Emacs. Best of both worlds (high and low).&lt;p&gt;My personal, much simpler attempt in this space is Cowbells (&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;omkamra&amp;#x2F;cowbells&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;omkamra&amp;#x2F;cowbells&lt;/a&gt;) - with this one you can live-code FluidSynth (MIDI soundfonts) from Clojure + CIDER + Emacs, representing musical phrases either via Clojure data structures or an alternative text-based syntax (which is translated into the former by a compiler).</text></comment>