[Fixed 2.8] Api Realtime Rendering Fails When Called From A Gui

Hi, I was just wondering, what am I missing with this bit of code?

  
vb:button {tooltip="render", text="Render Song", pressed =   
function()  
local rendering_done_callback=function()  
renoise.app():show_status("dfdf")  
end  
local file_name="/Users/esaruoho/ding"  
local options = { sample_rate=44100, bit_depth=16, priority="realtime"}  
  
  
local options={priority="realtime"}  
renoise.song():render(options, file_name, rendering_done_callback)  
  
end},  

Are you getting an error message of some sort?

EDIT: or more specifically: what should happen and what does?

nope i’m just getting a silent wav. the song has a line-in that is used to hear what a bit of external gear plays. nothing else.
this leads me to believe that I haven’t been able to define priority=realtime properly in that snippet.

is this a new tool for realtime render of external gear? cooool.

Currently it’s just a button that starts rendering of the whole song to a static filename in a static location. I’m hoping to eventually also open up a finder/explorer in the location - since Renoise Native RenderSongToDisk does not allow for “open folder where you just diskwrote the track to”. I’m also hoping it’ll help me sample outboard gear of multiple patterns easier. & stuff.

I’m using this script to start rendering of a song to a static filename in a static folder (haven’t gotten around to figuring out how to use the lua gui to be able to define a folder, store it and ask for a filename, at least not yet - and saving that to a xml file etc). i’m using it to record the whole song, and especially with external gear piped into Renoise with the realtime priority mode on, via line-in device(s). It’d be easy to modify this to be a shortcut I can call to render-whole-song. But I can’t seem to set the Realtime mode, for some reason, or then this lua api rendering somehow does not yet allow for “realtime rendering when line-in devices detected”.
I’m not entirely sure.

You said there’s nothing but a line-in device in your song and anything ‘external’ does not get rendered. Have you tested that anything ‘internal’ like a sample-based instrument does? Just to rule that out… If it indeed turns out that internal things get rendered, while external does not, then… I’m stumped. I can’t see an obvious error in your code snippet. You’re defining the realtime property twice, but that should not be a problem. Hmm.

Maybe if you try to set all keys of the options-table? I know the ref says they’re optional, but maybe just to try?

Edited/typos… Jeez.

yes i have. internal samplebased instruments + vst + etc all work.
i’ll try and set the bit rate to 16bit and see if the wavefile turns 16bit.
ok,

  
vb:button {tooltip="render", text="Render Song", pressed =   
function()  
local rendering_done_callback=function()  
renoise.app():show_status("dfdf")  
end  
local file_name="/Users/esaruoho/ding"  
local bitdepth = {bit_depth=16}  
local priority = {priority="realtime"}  
local options = {sample_rate=44100, bit_depth=16} --priority="realtime"}  
--local options={priority="realtime"}  
renoise.song():render(bitdepth, priority, file_name, rendering_done_callback)  
  
end},  

results in a 16bit wavefile. the priority still doesn’t seem to work.
tried both of these.

  
--local priority = {priority="realtime"}  
local priority = {"realtime"}  
  

and just keep getting an error from the render command.

  
*** No matching overload found, candidates:  
*** void render(Song&,luabind::object const&,custom [class String] const&,luabind::object const&)  
*** void render(Song&,custom [class String] const&,luabind::object const&)  
*** stack traceback:  
*** [C]: in function 'render'  
*** ./MiniSamplerView.lua:79: in function <.><br>
<br>```

<br>
<br>
weird..</.>

yeah it totally seems like #line input gets disabled when a script runs renoise.render.

Also, trying with low, realtime, high - the priority DOES get read, but the line-in input is visibly muted when rendering starts.

Hi, I’ve tried to use the lua render command for realtime rendering, but everytime I toggle the render command, any #line input devices in the song get muted. Surely the render command should be able to do realtime rendering with line-in enabled?

  
  
vb:button {tooltip="render", text="Render Song", pressed =   
function()  
local rendering_done_callback=function()  
renoise.app():show_status("dfdf")  
end  
local file_name="/Users/esaruoho/ding"  
local bitdepth = {bit_depth=16, priority="realtime", sample_rate=88200}  
renoise.song():render(bitdepth, file_name, rendering_done_callback)  
  
end},  
  

Yeah, says “Recording Device is disabled” on #line input even if it’s at midi return or realtime recording.

Yeah, that won’t work, because the options are supposed to be passed as a single table. What I meant with ‘set all keys’ was that maybe the table should be passed with all keys included… ? Dunno. Test?

Meaning: (from the reference)

  
--generate the table structure  
local options = {  
 start_pos, -- renoise.SongPos object. by default the song start.  
 end_pos, -- renoise.SongPos object. by default the song end.  
 sample_rate, -- number, one of 22050, 44100, 48000, 88200, 96000. \  
 -- by default the players current rate.  
 bit_depth , -- number, one of 16, 24 or 32. by default 32.  
 interpolation, -- string, one of 'cubic', 'sinc'. by default 'cubic'.  
 priority, -- string, one "low", "realtime", "high". \  
 -- by default "high".  
 }  
  
--set needed values for keys  
options.priority = "realtime"  
options.interpolation = "cubic" --as realtime does not support sinc, I gather? (but the default seems to be cubic anyway. hmm..)  
  
--and then pass the whole options-table-shebang to render  
renoise.song():render(options, file_name, rendering_done_callback)  
  
  

Anyways. I have a feeling that this might not help. Worth a shot, though? This would be the perfect time for a real developer to step in and give some directions…

all keys are not required… if they were, setting bitrate=16 would ignore and default to 32.

vb:button {tooltip="render", text="Render Song", pressed =   
function()  
local rendering_done_callback=function()  
renoise.app():show_status("dfdf")  
end  
local file_name="/Users/esaruoho/ding"  
local bitdepth = {bit_depth=16, priority="high", sample_rate=88200}  
renoise.song():render(bitdepth, file_name, rendering_done_callback)  
  
end},  
  

high, low, realtime all work with this setup, but high + low disable lineinput device (with “Recording device is disabled” -text)… and realtime doesn’t show “Recording device is disabled” yet STILL disables the recording device for the realtime render.


ok, that’s what i get if i do priority=high. but if i do priority=realtime they don’t get disabled, but their input sound gets muted immediately. it’s as if renoise does a “panic” first (disabling lineinput) and then starts rendering.


surely this #line input should not be disabled anymore in renoise 2.7 since renoise 2.7 can do rendering with outboard gear…

edit: those pictures were taken with priority=high. if i switch to priority=realtime, the line input vu-meter gets disabled and thus no sound is recorded. i can’t seem to get priority=realtime to work (it IS rendering realtime, but #line input device is disabled)…

Tried with

  
renoise.song():render(  
 {priority="realtime"},   
 "D:\\Test",   
 function()  
 renoise.app():show_status("Done")  
 end  
)  
  

and this works just fine here.


We indeed do a panic before rendering, but starting the song enables all line-in devices again, so this should not be a problem.

I also tried with this (added it to the vb:button function), and realtime is selected (i notice it from the speed of rendering), but the #line input device is muted on start of.

Ok, i have some details. You’ll love this.
– start rendering with a looping sample that loops through-out the track, and with a line in device on second channel. render has line in + looping sample
– start rendering with looping sample that stops on row 3 + and with linein device on second channel - render has line in + looping sample UNTIL note off.
– start rendering with only line-in - nothing. also, the line-in vumeter stops being updated, and the master mixer up vumeter doesn’t get updated either.
– start rendering with only line-in will sometimes be in such a state that it gives a 257sample clip of line input and the rest of the rendering is silence. ¨

also it seems that after a while the only behaviour i can get when recording both sample + line_in to try and get line_in, is about 257 samples worth of “coming in” (sound of line_in) which is then cut and only the sample plays.

  
vb:button {tooltip="render", text="Render Song", pressed =   
function()  
local file_name="/Users/esaruoho/ding"  
renoise.song():render({priority="realtime", bit_depth=16, sample_rate=44100}, file_name, function()  
renoise.app():show_status("Rendered: " .. file_name ..".wav")  
end)  
end},  

Also, you don’t get the 257 samples of line-in if there’s a send on the line-in device track… i tried to use that to try and get it to echo or something but it stopped existing…

Ok, I just decided to copypaste your code into the button and since i made a little lua error, saving the script actually ran the function - and i got a wavefile with the line input sound. however, when i fixed it inside a function, no go again.

Yes, your code will work in the terminal, and as a keyboard_shortcut. But I’m trying to have a button that does it, and for some reason said button can’t start it without killing the line-input. I’ll try and see if i can somehow get it to work with a gui button… dunno why can’t get it working right now.

edit:
okay, after some mucking about, I got a keyboard shortcut to do it, but a gui button won’t do it!? I*m starting to wonder…

  
  
function taktikrender()  
renoise.song():render( {priority="realtime"}, "/Test", function() renoise.app():show_status("Done") end )  
end   
 renoise.tool():add_keybinding {  
 name = "Global:Impulse:TaktikRender",  
 invoke = function() taktikrender()  
 end }   
  

this works as a keyshortcut, what i don’t get is why i can’t get a gui going. w e i r d

  
vb:button {tooltip="render", text="Render Song", pressed = function() taktikrender()  
end}  

well, shouldn’t the behaviour of this button be completely the same as an add_keybinding, yet… it… isn’t.
:unsure:

  
vb:button {tooltip="render", text="Render Song", pressed = function()  
renoise.song():render({priority="realtime", bit_depth=16}, "/Test",   
function() renoise.app():show_status("Done") end )end  
},  

doesn’t do it either. It’s like the gui buttons make it want to do the feature but not really :)

Question, is there any chance we could eventually have a “enable the line-in devices again” type “reset” as an API function? :)