yeah, that would save a lot of pattern slots.
I would also like to have one of those barloops thank you!
yeah, that would save a lot of pattern slots.
I would also like to have one of those barloops thank you!
Another vote for a bar-loop command; this would be very useful.
A nice and flexible way to implement this would be a command that jumps back x
pattern-starts, for y
repeats.
If the command were ZExy
, then ZE03
on the last line of a pattern would mean “jump back to the start of this pattern for the first three times this marker is encountered,” causing Renoise to play that pattern a total of 4 times, before continuing. ZE17
would jump back to the start of the previous pattern, playing a 2-pattern loop for a total of 8 times.
Of course, if you put that somewhere in the middle of the pattern instead of the end, it wouldn’t give an integer number of pattern-repeats, and that would enable other kinds of messing around. E.g, you could repeat the previous pattern and the first two bars of this one twice, then get three bars through this one on the third repeat, before finally playing all the way through.
This does limit you to start-of-pattern and to 16 repeats of a 16-pattern sequence, but there’s only so much you can pack into this format. Besides, even that much of a multiplier would be a significant boost.
yup, i live with SBx
in ImpulseTracker / SchismTracker and would prefer to have it in Renoise too, for sure.
Looking forward to seeing it implemented.
You have to look really far forward then
Returning to this threads in hopes to revive the idea of possibly integrating the bar-loop fx command in the future … Or at the very least, maybe implement some newer possibly more unique or even unconventional fx commands for users to play with in the future.
Okay,
Asking for new pattern effect commands may not get anywhere. So, possibly, could the API be given the ability to modify or create pattern effect commands? That way we can try our hand at creating new effect commands or resurrecting old ones.
we’re all waiting for the api to allow for scripting new effect commands.
so far no announcement that it’s on the horizon.
I find this topic very interesting.
We can currently program any new effect, but not in real time, but with a notifier that has a certain delay (a few milliseconds).
As long as the effect accepts a small delay, it can be done. However, it requires the installation of a Lua tool and that it is running (not a notifier or timer), obviously.
A particularly effective case is to dump only that new effect parameter into the master track, and thus analyze only this track by the notifier.
This is how the two new (ZMxx, ZPxx) effect parameters of Piano Roll Studio work to control the metronome (Renoise does not yet have effect parameters to control the metronome in real time, assuming that a song will always use the same beat/rhythm, when this does not have to be the case).
so are you saying that it would be feasible to do SBx in Master, i.e. make counters
i.e. like this
--- SB0
---
---
--- SB3
and the content between SB0 and SB3 would be repeated 4 times and then move to the next row?
also i see you call it a “Installation of a LUA tool” - but what’s the name of it?
^^^ that part
Yes, can be any effect column you set, but as I said before, it’s not ideal, because you need to:
Ideally, Renoise would have this effect natively, which is strange that it doesn’t.
Yes, you can create a timer that pre-analyzes the entire desired effect column to set the start and end of the loop that is consecutive and acts on the playback of the lines (it would only work if there is a SB00 before a SB0x). With a counter you work out the repeat number based on the effect. You can use 00 for the start and 03 for the repeat number, so that section will play 4 times (3 times repeated). Once this is done you reset the counter during the pattern playback, and you always reset the counter when the pattern changes (pattern notifier).
This way you can use multiple repeat loops in the same pattern.
I meant that you need to create a tool that is “latent” during song playback. This situation is not ideal and I don’t know if it will work for song rendering (I haven’t tested it).
But basically, you can invent any effect parameter and run any function, and this can be “certainly dangerous.” Pattern effects and automation are tremendously powerful.
thanks for breaking it down. i think the only thing that i’m missing now is the comprehension of how to jump to a row, while being in the pattern. i’m inching towards renoise.song().selected_line_index
renoise.song().transport:
Here are multiple funtions to “transport”. See:
-------- Functions
-- Panic.
renoise.song().transport:panic()
-- Mode: enum = PLAYMODE
renoise.song().transport:start(mode)
-- start playing the currently edited pattern at the given line offset
renoise.song().transport:start_at(line)
-- start playing a the given renoise.SongPos (sequence pos and line)
renoise.song().transport:start_at(song_pos)
-- stop playing. when already stopped this just stops all playing notes.
renoise.song().transport:stop()
-- Immediately start playing at the given sequence position.
renoise.song().transport:trigger_sequence(sequence_pos)
-- Append the sequence to the scheduled sequence list. Scheduled playback
-- positions will apply as soon as the currently playing pattern play to end.
renoise.song().transport:add_scheduled_sequence(sequence_pos)
-- Replace the scheduled sequence list with the given sequence.
renoise.song().transport:set_scheduled_sequence(sequence_pos)
-- Move the block loop one segment forwards, when possible.
renoise.song().transport:loop_block_move_forwards()
-- Move the block loop one segment backwards, when possible.
renoise.song().transport:loop_block_move_backwards()
Below you are multiple “properties”. See:
-------- Properties
-- Playing.
renoise.song().transport.playing, _observable
-> [boolean]
-- Old school speed or new LPB timing used?
-- With TIMING_MODEL_SPEED, tpl is used as speed factor. The lpb property
-- is unused then. With TIMING_MODEL_LPB, tpl is used as event rate for effects
-- only and lpb defines relationship between pattern lines and beats.
renoise.song().transport.timing_model
-> [read-only, enum = TIMING_MODEL]
-- BPM, LPB, and TPL.
renoise.song().transport.bpm, _observable
-> [number, 32-999]
renoise.song().transport.lpb, _observable
-> [number, 1-256]
renoise.song().transport.tpl, _observable
-> [number, 1-16]
-- Playback position.
renoise.song().transport.playback_pos
-> [renoise.SongPos object]
renoise.song().transport.playback_pos_beats
-> [number, 0-song_end_beats]
-- Edit position.
renoise.song().transport.edit_pos
-> [renoise.SongPos object]
renoise.song().transport.edit_pos_beats
-> [number, 0-sequence_length]
-- Song length.
renoise.song().transport.song_length
-> [read-only, SongPos]
renoise.song().transport.song_length_beats
-> [read-only, number]
-- Loop.
renoise.song().transport.loop_start
-> [read-only, SongPos]
renoise.song().transport.loop_end
-> [read-only, SongPos]
renoise.song().transport.loop_range[]
-> [array of two renoise.SongPos objects]
renoise.song().transport.loop_start_beats
-> [read-only, number within 0-song_end_beats]
renoise.song().transport.loop_end_beats
-> [read-only, number within 0-song_end_beats]
renoise.song().transport.loop_range_beats[]
-> [array of two numbers, 0-song_end_beats]
renoise.song().transport.loop_sequence_start
-> [read-only, 0 or 1-sequence_length]
renoise.song().transport.loop_sequence_end
-> [read-only, 0 or 1-sequence_length]
renoise.song().transport.loop_sequence_range[]
-> [array of two numbers, 0 or 1-sequence_length or empty to disable]
renoise.song().transport.loop_pattern, _observable
-> [boolean]
renoise.song().transport.loop_block_enabled
-> [boolean]
renoise.song().transport.loop_block_start_pos
-> [read-only, renoise.SongPos object]
renoise.song().transport.loop_block_range_coeff
-> [number, 2-16]
Then, focus your attention on using this:
renoise.song().transport:start_at(line)
-- start playing the currently edited pattern at the given line offset
renoise.song().transport:start_at(line)
-- start playing a the given renoise.SongPos (sequence pos and line)
renoise.song().transport:start_at(song_pos)
-- Loop.
renoise.song().transport.loop_start
-> [read-only, SongPos]
renoise.song().transport.loop_end
-> [read-only, SongPos]
renoise.song().transport.loop_range[]
-> [array of two renoise.SongPos objects]
You can play with all of this. But it’s very easy with: .loop_range[]
Whenever you have a question, ask yourself where it is in the documentation. Most of the things that are asked in the forums have already been thought out years ago and they are covered. It’s just a matter of experimenting and getting to know the documentation (although it may change in the future).
it’s not great yet, but it does seem to works somehow.
gotta experiment more.
can you test if rendering selection in pattern follows the looping and renders this in a sample?
Same for rendering a song which uses this
I would Doubt that 100%. I would tend to think this is only for live use
Oh nah … I think SBX was renderable. That’s friccin awesome though. fantastic work.
In impulsetracker sure. Ill need to see what happens if i try to render. It will probably not want to try to do that. This is fighting against renoise to get it to work so the trustworthiness of it working for rendering is pretty much 0%
Well the fact that you were able to get it to work at all is fantastic enough ….
If I remember correctly back in the days there was a script which would play the pattern in reverse, trigger the playback in the pattern from bottom to the top and this rendered pattern selection without issues.