Announce: SpaceTracker, a plain-text human-readable polyphonic file format to record notes and other performance data

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Announce: SpaceTracker, a plain-text human-readable polyphonic file format to record notes and other performance data

Carlo Capocasa
Hello everyone,

I am thrilled to announce SpaceTracker, a plain-text human-readable polyphonic file format to record notes and other performance data. Think "markdown for MIDI"- a way to conveniently write down note data in a text editor that still has enough expressive power to record serious performances and edit them.

Here is the guide that explains the format:

https://raw.githubusercontent.com/carlocapocasa/SpaceTracker/master/help/SpaceTrackerGuide.schelp

The format is implemented as a library in SuperCollider that converts the notes to and from timed buffer format to be played back and recorded on the server.

https://raw.githubusercontent.com/carlocapocasa/SpaceTracker/master/help/SpaceTracker.schelp

It comes with comprehensive unit tests

https://raw.githubusercontent.com/carlocapocasa/TestSpaceTracker

Get SpaceTracker

https://github.com/carlocapocasa/SpaceTracker

I am very excited about this format, because I believe it will be highly useful to achieve SuperCollider's ongoing goal of finding was to allow users to focus more on their music while still leveraging its power, and I am looking forward very much to any feedback you may have in design and code.

Below is an example from the help file that plays back a little one-bar groove I just quickly jotted down

Carlo


s.boot
(
// load buffers
  b = SpaceTracker("
1 16 c2 96
1 16
1 16 c2 64
1 16
1 16 c3 64
1 16
1 16 b2b 64
1 16
1 16 c3 96
1 16
1 16 f2 64
1 16 g2 64
1 16
1 16 b2b 64
1 16 c3 64
").toBuffer(s);
  c = SpaceTracker("
1 4
 0
  3 16 c4 64
  5 16 c4 64
 0
  3 16 b3b 64
  5 16 a3 64
 0
  3 16 g3 64
  5 16 g3 64
1 4
").toBuffer(s);
)

(
  // playback
  {
    var note, velocity;
    #note, velocity = PlayBufT.ar(2, b, 120/60);
    Saw.ar(note.midicps, (velocity/128).lag);
  }.play;
  {
   PlayBufT.ar(2, c, 120/60).collect{|c|
     var n,v;
     #n,v=c;
     SinOsc.ar(n.midicps.lag,0,(v/128).lag*0.2);
   }.sum!2;
 }.play;
)


Loading...