How to use, read the new LuaLS based API docs

it’s not you at all. i’m having trouble choking this down.

the format has been changed from

renoise.song().transport.bpm to something else, where the line that has the keyword no longer has the full reference.

i used to just type the whole LUA API documentation into a textfile and search for a keyword. this is what i got:

$ sol transport
201:  make it easier to catch typos. `song().transport.bmp = 80` will fire an error,
202-  because there is no such property 'bmp.' You probably meant
203:  `song().transport.bpm = 80` here. If you need to store data somewhere,
204-  do it in your own tables, objects instead of using the Renoise API objects.
--
214:        renoise.song().transport.bpm_observable:add_notifier(function()
215-          print("bpm changed")
--
219:        renoise.song().transport.bpm = 120
220-
--
1275:        renoise.song().transport.bpm))
1276-    end
--
1278:    renoise.song().transport.bpm_observable:add_notifier(bpm_changed)
1279-    -- later on, maybe:
1280:    renoise.song().transport.bpm_observable:remove_notifier(bpm_changed)
1281-
--
2044:-- The message pattern (e.g. "/renoise/transport/start")
2045-message.pattern
--
2800:-- Helper class used in Transport and Song, representing a position in the song.
2801-
--
3042:-- See renoise.Transport for more info.
3043:renoise.song().transport
3044:  -> [read-only, renoise.Transport object]
3045-
--
3221:-- renoise.Transport
3222---------------------------------------------------------------------------------
--
3226:renoise.Transport.PLAYMODE_RESTART_PATTERN
3227:renoise.Transport.PLAYMODE_CONTINUE_PATTERN
3228-
3229:renoise.Transport.RECORD_PARAMETER_MODE_PATTERN
3230:renoise.Transport.RECORD_PARAMETER_MODE_AUTOMATION
3231-
3232:renoise.Transport.TIMING_MODEL_SPEED
3233:renoise.Transport.TIMING_MODEL_LPB
3234-
--
3239:renoise.song().transport:panic()
3240-
--
3242:renoise.song().transport:start(mode)
3243--- start playing the currently edited pattern at the given line offset
3244:renoise.song().transport:start_at(line)
3245--- start playing a the given renoise.SongPos (sequence pos and line)
3246:renoise.song().transport:start_at(song_pos)
3247-
--
3249:renoise.song().transport:stop()
3250-
--
3252:renoise.song().transport:trigger_sequence(sequence_pos)
3253--- Append the sequence to the scheduled sequence list. Scheduled playback
--
3255:renoise.song().transport:add_scheduled_sequence(sequence_pos)
3256--- Replace the scheduled sequence list with the given sequence.
3257:renoise.song().transport:set_scheduled_sequence(sequence_pos)
3258-
--
3260:renoise.song().transport:loop_block_move_forwards()
3261--- Move the block loop one segment backwards, when possible.
3262:renoise.song().transport:loop_block_move_backwards()
3263-
--
3266:renoise.song().transport:start_stop_sample_recording()
3267--- Cancel a currently running sample recording when the sample dialog
--
3269:renoise.song().transport:cancel_sample_recording()
3270-
--
3275:renoise.song().transport.playing, _observable
3276-  -> [boolean]
--
3282:renoise.song().transport.timing_model
3283-  -> [read-only, enum = TIMING_MODEL]
--
3286:renoise.song().transport.bpm, _observable
3287-  -> [number, 32-999]
3288:renoise.song().transport.lpb, _observable
3289-  -> [number, 1-256]
3290:renoise.song().transport.tpl, _observable
3291-  -> [number, 1-16]
--
3294:renoise.song().transport.playback_pos
3295-  -> [renoise.SongPos object]
3296:renoise.song().transport.playback_pos_beats
3297-  -> [number, 0-song_end_beats]
--
3300:renoise.song().transport.edit_pos
3301-  -> [renoise.SongPos object]
3302:renoise.song().transport.edit_pos_beats
3303-  -> [number, 0-sequence_length]
--
3306:renoise.song().transport.song_length
3307-  -> [read-only, SongPos]
3308:renoise.song().transport.song_length_beats
3309-  -> [read-only, number]
--
3312:renoise.song().transport.loop_start
3313-  -> [read-only, SongPos]
3314:renoise.song().transport.loop_end
3315-  -> [read-only, SongPos]
3316:renoise.song().transport.loop_range[]
3317-  -> [array of two renoise.SongPos objects]
--
3319:renoise.song().transport.loop_start_beats
3320-  -> [read-only, number within 0-song_end_beats]
3321:renoise.song().transport.loop_end_beats
3322-  -> [read-only, number within 0-song_end_beats]
3323:renoise.song().transport.loop_range_beats[]
3324-  -> [array of two numbers, 0-song_end_beats]
--
3326:renoise.song().transport.loop_sequence_start
3327-  -> [read-only, 0 or 1-sequence_length]
3328:renoise.song().transport.loop_sequence_end
3329-  -> [read-only, 0 or 1-sequence_length]
3330:renoise.song().transport.loop_sequence_range[]
3331-  -> [array of two numbers, 0 or 1-sequence_length or empty to disable]
--
3333:renoise.song().transport.loop_pattern, _observable
3334-  -> [boolean]
--
3336:renoise.song().transport.loop_block_enabled
3337-  -> [boolean]
3338:renoise.song().transport.loop_block_start_pos
3339-  -> [read-only, renoise.SongPos object]
3340:renoise.song().transport.loop_block_range_coeff
3341-  -> [number, 2-16]
--
3344:renoise.song().transport.edit_mode, _observable
3345-  -> [boolean]
3346:renoise.song().transport.edit_step, _observable
3347-  -> [number, 0-64]
3348:renoise.song().transport.octave, _observable
3349-  -> [number, 0-8]
--
3352:renoise.song().transport.metronome_enabled, _observable
3353-  -> [boolean]
3354:renoise.song().transport.metronome_beats_per_bar, _observable
3355-  -> [1-16]
3356:renoise.song().transport.metronome_lines_per_beat, _observable
3357-  -> [number, 1-256 or 0 = songs current LPB]
--
3360:renoise.song().transport.metronome_precount_enabled, _observable
3361-  -> [boolean]
3362:renoise.song().transport.metronome_precount_bars, _observable
3363-  -> [number, 1-4]
--
3367:renoise.song().transport.record_quantize_enabled, _observable
3368-  -> [boolean]
3369:renoise.song().transport.record_quantize_lines, _observable
3370-  -> [number, 1-32]
--
3373:renoise.song().transport.record_parameter_mode, _observable
3374-  -> [enum = RECORD_PARAMETER_MODE]
--
3377:renoise.song().transport.follow_player, _observable
3378-  -> [boolean]
3379:renoise.song().transport.wrapped_pattern_edit, _observable
3380-  -> [boolean]
3381:renoise.song().transport.single_track_edit_mode, _observable
3382-  -> [boolean]
--
3385:renoise.song().transport.groove_enabled, _observable
3386-  -> [boolean]
3387:renoise.song().transport.groove_amounts[]
3388-  -> [array of numbers, 0.0-1.0]
--
3391:renoise.song().transport.groove_assignment_observable
3392-  -> [renoise.Observable object]
--
3395:-- To convert to dB:   dB = math.lin2db(renoise.song().transport.track_headroom)
3396:-- To convert from dB: renoise.song().transport.track_headroom = math.db2lin(dB)
3397:renoise.song().transport.track_headroom, _observable
3398-  -> [number, math.db2lin(-12)-math.db2lin(0)]  
--
3402:renoise.song().transport.keyboard_velocity_enabled, _observable
3403-  -> [boolean] 
3404:renoise.song().transport.keyboard_velocity, _observable
3405-  -> [number, 0-127]  

i could use any of this, and proceed from there. this new format, i don’t understand what it is, it’s probably great for developers who understand… i guess context or something? but i don’t know how to go from this:

>>> renoise.Transport:start_sample_recording()
*** no static 'start_sample_recording' in class 'Transport'
*** stack traceback:
***   [C]: in function '__index'
***   [string "renoise.Transport:start_sample_recording()"]:1: in main chunk

to something else. like, what’s the rosetta key here? how do i get back to “full lines”?

@unless do you know how to solve this?

The Lua LS documentation is primarily a definition of the Lua Language Server, so it may be difficult to read. However, they are also not intended for reading. There’s no real point in reading an API definition like a manual.

Use, read and search in

https://renoise.github.io/xrnx/

instead. There are also a few new guides there.

2 Likes

Not sure what context you mean here, you’d call that method the same way as before, you’d first get a reference to the Transport instance by renoise.song().transport then call the method that you are looking at like renoise.song().transport:start_sample_recording().

The new docs are structured in a way that say “there is a class named Transport, here are all its properties and methods…” while the old format was repeating “this is how you get the song, get the transport on it, then call this method”.

But as taktik said, the main point is to set up the LuaLSP for your editor (we did this for Sublime before IIRC, does that no longer work for you?), then you can get autocomplete and “go to definition” from your code instead of having to search separately.

thanks for breaking it down. i think i’m gonna need to take the new lua v6.2 and then add all the new stuff to my solution.txt which shows all of them “fully” instead of separating by classes. now i have the description i can go with, i think i can make short work of getting the desired result (lua 6.1 formatting with lua 6.2 updates, for git grepping) :slight_smile:

Thanks, that image and links should be fixed now.

2 Likes