It just occurred to me that, considering XRNS pattern data is stored in XML, with relatively little effort, renoise could have a full featured song versioning system. Anyone from a *nix background knows what the “diff” tool is capable of. It compares two text files, and is capable of creating a patch file to to things like upgrade old versions of code with less harddrive footprint than simply giving the end user the whole new file. This particular tool comes in very handy when it comes to CVSes (Concurrent Versions Systems) which store multiple versions of a program’s code in a fraction of the space it would normally take to store all of them.
… So why not write a simple CVS into Renoise? There’s many different CVS implementations out there, and there’s gotta be at least a few that are written in c++ … it should be a simple copy and paste job really. I mean, we can ignore the sample changes for now and just use it for pattern data. For that matter, this would quite simplify the backup procedure, as pattern data could be backed up as a diff inside the original song file! Then you could simply load the backup or the original at loadtime… in fact, the Renoise could present you with a list of ALL the song versions at startup so you could see what you’ve done in the past!
… IT IS CONCEIVABLE… that even UNDO DATA could be stored in the song!! How COOL would that be, to be able to undo the last change you made before you shut down Renoise the last time?
Just something to think about, people… I love brainfarts like this
Here’s the open source solution to diffing xml in c++: http://freshmeat.net/projects/libxmldiff/
Another thing that came to mind is a tool that compares different patterns in a single version of a song and allows you to generate a new pattern choosing which differences you’d like to keep… a musical form of a merge tool if you will.
Also, the ability to “tween” to patterns might be interesting too, although this could more easily be done with an external tool perhaps. I do have to say though, when you start to look at notes and rhythm as data, all sorts of possibilities open up
I Thought of the idea of multiple song versions within one songfile earlier this fall but I didnt dare to suggest it because I thought it was impossible.
If a XRNS song could be represented without the ZIP archive, instead just as a directory structure on your HD, i.e. a user could double click on a directory that is structured like the file structures and Song.xml located in a zip of a Renoise module…
Then, the file(s) could be saved directly in the CVS system of your choice. Offloading all the work required to make this internal to Renoise, external to a more robust third party solution.
I think that’s better.
Question of the day: How many Renoise users are going to want to install a separate CVS (most of which are php based and need a webserver) to manually keep track of their song versions?
TBH, I would’ve just coded one myself if I figured this wouldn’t be a complete pain in the ass to maintain each song. This is one feature that I think would only be really useful if it was contained in Renoise. The backup feature especially.