Hi all, new Renoise user here.
Long story short (I will post an introduction somewhere in the near future), I’m using Renoise to revive my old band Tribal Rage.
I’m using Odin 3 as a guitar VST and our old songs were written in Impulse Tracker nearly a quarter century ago.
They load just fine and I can alter them perfectly.
However I’m running into an issue now, I have a drum kit made of .xrni instruments, and they total up to 1GB for the entire drum kit.
It would be really nice to have an optional way of loading instruments by reference instead of embedding them into the song. This way all our songs can point to the same .xrni instruments since every song will now consist of the entire drum kit and will be over 1GB when saving, while the instruments remain exactly the same.
Additionally, this would also provide the option of editing the .xrni and it will be reflected in all songs that use it.
Yes, I’m aware that trackers embed samples since the old .MOD days and that not having embedded samples can give problems. However, the same goes for VST’s which I’m sure everyone uses in their songs.
In my daily life, I’m a software engineer (C/C++) and I had a look at the renoise song format which made me wonder, how difficult would it be to provide an option in the instrument XML?
Such as
well it should just be a pointer to one file right?
so you could add an option to “save local” that saves the song with pointers to all of the files and a “save to share” option that saves it with the embedded files.
@esaruoho could you write something into your tool for this?
and i should add that most of the diskspace on my drives have been taken up by stray renoise project files eating up room with the same old breaks being loaded and 20 minute samples per project file.
i mean, i see how it could be done with a script… something like
Add an Instrument Box Menu Entry called Free Up
Click on it on an Instrument
Opens up a Prompt for asking where the file is
Pick the file
Write the path to the Instrument Box entry (Instrument Name)
Replace the Sample Buffer with 2 frames
Save the song
Load the song
Detects “oh this is a Free Up instrument” → Auto-loads the sample buffer with the path to the sample.
Or, alternatively, no Auto-loading, instead the user selects “Load Free Ups into Song”.
In fact, one could make a Free Up Loader, which prompts for an .xrns via File Browser (Finder / Explorer), you load the song, it detects the paths and loads them in.
Certain additional complexities I could think of:
Sliced samples → When replacing the original length Sample Buffer with 2 frames, the slices would get ruined - so then one would have to save the Slices somehow… And load the sample, and reinstate the slices. It could be done, but this information should be stored externally, and if so, where.
Same for Loop lengths - they would need to be stored externally.
I mean, it could be something simple like Songname_looplength.txt & Songname_Slicemarkers.txt which are accessed when the Free Up Loader is called to load the Songname.xrns - but then there’s the added complexity of when you add a new instrument, and the list changes. Unless if they reference the path to the file itself. But what if across the working on the song, you change the path and then added complexity.
Basically, every song will use these (possibly even in the same instrument slots)
Reason for them being so big is that these are fully keyzoned (absolutely awesome that option), have 10 - 15 hits per type / multiple velocity samples and consist of 44.1kHz float 32 sample data.
At the moment, I plan to just load all these instruments in all my existing songs at the same positions (I reserved some instrument space at the start of the list in each song)
For paths, hardcoded to my E drive instruments is fine, or relative from the songs since they are organized pretty tidy.
If for some reason it can’t find the sample, it’s fine if the whole thing just blows up in my face.
ok it seems to me that if you have the xrni folder, and they’re always the same, i could make it so that there’s like a user-defined XRNI folder with “Free Up on Save” feature and “Free Up on Load” which then loads that XRNI. but are you sure that none of the instrument volumes, sample volumes or anything like that get changed?
This is actually a very good question. I’m not entirely sure yet how this is going to progress.
For now I’ve made the whole drumkit, but possibly in the future I might make some changes if, let’s say, I’m not happy with the velocity range for a certain range of samples.
Or, the hihats also feature samples for “Half open” which I didn’t include as of right now. Or even if I made mistakes (which is likely)
But fact of the matter is, if I do make any changes (such as velocity etc) my assumption will automatically be that I will have to alter the songs using it.
Yes, that’s how I had a look at how the song stores the instruments, repacking indeed is possible, in fact, I do have a couple of workarounds to get around this issue, but none of them are a real handy solution
Loading the song already takes a while but that’s fine, as soon as it’s loaded I can just do my thing and work. It’s just when saving (and I have this nasty programmer habit of pressing CTRL+S a lot) it also takes a long time to save.
Now I’m a) unfamiliar with LUA (bar some messing around with World of Warcraft addons) and b) unfamiliar with exactly is possible with LUA scripting in Renoise.
But if I you’d ask me (simple way) of doing this, I would put a checkbox or something in the top right window where the instruments are, and it would be called something “By reference”, as soon as you hit save, a script gets hooked to the actual save routine, and embeds something in the instrument XML telling it to not store the sample data, but just a reference. And similar with loading, if it detects a tag specifying the sample is not embedded but referenced, it hooks the load to load it from disk.
But yeah, that’s easily said when not knowing all the exact details about the saving/loading routines.
that’s a pretty good idea, and i also press control s all the time too lol.
when i was first using renoise i kept tring to use vim bindings lol.
also lua is kind of like bash scripting (i don’t use lua but that is what @esaruoho told me).
no idea how you can program in c though, i can only understand asm as it is a hell of a lot simpler, well also bash too, bash scripting is a fair bit easier than asm.
You mean C, or C++? For me, C is just a tiny abstraction layer on top of assembly code. (And props for you to code in it!)
C++ is a different beast entirely… I’m using C now for work, and I do miss things like polymorphism, but C++ has a syntax so incredibly complicated you can write dozens lines that seem almost alien.