Linked Patternblocks
- Dominant language
- C++
- Stars
- 10.4k
- Forks
- 1.3k
- Avg merge
- 2d 13h
- Merged PRs (30d)
- 7
Description
I have been using LMMS for a few days now and I really like it.
That said, my first contact with music making software was way back with Music2000 on PSX.
It's pretty much cheap gaming console LMMS without a single synth and just a ton of kinda LQ samples, but they had to fit all that onto a normal CD and then into the tiny memory of the console so that's understandable.
Anyways, Music2000 had a really nice way of handling it's pattern blocks which was that by default blocks were linked, which also removed it's need for LMMS beat line thingy.
So for example you'd made a simple melody 2 measures long and copied that all over where you wanted that to play.
The difference to LMMS was with that that you could edit any of these blocks and all others would reflect that change because they were essentially linked copys of that one pattern.
That's something I'm missing in LMMS, there is makes independent copies by default and when you change one you have to delete ALL others and copy the changed one over anew : (
So I was thinking about how the linked behaviour could be best added into LMMS, it could in theory also replace the beat editor, but wouldn't have to.
In Music2000 were all blocks colored to reflect whenever or not they were the same pattern.
If you were to make an independent copy of a pattern you'd clone it (which is the same in LMMS) and you'd get a new instance of the pattern that's no longer linked to the others and can be edited without affecting the others, and this one would have a different color to reflect that.
https://thump-images.vice.com/images/2015/04/13/was-music-2000-the-sickest-bit-of-software-ever-body-image-1428929535.png
The first row of blocks has up to 2 notes playing at once, the rows in M2k were actually the PSX's sound channels so only one per channel was doable, and 4 measures long, repeated 3 times.
The 2nd row has up to 3 notes playing at once and is also repeated 3 times but the 4th is a different color, so it's likely a clone that was changed a little.
I think you could name blocks and change the icon, which the game picked by default based on the assigned sample used, or something like that.
(The one per channel limitation also took care of an issue I personally have with LMMS which is the ability to stack notes infinitely on the same spot, but having no indication that that was done until you get to the note and your ears explode because it played a dozen at once simultanously x.x)
In LMMS there's a partial repeat functionality for pattern blocks, but it's limited to the beat line.
When you take a beat block it will repeat the pattern and indicate how long the actual pattern is with notches in the block, that's very nicely done.
So for starters could that be added to normal patterns too because the same stretching functionality does nothing at all there.
The next step would require adding the linked blocks which would be done by copying, which currently pastes a cloned independent copy instead.
Cloning would then need to be added to the context menu and would simply make that block independent.
As for the ability to tell them apart, I'd suggest going for colors too but there are finite amounts until the difference becomes too small, so maybe give them also a small number in a corner so that for example red 4 and red 12 would easily differentiated?
So far so good, but there's now the possibility for a memory leak due to having patterns that are currently not placed anywhere on the board.
M2k handled that by having a list of all patterns currently in memory and how often they were used (I think) with a seperate option to do a clean up which removed all patterns not used anywhere.
That list also allowed to just paste a block which for example was useful to not have to scroll all the way to the beginning of the song just to grab a piece and use it at the end again.
The options for LMMS would either be to do the same, or just auto clean patterns no longer used anywhere. Might do the latter while the UI for the former is being made?
This is obviously no simple task but I'd love to see it being implemented at some point and for the beginning just being discussed about.
Contributor guide
No contributing guide indexed for this repository
Research direction
No files, tests, or entry points are named. Start by locating LMMS's pattern and beat-line copy and stretching implementation, then clarify the design for linked versus cloned blocks and cleanup of unused patterns. Done would require an agreed scope and tests for the resulting editing behavior.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- desktop
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100