Pattern Matrix Rethink

didn’t read complete thread, but I like the pattern matrix just fine the way it is now.

Whatever happened to that zooming animation.gif? (Made by Danoise, I think?) I’d like to see that turned into reality!

Ghost clips is a feature of any standard sequencer. It simply makes a lot of sense that Renoise should offer this too. As mentioned above, the first reason is that it’s much faster to try out sequence combinations with than copying/pasting data. The second reason is that the data is shared, so you modify all instances of the clip at the same time.

To me, this is something very important. When I first downloaded the new Renoise version with the pattern matrix, I was very surprised that Renoise couldn’t do this, since I thought it was obviously the whole purpose of the feature.

Long thread! I missed it! Haven’t read everything yet! But! Just wanna throw the basic idea out:

The main difference when arranging in Renoise compared to most other DAWs, is that where Renoise ‘divides’ the song in patterns, most other DAWs work with ‘lines’ that simply INDICATE the end of a bar. Renoise ‘forces’ you to think in patterns, as if sounds placed in a pattern are not allowed to cross the equivalent ‘lines’ of other DAWs. If Renoise’s pattern endings and beginnings were to be a mere indication, instead of an obligation, and a song in Renoise would actually be just one BIG ASS pattern, where the pattern-length would become block-size, I think Renoise would overcome the biggest obstacle.

i really like the patternblocks. helps me visualize the song. and when i want to have something overlap, i can do that easily as well, as the block-system does not limit the user in any way as it currently is. essentially, it is just one big-ass pattern, only the view divides it into blocks. but if you play it, it does not behave as blocks, it just plays on and on.

so, i’m not sure i completely agree with you…

Okay, assume I want to move every hi-hat in track x down 8 lines. Or what if I want my filter automation to overlap 16 patterns. These are very simple, basic things to do, yet require quit some repetitive work in Renoise. It would help if I could select/copy/paste/move/whatever columns over the entire song, instead of repeating a certain action in every pattern over the whole song, very much minding notes that need to MANUALLY be entered into the next pattern, instead of where in any other DAW, notes would remain in their relative place. It’s just the way Renoise works, I’m sure and hey, there’s no need to defend Renoise against me. But these ARE things that bother me, whereas most other DAWs would treat the melody in a track as a whole, Renoise simply cuts it in patterns, pattern matrix or not.

I agree, linked patterns would only makes it tedious.

how about having one ‘scatch’ PM and one ‘song’ PM, that way you could use the scatch matrix to try out ‘scenes’ and generally make a mess and have fun :D because you are working with cloned stuff it doest matter…

then when you have a scene that works you would copy it to the ‘song’ PM aka ‘arranger’… one thing that would be needed is to have automation and note clips being independent in this idea.

I have an idea.

In Photoshop, you can link layers together to form a temporary group. For this group, if you move one layer, you move the others too. You can unlink when you’re done, or simply switch to something irrelevant outside the group. You can even go back to a layer in the group and find your links are still preserved.

In Renoise, you could link blocks together in the Matrix to form a temporary group. Perform edits to one block, and all your edits are mirrored across all the other blocks in the group. It’s like having clones, but better, because you can change them all at once yet they can all have different contents. And like in Photoshop, the other linked items in the group would be highlighted, so you know what you’re changing.

Essentially, that’s all that’s absolutely needed. (But things could get pretty wild if blocks were allowed lengths independent of their containing patterns… :yeah:)

EDIT: Though I have used the terms “Photoshop layers” and even “onion-skin” in this description, I do not use these concepts in the same manner as conner_bw has.

  • The concept borrowed from Photoshop layers is the ‘linking’ (little ‘piece of chain’ icon) concept - The concept borrowed from Flash’s onion-skinning is applied to the Pattern Editor, not the Pattern Matrix.
    There’s very little “magic” going on; it’s mainly about Renoise performing your edits in N-plicate to all linked blocks as-you-go.

This concept is limited by the current pattern paradigm, so while it fits Renoise like a glove, it’s still friggin’ laborious for many arrangement tasks e.g. offsetting a riff by half-a-pattern.

Why is “linked blocks” cool?

  • It fits right in with the current Matrix - The basic concept can be implemented fairly simply - It has many of the benefits of ‘ghosting’ / ‘cloning’ / ‘references’ / ‘clips’, minus one of their worst drawbacks… - …You are never “locked out of” note-by-note editing, the hallmark of trackers. Switch between single-edit detailing and across-the-board batch edits fluidly.

Warning, the stuff below is my brain going into overdrive. If you think reading the “fleshed-out” version of ‘linked blocks’ will prove a major turn-off to the idea above, stop reading now :)

New Matrix features

  • Per-block ‘linked’ indicator
    Just like in Photoshop, but for Renoise Pattern Matrix blocks.

  • Overwrite/add mode switch
    (Warning: This feature may confuse users! Possibly, do not implement and just use Overwrite mode.) - Overwrite mode (one block => one group)
    Works exactly like linking Photoshop layers. Simplest to work with.
    As a result, blocks tend to switch among groups a lot, and this mode is recommended for initial song work.

  • Add mode (one block => many groups)
    Works more like ‘traditional’ group membership. More powerful but more complex.
    As a result, groups tend to last much longer as you work. This mode is recommended when your song is in its later stages, or if you prefer composing in a more structured manner.

  • If you click on a block which is in several groups, you’ll get a context menu where you can select which group to work with - If you double-click on a block, you ignore groups/links altogether, because you just turned on Private mode.
    Linked blocks are ignored while in Private mode — see New Pattern Editor features below.

“N more linked” indicator at the top/bottom of the Matrix
To show you where any off-screen linked blocks might be

New matrix-wide / per-selection commands

  • Link all identical blocks within selection
    Great way to get started immediately using linked blocks on existing projects

  • Unlink all within selection
    Great way to get back under your security blanket :)

New per-block commands

  • Link all identical blocks - Same length only
    Blocks of different lengths won’t be linked - Different lengths allowed
    Blocks of different lengths will be linked if the shorter block’s contents = the beginning of the longer block’s contents

Link all similar blocks
Dialog or submenu: A slider for ‘similarity’, set against a histogram of “% different”, and a checkbox for “Different lengths allowed”

Unlink all in this group
“Make all unique”, sort of.
New Pattern Editor features

  • Private mode on/off
    Pretend there’s no linked blocks while this is turned on - there’s some intimate edits being made here :)

  • Tile mode on/off - Used with Linked Blocks
    Originally, this feature was intended for addressing how Renoise handled edits on linked blocks of varying lengths - edits in shorter blocks would be repeated (“tiled”) in longer blocks.

  • Used with Block Loop
    But, what a great idea to use this with “Block loop” too! So, you can actually use this with “Block Loop” to pretend the current block is just a few lines long, tile the edits across it (sure beats Ctrl+P for speed)…

  • Used with both!
    …then tile that across all the longer linked blocks song-wide.

  • Special cases - Locked area is obstructing a tiled edit
    See the rules under Lock selected area from indirect edits, below. - Paste, move
    Will wrap-around to the beginning of the current block before mirroring your edit to any linked blocks.

  • Insertion
    Insertion at line 0 would, in the 16-line example, do the following for all linked blocks: an insertion on line 0, then delete line 16 (and shift up the lines below), then do another insertion at line 16, delete and shift-up at line 32… etc. Thus, inserting 16 times from line 0 would effectively clear all linked blocks, no matter how long each was.

New navigation / view commands:

  • ‘Onion-skin’ linked blocks’ patterns
    All linked blocks (and the patterns containing them) overlapped in the Pattern Editor at once, transparently overlaid on top of one another. Have confidence your linked edits aren’t touching anything they shouldn’t be.

  • Go to previous/next linked block
    Jump around quickly to ‘verify’ your edits… if you think you need to.

  • Lock selected area from indirect edits
    Preserves your careful detailing, despite your decision to make massive sweeping changes to everything. If you see locked areas while you have onion-skin turned on, you can be really haphazard with your edits, no damage possible. - Special cases - Direct edit
    Allowed. This is the only edit allowed in a locked area, because Renoise never disobeys a direct order!

  • Linked block
    No

  • Tiled edit
    No

  • Move
    Move will not affect locked areas, but it can pick up content from them. - Copy
    Copy will pick up content from within locked areas - Paste
    Paste will not affect locked areas, but adjacent areas may receive a partial paste

  • Insert
    After insertion, the locked area remains untouched. Also, the last line of the locked area is not repeated – it is almost certainly an undesirable side-effect. So, insertion from above a locked area pushes the line immediately before it into the abyss.

    New view to go somewhere if Add Mode is supported: View All Groups of Linked Blocks

  • Per-group commands - Colour
    Override track colours with per-group colours.

  • Label
    One for hi-hat pattern 1, another for hi-hat pattern 2… Hey that’s sort of like having clips, and yet, not really…

Some mock-ups maybe??? It’ was really hard to follow your post, martyfmelb :unsure: Right now I have no glue what you’re talking about.
And this photoshop example confused me even more because I’m not so familiar with it.

Ah, yeah, sorry, kinda assumed PS familiarity :) n.b. I use the word “block” to mean “a track within a pattern” (some might use the same word for other meanings – FT2’s “mark block” vs Renoise’s existing “Block Loop” for example).

Basically, you “tick” some blocks in the Pattern Matrix, which you want to edit in the exact same way as the block you are currently editing in the Pattern Editor. Those blocks are said to be “linked” to the current block.

If you delete lines 48-63 in the current block, all the linked blocks will also have lines 48-63 deleted. If you type a note at line 16, it will copy across to the other linked blocks, etc…

This is some of the behaviour you would get with clips, but retains a lot more ‘directness’. There is a lot less “oops” factor, because you can toggle the links on-and-off at a whim. With a clip, there is “make unique” to try to achieve this, but you’re stuffed if you are looking for the “make back into the original clip but keep this change I made” button :)

EDIT: No time for mockups at the moment, it’s midnight and I’ve got a 9am start tomorrow :-\

Although may not go all the way to a full arranger how about something like this.

Terrible name but all I can think of right now is Sub-Songs.

Each Sub-Song would look exactly like Renoise does at the moment, including the Sequencer and Matrix.

Each Sub-Song would share the main Instrument pool.

Each would have its own Tracks and Sends, although Master would be visible on all for adding master commands.

Timeline would be shared, so every Sub-Song would start playing at the same point and progress through the Sequencer at the same speed.

There would be an extra Arranger overview, which operates much like the current Matrix, but allows you to see the Matrix from multiple Sub-Songs.

This would allow Track Grouping by having Sub-Songs for different parts (although may make it hard to view your Bass alongside your Lead without further tweaking, for example.)

More importantly it would allow patterns/tracks of any arbitrary length to be played alongside each other, allowing polyrhytms, 4/4 drums, 3/4 bass and 7/8 hihats together without using strange length of patterns.

OK maybe not that refined just typing as I think, but something similar could work. Especially if you could also view tracks from other subs together.

yes, you are right about that. i just think (and i may have misunderstood you) that your suggestion of a ‘sorta big continuous pattern’ is not such a great one. i think that what you want to be able to do (and i want to be able to do as well, as your examples created vivid recollections of tedious repetitive Renoise actions in my mind), is best accomplished through the system of clips, as discussed before. that way, you would have both: patternblocks and continuous/parallel data.
but, as i said, maybe i misunderstood you and that is just what you meant.

this is a great idea. i love it. it’s simple and it works, without the need for an intricate clip-system. however, thinking about this, it may not work as well for people wanting to do irregular patterns and such… that’s where we are back at the clips-system, or the onion-skinning or something like that.

How about using track groups to organize matrix view?

  1. individual tracks are grouped/divided into track groups (each new song starts with one group holding all tracks)
  2. each track group has it’s own patterns (clips)
  3. matrix (actually arranger in this case) shows only track group patterns (clips), no individual tracks (but they have thumbnails of contents just like now)
  4. pattern editor shows track group currently being edited, and optionally patterns at the sides from other track groups (for timing purposes)

In addition:

  • individual tracks still have individual sends (maybe track groups should also have groups sends, processed after individual sends?)
  • pattern editor has user-definable grid instead of fixed lines and notes can also be between grid lines (visually, not as with current delay column)
  • this makes pattern editor zoomable for detail work and allows almost indefinitely accurate automation (drawable envelopes or continuous midi controller data tracks alongside note track - all nicely organized under track groups)

Nice point about this is that if user uses only one track group it works exactly as traditional tracker, except that patterns can be freely positioned on vertical arranger (looks like current matrix). It’s also backwards compatible as current matrix songs can be opened exactly like this.

But it’s also very flexible as user can freely decide what track groups are made of (typically one track group per instrument, but traditional tracker could use them to keep multiple versions of one song, soloing track groups to compare between versions or anything they like).

I think this idea is already present in this or earlier threads.

But what I think would be great is if we could rethink the track/pattern symbiosis :)
So instead of “locking” tracks to a pattern, a pattern is instead a representation of arranged tracks.
Maybe a better word for track in this idea is “sub-pattern”.
So the “pattern editor” is realy a “floating” view/representation of arranged sub-patterns/tracks.

In addition to the linked blocks concept above, this would complete the picture, in an easy-to-manage, learning-curve-flattening, “one-step-at-a-time” way.

Give blocks ‘offset’

If blocks’ starting time could be detached from the pattern it’s supposed to be “inside of”… then they could act more like they are “anchored to”/“parented to” the pattern, like in MS Word how images move up and down with paragraphs. It could be done with drag-n-drop in the Pattern Matrix, or a -/+ numeric spinner in the Pattern Editor inside each track header, or even a special ‘grippy’ in the Pattern Editor. (The offset could be defined in “beats” not “milliseconds” if changes in LPB/tempo are difficult to program around.)

Give blocks ‘LPB’ / ‘tempo’ multipliers
Perhaps, we could allow a tempo/LPB multiplier for these offset blocks. Then let’s say you 2x the LPB. In the Pattern Editor, that block would compress to 50% vertically. (How this N% height is rendered is up to the UX expert.) When you tab into this block in the Pattern Editor, it expanded to 100% vertically and everything else expands by the same percentage, hopefully with some brief animation between the “zoom levels”.

Give blocks a few more things, and you get “clips”
With these two additions in place, “clips” in their entirety become a series of evolutionary steps:
.

  • Blocks that span across a few tracks. We could call it block grouping. Select some blocks, hit Ctrl+G, they’re grouped. They link as one entity, drag-drop as one entity… play from an instrument slot as one entity (see further down). Further, grouping blocks downwards could merge columns of blocks into single, long blocks.
    . - Blocks which are proper clones. Just add a context menu item, “Paste to all linked blocks”. From that point you have clone behaviour until you unlink later. It doesn’t really matter if this is implemented as many pointers to one actual block, or just the original ‘linked blocks’ functionality of mirroring edits until you unlink. The effect is identical.
    . - Instruments whose ‘samples’ are blocks (or block groups). This is the biggest step of all: this is the first time there is pattern information which might not be attached to any pattern at all. Perhaps these “samples” list-items could have a special appearance in that part of the UI - rounded-corners outlines, perhaps.

A possible UI could be friggin’ cute: your block/block-group pattern data is rotated 90° CCW and stretched/spaced-out to fit the sample editor. Multiple tracks in a group look like stereo (or more) channels.

Allow basic edits: select, delete, insert, silence… etc. like for a sample. Double-click your “sample” to edit it in the pattern editor. Things like the play-button and pattern navigation are hijacked for this purpose until you “escape out” to a normal pattern using the Pattern Matrix/Arranger (or hit Esc twice quickly like a double-click?).

It should also be noted: DSP’s come along for the ride once you make an instrument from a block. The original, pattern-attached block can be erased or left-behind, but not converted into a single note C-4 because the DSP’s would effectively be applied twice, which is Not A Good Thing™.

Oh my god, it’s full of stars.

Before I go on, +1 for individual lengths for each track or FB00 for each track, or "But things could get pretty wild if blocks were allowed lengths independent of their containing patterns… :yeah: "

Also +1 for a global data storage UI to observe, measure, and combine potential clips, maybe even a statistic read out.

  • in relation to linking *
    dblue’s Fractional Notes, in my limited imaginative grasp and knowledge, vaguely solves having individual tempos per track.

The two current problems I’m encountering are

  1. Access of all the possible resolutions after choosing polyrhythms or polytempo for the base beat/BMP/tempo.

For example, I have a simple 3 beat 16 LPB loop at 70 BPM. I use the Fractional tool to get the following polyrhythm for each sequential beat [1:7, 1:5, 1:3]. I have access to 64th notes on base beat “1” but I have limited access to “7”, “5”, and “3”. I’m always asking myself before laying any ground work, what is the highest resolution I want to work with for a particular tempo AND its attached polyrhythms. I’d like to speed up the exploration process, combine what I find to be musical with other “clips”, and then later save the basic spine of it for later explorations and use. Currently I have a dedicated track for Fractional Notes as my editable generative “clip” track.

  1. The actual tempo of above examples “7”, “5”, “3”.

Although I could use the Tap Tempo tool, I prefer the tempo be calculated and accurate if using Renoise’s fractional tempo or maybe link Tap Tempo to the pattern editor, but if that isn’t possible, there are existing tools to make it musically possible now.

  • suggestion for linking *
    Currently there is rotation for automation and Taktik’s Pattern Rotate tool. It would be great if both these tools were optionally linkable. Although its quite possible now, rotating all or selected automations one by one track by track is the tedious part.


The topic is called “Pattern Matrix Rethink” right?

Well, I haven’t read all the thread but here is an old mock-up that I made a while ago, which hopefully is suitable for this topic (or else it would be considered as spamming :confused: )

+1 for ableton’ish behavior!

When the matrix was first introduced I thought it worked this way :)

NO.

I really like the current Pattern Matrix. Thought it might be interesting to share how I use it:

  • I’ll start out (like everyone does) with a few sketch patterns playing in a loop.
  • Once I’m ready to start arranging the thing into a ‘song’, I add a single new blank pattern underneath the sketches, make it the right length, then clone it.
  • Then clone the resulting 2 empty patterns, and again with 4, 8, 16, 32, 64 etc until there are a shitload of unique, empty patterns.
  • At this point you’ve basically got the same expanse of empty timeline as you have in any other DAW, and you can CTRL+drag parts of your sketch patterns out onto the silence and play around with arrangements.

I’m sure many other people use this approach too, so I’m inclined to say there’s no need for ‘patterns’ anymore, I just want an infinite blank space where track blocks can be moved around. If that’s what Renoise becomes, then we’d also need the following:

  • Alias track blocks
  • Variable length track blocks
  • Separate blocks for track automation and note data