Certain Queries Answered

Where does the name come from?

The name is a riff on the 12th century scholar and inventor Ismail al-Jazari. al-Jazari is thought to have invented one of the first programmable musical machines, a “musical automaton, which was a boat with four automatic musicians that floated on a lake to entertain guests at royal drinking parties.”

Why can I only create notes using code? Why can't I directly manipulate the notes using my mouse?

The limitation is a contrivance, born out of a desire to better understand what it feels like to design an environment for the reading and writing of computer programs. Let me try to explain.

Last year I tried to write an active essay. The active essay is a genre of literature which combines the “written essay, program fragments, and the resulting live simulations into a single cohesive narrative”. The format is designed to allow readers to perform exploratory programming, to answer “what if” questions by editing example programs as they read. Ted Kaehler wrote the first active essay in the mid-1990s using HyperCard. A recent example was written by Nicky Case, Simulating the World in Emoji.

Writing a coherent essay is hard enough. Interleaving one with programs that are approachable and editable is, for me anyway, a great challenge. After lots of disappointing attempts to author an active essay, I decided to attempt a more modest project: To create a simple browser-based experience where the main method of interaction involves reading, editing, and reusing example programs. JAZZARI is the result of that effort.

Is JAZZARI an educational tool? Are you attempting to teach programming or music theory?

Not really. While I find it conceivable that a motivated reader might be able to learn a bit about loops, variables, scales, or rhythms while using JAZZARI, I don't  think that JAZZARI is a particularly good tool for learning about programming or music. Bret Victor has persuasively argued in Learnable Programming, that making conventional programming environments superficially friendlier, “adorning a JavaScript editor with badges and mascots” does little to support novice programmers. If people manage to learn a bit about quarter notes or JavaScript while using JAZZARI, it will be because they are motivated and patient, not because JAZZARI is well designed for educational purposes. There might be the slightest twinkle of a constructionist sandbox here, but even saying that is slightly disingenuous.

If you're interested in environments that have been designed specifically to teach programming, check out LOGO or Scratch. Sam Aaron’s Sonic Pi is designed to teach programming through music composition. Ear Sketch is another.

If you're interested in interactive music tutorials, I recommend Ableton's Learning Music, NYU's musedlab, and Funklet.

Can I suggest some changes to the example programs?

Yes, please do. I'm more than happy to add additional programs to the library, and/or change the existing ones.

Why JavaScript?

Early on, I spent a fair amount of time futzing around with PEG.js, convinced that I would stumble upon a simple yet powerful domain specific language, my own little LOGO for music. I gave up when it occurred to me that I didn't know enough about music or programming language design to “Pull a Papert” and I was floundering like Bruegel’s Icarus, making an ass of myself.

I decided that it was best to err on the side of openness and allow readers to construct their own musical representations using a generic programming language. Despite its eccentricities, Javascript is known by many, and is well supported by web-based tools. Technically, it would be very easy to use a tool like Ohm or PEG.js to transpile from a different language into Javascript but I would need some advice on choosing or inventing a language that makes sense for this environment. Languages like ixi lang, memol, and Tidal Cycles seem like great sources of inspiration.

What’s the ‘Tech’ Behind JAZZARI?

JAZZARI uses a number of free and open source software libraries. JAZZARI itself is a mush of unseemly JavaScript that shuttles data between these excellent pieces of software: