LMMS / LMMS/lmms

Tracker view for Piano Roll

Open
#4,314 27 comments 21 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement
Dominant language
C++
Stars
10.4k
Forks
1.3k
Avg merge
2d 13h
Merged PRs (30d)
7

Description

Every now and then for the past 10 years I'm looking for a (modern) tracker. I just can't get used to the horizontal visual style of composing melodies. In my experience, it's easier to be creative in a tracker.

LMMS has a beautiful sound engine and awesome instruments/synths. Every other thing is well designed. The biggest leap forward right now would be a Tracker mode for Piano Roll.

I have made some attempts in the past, but C++ just isn't my forte, although it is what makes LMMS so strong.

_[SchismTracker](https://github.com/schismtracker/schismtracker), an Impulse Tracker clone_
![image](https://user-images.githubusercontent.com/1702193/39094176-cff7e8da-462b-11e8-8465-50969e3d0972.png)

There are some limitations of course in the structure of a Tracker view compared to Piano Roll.

The most obvious problem is that note based technology doesn't lend itself for all the sample-based functionality like sample cutoff and offsets, at least not in a way that could realistically fit in the LMMS data structure without reimplementing things. The (ancient) _Impulse Tracker_ midi-only clone _[zTracker](https://github.com/cmicali/ztracker/tree/master/src)_ solved this by simply removing all sample-based features, and implementing note-off rather than cut-off.

The second problem is that trackers store the position of a note inside a pattern on a specific channel, and LMMS has no concept of channels in the same way, as the entire pattern could be one channel. The piano roll is a "bag of notes" with no concept of on what channel the note was stored. A solution would be to allow one instrument per pattern, like the piano roll. Although this would only fix the problem of mixed instruments that would make the pattern incompatible with a piano roll, the spatial placement of notes over channels is still incompatible.

For that reason, it could make sense to have a Tracker View that is _backward compatible_ with (can be converted to) a Piano Roll, but not the other way around. This would also solve the problem that Piano Roll has tick based precision, while a Tracker view has only row-based precision (depending on speed/tempo), for things like volume corrections. This is similar to the Bassline Editor compared to the Piano Roll.

I.e. a non-Piano-Roll-bassline from the Bassline Editor can be converted to a Tracker View. A Tracker View pattern can be converted to a Piano Roll. Both steps increase the precision, so there is no converting back.

Bassline Editor < Tracker View < Piano Roll

Note that this is not a complete Tracker, just a Tracker-like alternative to the Piano Roll. I'm sure a lot of creative folks from a certain era would love this.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Begin by locating the existing Piano Roll and Bassline Editor implementations and understanding their data models and conversion behavior. Done would require a scoped Tracker View design that addresses row-based notes, channels, sample-based limitations, and conversion to Piano Roll.

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
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.