LMMS / LMMS/lmms

Events Track

Open
#2,882 3 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

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

Description

This is about a new Track to be put in Song Editor, which is capable of doing some things you can only do by mouse and you can't currently automate.

I think this feature would be not really hard to program, because it would re-use a lot of funcions that are already working for mouse clicks events, and it could be a potential solution to different problems, like some highly requested features, plus it would allow new ways of music composing.

---

The hard part is here:
The **Events Track** would be really similar to an Instrument Track on the Song Editor.
It's be able to store 128 user-defined events, **accessible throught MIDI-in and Piano-roll**.
(it should not be added to Song Editor by the user, since it's useless to have multiple instances, it should just be shown/minimized in the Sond Editor, eventually)

![events track](https://cloud.githubusercontent.com/assets/6437521/16501370/64ebc33e-3f09-11e6-9ffc-286200a84aeb.png)

It indeed has a kind of piano-roll, the **_"event-roll"_**. It should only have the record button, add/delete/select and cut/copy/paste, then the pianoroll table and the Velocity editor (which will become "**Probability**, chance" editor, 1 to 100%)

![event-roll](https://cloud.githubusercontent.com/assets/6437521/16501404/89696522-3f09-11e6-8002-0507dc20a3b8.png)
Actually, I'd add leave the Velocity editor too (like we now switch from Velocity to Panning) for the BB events, see below.

The events are defined in a list (similar to the FX tab on instruments), accessible via the Events Track window.

![events window](https://cloud.githubusercontent.com/assets/6437521/16501379/6fcf697c-3f09-11e6-89b2-00d7d347088f.png)

Last difficult thing, it would need a handler.

---

Now for the easy and creative things: the kinds of events.

First kind: **play _x_ instrument in BBeditor**

Right now, with mouse clicks, you're able to play a loaded track by clicking the flashing button.
These events would call just the same method.

This will allow to have a drum sampler, mostly wanted for live usage, but also for easier composition.
(moreover, with the "probability" editor in the event-roll, you can have randomized variations)

Second kind: **move loop-point to _x_ position**

The most basic usage would be to move the End-point to a new section, wait for the cursor to enter it, and then move the Start-point.
Having this Event Track, you could control the loop-points with a drumpad such as Push or Launchpad.
In future, this feature could be polished by adding more sophisticated events.

Third event: **move playing cursor to _x_ position**

This one is for randomized compositions (the "probability" in event-roll), and needs to be polished to avoid clicks or un-wanted played notes, so it's just a little harder.

Fourth kind: **link _x_ midi-in to _y_ instrument**

For MIDI drumpad + keyboard live usage.
(of course it would also un-link every other instrument linked to that _x_ midi-in)

Do you agree this would be a worthy addition to LMMS which is not particularly hard to code?
(Unfortunalety I myself lack of indispesable GUI programming knowledge, and I'm yet to understand how note handlers work, but that away, calling existing funcions is the main concept)

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

Start in the Song Editor by reading how Instrument Tracks, piano-roll interactions, MIDI-in handling, and existing mouse-click events are implemented. Trace the existing note handlers and event methods first; the work is done when a single Events Track supports the described event types, editing controls, and event handler 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
Needs clarification
Newbie friendliness
20/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.