I’ve recently been messing around with my clip based composition tools, and
started with a new approach. The Clip Arranger/Composer I programmed about a
year ago was quite complicated, at least the GUI for the composer was quite
complex. ( New Tool (2.8): Clip Arranger (Beta) )
So what I came up with, was to create a sort of programming language for
transforming, positioning, (randomly) selecting the contents of clips. It’s not
thought to arrange the final form of a track, but more as an artistic tool to
initially fill some patterns from the material you already have. Additionally
it allows you to create effect column interpolations and automation curves with
arbitrary mathematical formulars.
So, imagine the ability to define clips like in the Clip Arranger, but instead
of a GUI for configuring follow actions you have a small domain specific
language to define how the clips are placed and mangled, with the ability to
abstract away bigger passages.
The state of the tool: The tool is done, the language is implemented and
tested. Whats not done is the documentation, which still misses a some parts.
Scripting inside scripting…
The idea to create a cross compiler for C-sound score files in lua crossed my mind once… But you can’t translate everything in score files to Renoise output (C-sound is pretty versatile).
This approach might work better.
I’m a fan
Exactly what I should’ve made for the drum track(s) on my submission to the EatMe compo
Plans on releasing?
I just want to say, awesome work, please know that the Overtune tool… don’t know really if a lot of people use it, but the point is: when I dropped it here at first it was not very ‘userfriendly’ at all but the support on the forums had me go on with it and improve it.
Sure! I’ve implemented writing the pattern data and importing/exporting
the clip composing language program texts to/from files. A small
code cleanup, finishing documentation and packaging it needs to be done
Yea, I know ReNoam, it’s kind of similar. But CCL is more fine grained. ReNoam
only allows you to define which patterns (identified by numbers as far as i
understand it) to use. CCL allows you to make clips from any number of lines in
your track, it allows you to handle your bassdrum track differently from the
snaredrum track for instance. Where in ReNoam you had to decide what the
contents of the individual tracks of a pattern had to have.
And of course the language is different. CCL is has a more constructive
approach to “build” your composition, you take your clips, and mangle, select,
loop, align and bring them into sequence.
Further plans/ideas I have for CCL, in case it proves useful, are that you
could add transformation operations that allow you to transform your lines on
the fly. eg. transpose the melody, apply some random grove/pattern in the
delay track, or create automation/fx ramps.
But I worry that those transformations are not that useful to the creative
process, because if you want to actually edit your notes/fx/events then you
should use the proper tool for that, and that would be the Renoise
pattern editor and not some weird programming language So I focus on a more
basic and simple language for now.
I would be really interested to see how you built the tool. I had a go at parser building with lua myself, but being a complete novice, it quickly got out of hand. Didn’t really know how those are programmed… So eagerly waiting to have a peek!
It’s a simple recursive descent parser, which uses closures and a helper class to hold state to build the
execution tree. It’s not really a parser “by the book”, but it works and is reasonably short. My experience
in writing parsers and language implementations and my major subject (compiler construction) in my studies
helped a lot getting it down and working so quickly.
Group tracks! Good idea, I made clip() aware of track groups in version 1.06 (you may update
anytime). That means you can now make a clip in a group track, and when using clip() it will return
a collection which will also contain the contents of the group members.
Btw. with the now released version 1.08 you can access and transform the pattern editor selection directly using selection() and “Save & Exec Selection”. This allows you to implement your own “advanced edit” operations.