MIDI enhancements

Good ideas, proposals, enhancements.
Post Reply
mctom
F8 - Hawthorn
Posts: 26
Joined: Sat Oct 06, 2018 1:19 pm
Location: Gdansk, Poland

MIDI enhancements

Post by mctom » Sun Oct 14, 2018 4:24 pm

I've decided to stuck it all in a single thread since there's a bunch of features I think of, but they're all somehow related to each other.

So first of all: I've got Launchpad Mini I wish to use as a loop controller. I also have a M-Audio keyboard that I'd like to use for recording MIDI sequences and then loop them in Giada. Aside from audio looping of course.

1) First thing first - I think we should consider separating MIDI inputs for control and channels input.
The reason is simple - I don't want to get my "loop control controller" actions captured on my channel. Sure, I could filter out whatever channel Launchpad is using, but I'd rather be able to use Chn1 on my keyboard.
If someone wishes to use a single controller for both, let them be free to pick the same controller in both settings.
The same applies to outputs - Separate lightning output, and channels output, so I can safely send lightning messages back to Launchpad, and feed synths with channels content.

2) MIDI controller shortcuts, or key combos.
I imagine using my Launchpad in a way that a single button means single channel. Pressing a button should start or stop a channel, obvious. However, in order to mute, solo, arm, kill or free a channel, a global function keys would be used.
Now there are two options, both with pros and cons.
a) While holding a function key, press the channel buttons to trigger an action on them. Just like pressing Ctrl+A->C->V to select-copy-paste without even releasing Ctrl key. The drawback is rather complicated volume and speed control, requiring pressing a volume function button, channel button, and operating a knob at the same time.
b) pressing function button while holding desired channel buttons. The pro of this solution is perfectly synced function processing for multiple channels. Also volume and speed control using separate MIDI knobs would be far easier - just turn a knob while holding a channel button. The major drawback of this solution is that the normal loop start/stop action would have to be moved to key-release event, rather than key-press like it is now. That might be unacceptable to some musicians.
I think that this feature could easily live in peace and harmony with currently existing "per channel" MIDI binding.

3) (I'll use word "Chn" for MIDI protocol channel, and "Channel" for Giada channel)...
MIDI Channels should be able to capture and play notes on any Chn. For now, sure, I can capture notes from any MIDI Chn, but then Giada doesn't remember which Chn was it. I think that ideally, Giada's default behavior should be to record anything it catches on its MIDI input, and then repeat it exactly the way it was. Chn filtering on input, or converting all channel contents to a specified Chn on an output, should be optional.
By the way, why is MIDI Channel Output disabled by default? Why would anyone do that? :roll:

4) Lightning output enhancements
I see it this way: If any channels are in solo, all the rest should be dimmed (simple Launchpads have 3 color intensities to pick from), or turn, say, orange. Muted channel should be dimmed itself unconditionally, just like Giada processes both mute and solo applied to the same channel.
For now, Giada sends "playing" lightning message on each beat #1. This essentially means that a single button on Launchpad can either show waiting/playing/stopping/stopped status on a given channel, because "playing" message eventually will overwrite any solo/mute lightning.
To achieve this, I think that:
a) solo should be handled as mute on any other playing channel (probably just like the engine does), or introduce a new event for that purpose, say "playing_inaudible"
b) mute should have higher "priority" than playing. More precisely, the lightning priority should go like this: stopped, stopping/waiting, mute, solo, playing_inaudible, playing.
c) giadamap file should allow more than one message per event (honestly, I just assume it doesn't),
d) all giadamap settings should be optional (I guess they are, but just to be sure..)
e) drop "playing" message on each beat #1? Unless there's any reason to keep it.

5) Giadamap file.
I bragged about it here in greater detail, but seriously, I think this is worth mentioning here. ;) Pre-assigning 64 Channels to 64 Launchpad buttons even before the channels are created sounds like a great convenience to me. I will provide an extended giadamap for Launchpad, don't you worry... :lol:

To wrap up my enormous wishlist, my last wish is for myself to help making it reality.. I have no experience with C++ in particular, I am an AVR ASM junkie, but maybe I'll be able to implement and test simpler ideas. I will provide giadamaps for Launchpads, that's for shizzle.
I really want this project to become the best open source looper the world has ever seen. And it's getting there!

Thanks for reading, any comments are well appreciated.

mctom
F8 - Hawthorn
Posts: 26
Joined: Sat Oct 06, 2018 1:19 pm
Location: Gdansk, Poland

Re: MIDI enhancements

Post by mctom » Wed Oct 24, 2018 2:33 pm

Okay, no hype whatsoever... :D

I've done some of that work just because it turns out that I know some C++ :D And I really needed some of those. So, 2a, 4a and 4d are finished and working. I'll post a demo sometime.

I took a liberty to cross out the ideas that frankly were not that good. ;)

Firing a channel on key release was definitely counter-intuitive, so I dropped 2b.
4b is nonsense, I didn't have enough insight about how Giada works under the hood.
4c is not really that necessary. I looked through Novation and Akai programming manuals and didn't find a good reason for that.
4e is not really a problem when 4a has been introduced.

5 is stupid because instead of pre-assigning keys to nonexisting channels, what I actually need are... template projects with pre-assigned controller buttons.
However, I still feel that a custom midi command sent on each beat is not that bad idea.

User avatar
FFT
F14 - Syrian Rue
Posts: 541
Joined: Thu Mar 08, 2012 6:51 pm

Re: MIDI enhancements

Post by FFT » Mon Jan 14, 2019 9:34 am

Hey mctom, I'm sorry - your post really fell under our radar. Just give me some time to parse your five points, feedback coming soon ;)

Ruu
F6 - Feverfew
Posts: 11
Joined: Sun Jan 25, 2015 5:53 pm

Re: MIDI enhancements

Post by Ruu » Wed Feb 20, 2019 12:54 pm

I would like to vote for kind of MIDI output editor. Novation launch pads are really nice, but without lighting feedback there this is kind of nonsense. But first should argue why?

On top page there is written "Giada is a free, minimal, hardcore audio tool"[1] and the forum has "NO-WAY features"[2] section, that refers to Occam's razor or KISS principle. So launchpads are fully compatible with both statements containing "minimal" and "no-way". 64 pad matrix is minimal and at the same time universally adoptable (where "hardcore" comes in)

Why not Ableton? Of course simplicity is why people love Giada. All that heavy stuff is far prom purity. For me, it's kind of evidence.

suggestion:
the easiest way would be settings for each sample like this
play button on [type your MIDI out code]
play button off [type your MIDI out code]
loop on [type your MIDI out code]
loop off [type your MIDI out code]
and so on . . .
We could start with more basic meaningful light feedback option. At least which sample is playing. This would hardly be a nonsensical "no way" feature. Lights are kind of separate layer that expands Giada modularity.



1. https://www.giadamusic.com/
2. NO-WAY FEATURES viewforum.php?f=10

mctom
F8 - Hawthorn
Posts: 26
Joined: Sat Oct 06, 2018 1:19 pm
Location: Gdansk, Poland

Re: MIDI enhancements

Post by mctom » Wed Jul 22, 2020 6:58 pm

FFT wrote:
Mon Jan 14, 2019 9:34 am
Hey mctom, I'm sorry - your post really fell under our radar. Just give me some time to parse your five points, feedback coming soon ;)
Hi! I wish to get back to this topic and if you find my ideas appealing, I could create a Wiki on GitHub.

It took me a while to wrap up my ideas about Giada's MIDI capabilities. What I mentioned above in the first post, almost a year ago, was a bunch of loose ideas for some improvements and I feel that many of them are still valid. However, this time I tried a more holistic approach towards defining the whole idea, a philosophy of what do we aim to handle, and how, rather than figuring out small improvements without a fixed, common goal.

Let me first explain why I believe there is a huge potential to be unleashed.
Right now Giada have several global functions and a few per channel functions that can be operated through MIDI. The globals are fine. Setting up a whole 8x8 grid controller to turn 64 channels on and off, and to make the buttons glow the right way - a nightmare. But after all this is finally done, well, there's not much more that one can do with their controller.
Meanwhile, a simple 8x8 grid controller with light feedback has so much more to offer. It can be used as a simple action editor for drum sections. It can be seen as a set of 8 sliders with 8 steps each. Or as a melodic keyboard, with buttons lighting up for a selected key or something.
The point is that using just a single controller, a user could manage Giada channels, adjust their volume, pitch, filter parameters, play melodies, edit drum loops etc.
Even a computer keyboard could be seen as such a controller, although very limited due to its lack of light feedback.

So, once we agree that one controller can serve many functions, it's up to us to come up with "classes" or whatever we call all the different modes of operation we can think of. Let's say, "transport controller", "channel selector", "action editor", "Keyboard", "knobs", err.. "clock source", and the list might get expanded in the future.
Any physical MIDI controller could act as one of these classes, or more than one, selectable or simultaneous. For example: Launchpad can act like channel selector, action editor, keyboard, knobs, but only one at a time. Akai LPD has 8 knobs and 8 drumpads, so this would fit into a category of "knobs" and "keyboard", simultaneously.

But what's the point, one might ask.

This way we can achieve many goals:
- vastly expand *.giadamap definitions. Again, using Launchpad as an example, a behaviour of this specific controller in different modes could be specified.
- Giada, being aware of what controllers are connected and what is their default purpose, could make a lot, if not all, default MIDI mappings automatically. New channel created? Automatically map to Launchpad button. New MIDI Channel? We know the default input is a keyboard controller.
- Much more flexibility when assigning channel-specific controls. A channel selector could be used to route keyboard signals to the desired channel for recording or a one-off live solo, rather than playing notes on all channels that support keyboard input. If user binds a knob to a parameter, this knob may tweak the desired parameter only if the appropriate channel is currently selected. Unless they wish otherwise!
- Clock source can be automatically detected if available. Clock can be automatically sent to controllers that support it (many MIDI keyboards / pads use it for arpeggio / gating). Clock type accepted by a controller can be defined in giadamap without a guessing game.

----

What else?

A while back there was an idea to develop API for Giada. I say, why won't we make Giada a virtual MIDI instrument that accepts MIDI messages? The standard defines a ton of common commands for MIDI instruments, and whatever is missing can be covered by SysEx messages that we define.
This probably won't be as flexible as it could get, but this way Giada could operate with many advanced MIDI instruments without a single bit of extra coding, and cover many cases of external automation with relatively little development effort.

----
These ideas are a work in progress. I would love to firmly define it collectively with anyone who would share their opinion on it, and get to coding once we all agree that this is what we want. It comes from my strong belief that the majority of target userbase will have some sort of controllers, and making Giada controller friendly will significantly improve the overall experience.
After all, that is precisely what made Ableton a software of choice for many users - great experience out of a box.

Post Reply