I just wanted to start a new thread for this because it’s been on a few peoples’ minds lately, as well as in the past, but as far as I can tell no clear answer from the dev team was provided. If it has been answered before then I certainly apologise for bringing it back up. The forum search is a bit sensitive and won’t even take queries such as “16 bit” so it was difficult to track down old threads.
Hopefully we can finally get to the bottom of this one and presumably highlight something that needs to be fixed in a future version. Maybe this belongs in the bug report section, I’m not sure, or maybe it’s just a limitation that’s somehow gone unnoticed.
Anyway, as it says in the topic: What happens to the bit-depth of samples in Renoise?
After various tests, my own opinion is: They get converted to 16-bit no matter what.
A little more background info…
When this was brought up in the past my first thoughts were simply “why would Renoise convert the sample at all… that doesn’t make sense?”. But I didn’t really dig deep enough with my testing at that time.
Recently looza and Denim both had similar questions relating to bit-depth. In the case of looza’s thread he wondered if a 16-bit sample did in fact remain 16-bit, or whether Renoise would convert it to 32-bit internally. In the case of Denim’s thread he wondered if his 24-bit samples were being converted to 16-bit internally. Naturally I got curious and had to do a few more tests of my own.
In all of my tests I took an empty .RNS file (1 pattern 64-steps in length, no samples loaded) and measured its filesize. Then I loaded a sample into the first instrument slot, saved the song and measured the new size of the .RNS file. I then subtracted the size of the empty .RNS from this new size, theoretically giving me the actual size of the sample data stored within the song.
24-bit test:
Empty .RNS filesize = 24576 bytes
24-bit sample filesize = 266240 bytes
New .RNS filesize = 204800 bytes
16-bit test:
Empty .RNS filesize = 24576 bytes
16-bit sample filesize = 180224 bytes
New .RNS filesize = 204800 bytes
8-bit test:
Empty .RNS filesize = 24576 bytes
8-bit sample filesize = 90112 bytes
New .RNS filesize = 204800 bytes
As you can clearly see, the new .RNS filesize was identical in every test. If we take the size of that new .RNS and subtract the size of the empty .RNS we get:
204800 - 24576 = 180224 bytes
The exact same size as the 16-bit sample itself, therefore my only conclusion is that Renoise is converting the sample to 16-bit internally no matter what.
Now for a slightly extreme example of why this could potentially be very bad.
Here is a 24-bit sample of a sinewave running at 440hz for 1 second. It was generated in Soundforge at -90 dB so don’t expect to hear anything, but do save the file to your machine
sine_440hz_quiet.wav
Now load this sample into Soundforge (or Audacity or a similar wave editor) and normalise it back to 100% / 0.0 dB. Here is what you’ll get:
sine_440hz_normalised.wav
Even though it was generated at -90 dB which is effectively silent, at 24-bit there was enough resolution to capture the sinewave no problem, allowing you to normalise it again and get a clean signal.
Now load the sample into Renoise and try the same thing. Here’s the result: … Ouch!
sine_440hz_renoise.wav
This happened because Renoise first converted the sample to 16-bit, greatly reducing the resolution of the sample data, effectively rendering the almost-silent sinewave as a bunch of lo-fi, bitcrushed poo. And when you amplify poo you get… loud poo!
At this point I’m wondering why Renoise even saves samples as 32-bit?
Anyway, dev team, I hope you read this and I hope it can be remedied in a future update to Renoise. I’m sure we’d all prefer our samples to remain untouched, or at the very least not downgraded to a lower bit-depth.
Please understand that this is not angry post in any way, in fact I pretty much exclusively work in 16-bit right now so I’m (hopefully) not very affected by this, but I felt that it should definitely be brought to your attention. And on the off-chance that this is somehow related to each user’s personal system configuration (though I’ve had friends test it for me and they get the same results), then I feel it should definitely be something each user is aware of.
.