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

classic Classic list List threaded Threaded
12 messages Options
Reply | Threaded
Open this post in threaded view
|

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;
)


Reply | Threaded
Open this post in threaded view
|

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

lfsaw
thanks for this, carlos!

To facilitate installation and update, why not make it a Quark?
It is really easy and your github repository is already very much set up for it. All that is needed are a quark file and it being announced in the quark directory. More info here:

        http://doc.sccode.org/Guides/UsingQuarks.html#Making%20your%20own%20Quarks

cheers
        Till


> On 16. Jul 2017, at 13:12, [hidden email] wrote:
>
> 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;
> )
>
>
>
>
>
>
> --
> View this message in context: http://new-supercollider-mailing-lists-forums-use-these.2681727.n2.nabble.com/Announce-SpaceTracker-a-plain-text-human-readable-polyphonic-file-format-to-record-notes-and-other-pa-tp7633529.html
> Sent from the SuperCollider Developers New (Use this!!!!) mailing list archive at Nabble.com.
>
> _______________________________________________
> sc-dev mailing list
>
> info (subscription, etc.): http://www.birmingham.ac.uk/facilities/ea-studios/research/supercollider/mailinglist.aspx
> archive: http://www.listarc.bham.ac.uk/marchives/sc-dev/
> search: http://www.listarc.bham.ac.uk/lists/sc-dev/search/


_______________________________________________
sc-dev mailing list

info (subscription, etc.): http://www.birmingham.ac.uk/facilities/ea-studios/research/supercollider/mailinglist.aspx
archive: http://www.listarc.bham.ac.uk/marchives/sc-dev/
search: http://www.listarc.bham.ac.uk/lists/sc-dev/search/
Reply | Threaded
Open this post in threaded view
|

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

Carlo Capocasa
Thanks Till, it was a pleasure!

>To facilitate installation and update, why not make it a Quark?
>It is really easy and your github repository is already very much set up for it. All that is needed are a quark file and it being >announced in the quark directory. More info here:

Just hat a look- isn't that great, dependency management, versioning and all.

The hustle is that SpaceTracker depends on TimedBufferUGens to be really useful- From what I've seen UGens can't be quarks, or can they?
Reply | Threaded
Open this post in threaded view
|

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

lfsaw
> The hustle is that SpaceTracker depends on TimedBufferUGens to be really
> useful- From what I've seen UGens can't be quarks, or can they?

real UGens not not for now but there are people working on it.
But you can always advertise the dependancy to TimedBufferUGens (you might want to consider putting them into sc3-plugins even) and still maintain it as a quark, in fact there's not much to loose for you doing so; your current installation routine would still be possible.


cheers
        Till
_______________________________________________
sc-dev mailing list

info (subscription, etc.): http://www.birmingham.ac.uk/facilities/ea-studios/research/supercollider/mailinglist.aspx
archive: http://www.listarc.bham.ac.uk/marchives/sc-dev/
search: http://www.listarc.bham.ac.uk/lists/sc-dev/search/
Reply | Threaded
Open this post in threaded view
|

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

Carlo Capocasa
> real UGens not not for now but there are people working on it.

Oh great- do you know who? Maybe I can help.

Automatic compile system so you just install the quark and get the right binary for your platform- perhaps directly supporting Faust dsp code. Oh yeah... ;)

I was surprised to see you can just put a UGen binary shared library into your user extensions and it gets loaded just fine. But I'm not sure if binaries just better be owned by root.

> But you can always advertise the dependancy to TimedBufferUGens (you might want to consider putting them into
> sc3-plugins even) and still maintain it as a quark, in fact there's not much to loose for you doing so; your current
> installation routine would still be possible.

Yeah I should really do this- My current routine is more of a Verlegenheitslösung¹- Part of me wants to put a submodule pointing to a tag into sc3-plugins, but I don't want to burden sc3-plugins users with that- but I also really don't want to have to sync a folder in sc3-plugins with my repository.

If there's a better solution in the works maybe I can use my UGens to test drive it- or I'll just bite the bullet and import the first stable release into sc3-plugins.

Thank you so much for your encouragement!

¹ One of those hard-to-translate German words that perfectly capture a situation- it means "I know there's a better way to do this but I have no idea what it is"
Reply | Threaded
Open this post in threaded view
|

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

lfsaw

> On 01. Aug 2017, at 10:38, [hidden email] wrote:
>
>> real UGens not not for now but there are people working on it.
>
> Oh great- do you know who? Maybe I can help.


sorry, I don;t recall names... over at slack, we just cobbled together scott (gh @muellmusik) and maybe Nathan (gh @snappizz)


> Automatic compile system so you just install the quark and get the right
> binary for your platform- perhaps directly supporting Faust dsp code. Oh
> yeah... ;)
>
> I was surprised to see you can just put a UGen binary shared library into
> your user extensions and it gets loaded just fine. But I'm not sure if
> binaries just better be owned by root.

yepp, it gets found by scsynth but it atm does recognise include paths from sc_config.yaml
Ownage by root is not needed AFAIK.

> If there's a better solution in the works maybe I can use my UGens to test
> drive it- or I'll just bite the bullet and import the first stable release
> into sc3-plugins.
>
> Thank you so much for your encouragement!

cheers!

        Till


_______________________________________________
sc-dev mailing list

info (subscription, etc.): http://www.birmingham.ac.uk/facilities/ea-studios/research/supercollider/mailinglist.aspx
archive: http://www.listarc.bham.ac.uk/marchives/sc-dev/
search: http://www.listarc.bham.ac.uk/lists/sc-dev/search/
Reply | Threaded
Open this post in threaded view
|

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

brianlheim
>>> real UGens not not for now but there are people working on it.
>>
>> Oh great- do you know who? Maybe I can help.

> sorry, I don;t recall names... over at slack, we just cobbled together scott (gh @muellmusik) and maybe Nathan (gh @snappizz)

I'm planning to get to this after https://github.com/supercollider/supercollider/pull/2861 merges. It depends on the refactor I did to LanguageConfig.

-Brian

On Tue, Aug 1, 2017 at 10:19 AM, <[hidden email]> wrote:

> On 01. Aug 2017, at 10:38, [hidden email] wrote:
>
>> real UGens not not for now but there are people working on it.
>
> Oh great- do you know who? Maybe I can help.


sorry, I don;t recall names... over at slack, we just cobbled together scott (gh @muellmusik) and maybe Nathan (gh @snappizz)


> Automatic compile system so you just install the quark and get the right
> binary for your platform- perhaps directly supporting Faust dsp code. Oh
> yeah... ;)
>
> I was surprised to see you can just put a UGen binary shared library into
> your user extensions and it gets loaded just fine. But I'm not sure if
> binaries just better be owned by root.

yepp, it gets found by scsynth but it atm does recognise include paths from sc_config.yaml
Ownage by root is not needed AFAIK.

> If there's a better solution in the works maybe I can use my UGens to test
> drive it- or I'll just bite the bullet and import the first stable release
> into sc3-plugins.
>
> Thank you so much for your encouragement!

cheers!

        Till



--
-brian

_______________________________
Brian Heim | computer musician & programmer
Reply | Threaded
Open this post in threaded view
|

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

Carlo Capocasa
> I'm planning to get to this after https://github.com/supercollider/supercollider/pull/2861 merges. It depends on the refactor I did to LanguageConfig.

Nice.
Reply | Threaded
Open this post in threaded view
|

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

Carlo Capocasa
In reply to this post by lfsaw
> sorry, I don;t recall names... over at slack, we just cobbled together scott (gh @muellmusik) and maybe Nathan (gh @snappizz)

Now that sounds familiar. It's amazing for developing skills in phrasing things very politely without explicitly mentioning anyone at all.

> sorry, I don;t recall names... over at slack, we just cobbled together scott (gh @muellmusik) and maybe Nathan (gh @snappizz)

All right... great stuff. Thanks Scott and Nathan! In advance! I mean, not raise any expectations or anything.

Okay well since it's not forever I suppose I can just rsync release code into sc3-plugins along with a version file.
Reply | Threaded
Open this post in threaded view
|

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

crucialfelix
In reply to this post by lfsaw
You don't even need that.


works I think. It should.



On Sun, Jul 30, 2017 at 10:20 PM <[hidden email]> wrote:
thanks for this, carlos!

To facilitate installation and update, why not make it a Quark?
It is really easy and your github repository is already very much set up for it. All that is needed are a quark file and it being announced in the quark directory. More info here:

        http://doc.sccode.org/Guides/UsingQuarks.html#Making%20your%20own%20Quarks

cheers
        Till


> On 16. Jul 2017, at 13:12, [hidden email] wrote:
>
> 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;
> )
>
>
>
>
>
>
> --
> View this message in context: http://new-supercollider-mailing-lists-forums-use-these.2681727.n2.nabble.com/Announce-SpaceTracker-a-plain-text-human-readable-polyphonic-file-format-to-record-notes-and-other-pa-tp7633529.html
> Sent from the SuperCollider Developers New (Use this!!!!) mailing list archive at Nabble.com.
>
> _______________________________________________
> sc-dev mailing list
>
> info (subscription, etc.): http://www.birmingham.ac.uk/facilities/ea-studios/research/supercollider/mailinglist.aspx
> archive: http://www.listarc.bham.ac.uk/marchives/sc-dev/
> search: http://www.listarc.bham.ac.uk/lists/sc-dev/search/


_______________________________________________
sc-dev mailing list

info (subscription, etc.): http://www.birmingham.ac.uk/facilities/ea-studios/research/supercollider/mailinglist.aspx
archive: http://www.listarc.bham.ac.uk/marchives/sc-dev/
search: http://www.listarc.bham.ac.uk/lists/sc-dev/search/
Reply | Threaded
Open this post in threaded view
|

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

shiihs
In reply to this post by Carlo Capocasa
Carlo Capocasa wrote
[...]
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.
[...]
Very interesting indeed!

As it happens, in the past few days I started work on a midi domain specific language (DSL) called "mispel" = MIdi SPEcification Language" (it's work in progress but it can be used already, see https://github.com/shimpe/expremigen ).

Mispel's level of abstraction seems a bit higher than your SpaceTracker and is really intended to be used one-way from spec -> midi.

Mispel is implemented in python 3 and under the covers translates everything to a python implementation of supercollider's patterns.

I started wondering if/how something like mispel could be implemented directly in supercollider because I do not naturally think in "midi note numbers" and writing out patterns for tonal music can feel quite cumbersome/tedious/error-prone. My current guess is it would be far from trivial to port mispel to sclang so perhaps I'll just have to resort to code generation, where the mispel syntax is converted to sclang patterns using a python program (but that is somewhat less convenient to use).
Reply | Threaded
Open this post in threaded view
|

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

Carlo Capocasa
>Very interesting indeed!

Thank you very much!

>As it happens, in the past few days I started work on a midi domain specific language (DSL) called
>"mispel" = MIdi SPEcification Language" (it's work in progress but it can be used already, see
>https://github.com/shimpe/expremigen ).

This is also very exciting- and it gets me thinking, it would be really interesting to have a high level language that not only has notation but also a hardware controller (or a way to perform it on an existing one).

> I started wondering if/how something like mispel could be implemented directly in supercollider

I cursed myself a couple of times while writing SpaceTracker (I should give my great thanks at this opportunity to Julian Rohrhuber for being so kind, patient and helpful when I got a little bit emotional when I ran into some debugging issues), but it grows on you.

Porting your own stuff is always hard- I thought at some point whether to write SpaceTracker as a clean C libarary and then embed it as a language primitive, but I didn't feel up to it yet at the time.

Carlo