Open tkna91 opened 1 month ago
I'm not sure, but isn't this it?
options = {
start_pos, -- renoise.SongPos object. by default the song start.
end_pos, -- renoise.SongPos object. by default the song end.
sample_rate, -- one of 22050, 44100, 48000, 88200, 96000, 192000. \
-- by default the players current rate.
bit_depth , -- number, one of 16, 24 or 32. by default 32.
interpolation, -- string, one of 'default', 'precise'. by default default'.
priority, -- string, one "low", "realtime", "high". \
-- by default "high".
}
Parameter 'rendering_done_callback' is ONLY called when rendering has succeeded. You can do something with the file you've passed to the renderer here, like for example loading the file into a sample buffer.
renoise.song():render([options, ] filename, rendering_done_callback) -> [boolean, error_message or nil]
https://files.renoise.com/xrnx/documentation/Renoise.Song.API.lua.html#h2_36
This also appears to be another standard feature.
https://tutorials.renoise.com/wiki/Sampler_Waveform#Process_Track_FX
- TFX / SFX - (Renoise only) Apply the selected track/sample fx chain directly to the sample's waveform (applies both native and plugin effects). Note that this will not automatically extend the length of the sample for reverbs, delays etc. that last longer than the original sample.
https://github.com/user-attachments/assets/43a1eeef-8ff0-4a07-84c6-e40bdb9dd561
Indeed, although Note that this will not automatically extend the length of the sample for reverbs, delays etc. that last longer than the original sample.
It seems to be able to print destructively quite well.
In the case of reverbs, delays, etc., there is also the issue of how much of that will be left, and I feel that it is implemented quite well.
But should it be in the form of an API request, since it is not a shortcut key?
api request please. i can hack my way around it, somehow, by creating a new pattern, inputting notes to it, rendering it, and stuff, but it's not quite the same as having it as a api function.
i mean, it WILL work. but it'll be very twiddly.
And it seems to me that if we use pattern-based rendering as in the above post, we can print destructively with reverb and delay samples without any problems. This is assuming reverbs and delays, so it makes sense to implement.
yeah the tails will be there. won't be limited to "sample length = print with reverb = same sample length".
Yes, the length of the sample to be rendered may be specified in the following way
It seems to me that it could be fixed at the length of the current pattern. However, direct designation is also hard to discard.
Perhaps the “double the current pattern and render it in half, then delete the first half and use only the second half” method you spoke of sometime ago would be a good idea?
Am thinking exactly that yes. I hope tomorrow will be productive, I need to get below 100 tickets soon.
It appears to be even better because it also has the following advantages
TFX
or SFX
.TFX
and SFX
@tkna91 can you specify what the difference is between SFX
and TFX
- the terms are not immediately obvious to me.
is sfx sample fx chain and tfx "track fx" aka track dsp stuff?
Yes, it is. It is track DSP and sample DSP.
(Sorry if I haven't read the entire thread but I think I got the gist of it)
Because it rubs me the wrong way to create a separate entry in a pattern in order to render a sample with effects and retain the tail, what I've done is create a tool that adds space at the end of a sample so that I can then render the sample with effect from the editor. The issue with that is that adding that extra space at the end of a sample takes a second to do, which is weird. It could be possible that I programmed the function wrongly, or it could be a limitation of the API, idk.
function add_silence()
local buffer = renoise.song().selected_sample.sample_buffer
local sr = buffer.sample_rate
local bd = buffer.bit_depth
local nc = buffer.number_of_channels
local nf = buffer.number_of_frames
-- len is the new length of the processed sample, which is the length of the original sample
-- times some 'value' chosen by the user, for example selecting 4 from a dropdown menu
local len = nf * value
-- Temp table to hold the original sample data
local tmpL = {}
local tmpR = {}
-- Save buffer to temp table
for i = 1, nf do
tmpL[i] = buffer:sample_data(LEFT, i)
if nc == 2 then
tmpR[i] = buffer:sample_data(RIGHT, i)
end
end
-- Remove sample data from the buffer and set it with the orignal
-- buffer's properties.
buffer:create_sample_data(sr, bd, nc, len)
-- Prepare the buffer for new sample data;
-- Set sample data from the temp table to the current buffer;
-- Finalize the buffer.
buffer:prepare_sample_data_changes()
for i = 1, len do
if i <= nf then
buffer:set_sample_data(LEFT, i, tmpL[i])
if nc == 2 then buffer:set_sample_data(RIGHT, i, tmpR[i]) end
else
buffer:set_sample_data(LEFT, i, 0)
if nc == 2 then buffer:set_sample_data(RIGHT, i, 0) end
end
end
buffer:finalize_sample_data_changes()
end
I also know that there is a tool shared somewhere in the forum that allows to do the 'add note -> render to new sample/instrument -> remove note' from one go, but I can't remember what it is called.
I noticed today, isn't this mostly achieved with "Render To Sample"? In other words, it seems to me that there is nothing wrong with the standard feature itself. It appears that this could be efficient with Paketti in the way that AFX has pointed out. What do you think?
https://github.com/user-attachments/assets/11fd9c20-d11e-40ad-b362-a5e27a21fd20
Perhaps the following steps could be taken?
Render Pattern to Sample
that patternYeah, a simple test looks fine from an EQ perspective.
https://github.com/user-attachments/assets/128a494e-07bd-49e3-a5dc-bde56a889c0c