IN/Clojure 2020

India's annual Clojure and ClojureScript conference. 14th-15th Feb, 2020. Pune, MH, IN.



Bobby Towers


GANGES: Clojure retro game music engine

Submitted Oct 29, 2019

This is a music talk, and includes audio performance elements.

“One of the best ways to learn, is to teach” (as beautifully stated in the talk proposal application), is actually the motivating idea behind the MECCA Platform, the Music Education, Composition, Creation Application. I’d also love to turn it inside-out and say, “The best way to create is to learn”. For when these activities are fully recognized and enabled as reagents of a higher-order activity, even Spock will agree that life is finally a dream.

A multitude of tools exist for creating and learning music: Theory trainers, DAWs (digital audio workstations), notation editors, and virtual instruments. Rarely though does one support all of these, and even more rarely was it designed with their coordination in mind. We are establishing a dichotomy between our tools that perpetuates an illusion that the expression of the craft and the processes of acquiring its related knowledge and skills are somehow disconnected, and removing the sense of exploration that is so essential for authentic perfomance. What if we were to design a set of unified tools emerging from this spark of awareness, that these combined features could be transformatively synergistic when implemented together, as a music editor optimized for both education and performance?

After establishing its roots as a humble Bash script for generating NES Chiptunes, the simple sequencer evolved into a multimedia learning platform, encouraging creative exploration through 8 and 16-bit pixel art, music and animation. Therefore it has been appropriately rebranded as GANGES, the Graphical Audio aNimation Game Engine Software. The application emphatically showcases the retro aesthetic while bringing it to the present through the use of SVG, a declarative art-as-data philosophy, the Web Audio API and the power of Clojurescript and re-frame.



  • Born as a Bash script -- “How do I make a sound from the command line?”
  • SoX, the Swiss Army Knife of audio manipulation
  • Accidental DSL!
  • path to reagent/re-frame
  • Unexpected journey into pixel art and game animation


  • Converting raster images to SVG paths
  • Why not canvas, WebGL or whatever?
  • (Brief) History of Chiptunes and audio synthesis
  • Nintendo Entertainment System Audio Processing Unit (NES APU)
  • Web Audio API
  • Whirlwind tour of various music formats/editors
  • Parsing MIDI/MusicXML to extract note data from published music
  • Future-proofing our work through open standards and declarative formats


  • False dichotomy between learning and teaching
  • -> Dichotomy between training, production and performance tools
  • Tradeoffs of open source and proprietary technology
  • Artistic expression and the value of maintaining a sense of exploration
  • The myth of “talent” and perception that to make art you must already be “good”
  • How we inhibit the development of society by setting artificial standards
  • Possible cultural/technological sources of this problem
  • How we plan to help this by creating live composition tools that teach


Includes audio content

Speaker bio

Following a 2015 accident that disabled one of my hands, I needed to reinvent both my career and sense of self-expression. As a music student, teacher and performer suddenly without the ability to use conventional instruments, I saw the tremendous potential in technology to make up for this by providing, as it always did, the tools for blazing and navigating the avenues of creative expression as well as productivity. Clojure has in many ways provided the ideal language, in my experience, and its community representing a huge source of encouragement. The amazing body of work these recent giants have built has made it not only possible but incredibly fun to carry out our artistic visions, and this goes for the actual technology itself as well as the surrounding ecosystem of docs, articles and forums. It would be a great honor to receive the opportunity to share this experience with you all.


{{ gettext('Login to leave a comment') }}

{{ gettext('Post a comment…') }}
{{ gettext('New comment') }}
{{ formTitle }}

{{ errorMsg }}

{{ gettext('No comments posted yet') }}

Hybrid access (members only)

Hosted by

IN/Clojure is India’s annual Clojure and ClojureScript conference, including talks about features, libraries, tools, usage, and more. IN/Clojure 2020, our 4th edition, is happening on 14th and 15th Feb 2020 (Fri/Sat) in Pune, Maharashtra. more