Hi, I'm Mike from western NC

Hello everyone,

Though I’m new to Sonic Pi, I’ve quite a bit of experience as a professional software developer and as a lifelong amateur musician.

I’m quite impressed with Sonic Pi’s capabilities after playing with it for a few hours and going through the doc. It’s a very nice piece of work! Even more importantly, it seems to have a large and active user community – a critical feature for open source projects.

Briefly, there are a couple of projects I’m thinking of undertaking with Sonic Pi:

  1. A Raspberry Pi synth/looper to take MIDI input from a Linnstrument controller.

  2. Integrating the capabilities of my Tbon notation language into Sonic Pi to provide a more compact way to specify melodies.

I’d greatly appreciate discussion, suggestions and references to existing resources with regard to either of the above. And if there are some areas where I can be of help to the Sonic Pi community, please let me know.


HI Mike,

welcome to Sonic Pi and to this forum!

What I find a particularly interesting idea is the integration of Tbon. That is because I sometimes find myself notating a meldody as a line of intervals. I did not formalise this idea so I just notated the intervals (with arrows to indicate the direction) but no rhythm.

If you used to listening to music (in a somehow analytical way) it seems kind of obvious to memorise the interval structure just like you notate chord extensions (e. g. in Jazz) such as C 7/9 or in the Continuo. I also thought about writing a parser (well, a big word for what I was planning) to notate melodies within Sonic Pi such as 1 11 13 b7. But I did not follow this idea any further because it wasn’t conceptionally coherent, which Tbon seems to be.

I am not entirely sure if it makes things easier (especially not for a 10 year old) but with respect to the music for me Tbon seems to have a greater internal logic then notating midi values or note names. I think with respect to the ones who are interested in live coding it is generally a good idea to think of ways how you can quickly translate musical ideas into code.

So… I will follow your efforts with interest although I probably won’t be able to contribute from the technical perspective.


Hello Mike! I’m in Asheville, are you nearby?

Hi @kniknoo,

I’m in Weaverville, so not far at all. I see from your profile you teach Middle and High School. I salute your dedication (and patience!). My daughter teaches HS English and her husband teaches MS and HS Robotics – both at the American School in London.


1 Like

Thanks, Martin. Interesting idea about encoding intervals instead of pitches. Although I did ok in university aural skills courses, I never really mastered the art of hearing a melody as sequence of intervals. I can hear a pair of notes in isolation and name the interval but when it comes to melodies I tend to hear everything in conventional tonality so the 4th from do to fa has, to me, a different quality than the 4th from re to sol. Which is a long way of explaining why I didn’t give serious consideration to using intervals instead of pitches in Tbon.

Tbon is mostly just another notation language. If there’s anything that can be called innovative about it, I’d say it’s the recognition that musicians naturally think and feel beats and subdivisions of beats rather than crochets and quavers and what have you. Once I thought about it that way it was obvious that the most natural way to enter melodies from a computer keyboard is as groups of pitch symbols separated by whitespace so that

abc d--e |

represents a measure with two beats with the first beat a triplet and the second divided into two parts in dotted rhythm. Compare with, say, Lilypond where you have to write

\tuplet 3/2 {a8 b c} d8. e16  |

to get the same rhythm. (I hasten to add that Lilypond is a magnificent piece of software and infinitely more capable in terms of creating beautifully engraved output.)

Everything else about Tbon is just mechanics to take best advantage of the core insight about beats and subdivisions and support things like multiple parts and temporary polyphony that are required to represent a broad range of real music.

So my current thinking for integrating Tbon into Sonic Pi is to start as simply as possible with a construct like

melody = tbon 'abc de'

where tbon is function that returns a list of pitch/duration pairs like

[[:a3, 0.33], [:b3, 0.33], [:c4, 0.33], [:d4, 0.75], [:e4, 0.25]] 

for the example above. Then you could play the melody with

m = melody.transpose #unzip to 2 lists. One with pitches, one with durations
play_pattern_timed m[0], m[1]

or use Ruby operations to permute the pitches and durations as desired.