-
Notifications
You must be signed in to change notification settings - Fork 227
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
MIDI Controller #95
Comments
Only the faders are supported. |
The MIDI control is just experimental. Not really an end-user feature right now. Right now it is implemented for the Behringer X-Touch, see https://github.com/corrados/jamulus/blob/master/src/soundbase.cpp#L289 |
Ok, could some sort of midi lerning interface be inserted? In order to make all devices compatible. I imagine a settings page where you select a fader and then physically move it, in this way going to check which channel moves on MIDI you map it to the first channel of the mixer. So on for the next ones. |
@nicolopozzato Dunno if this is relevant, but there's something in the docs on enabling MIDI on this page (scroll down, GH wiki doesn't do anchors). |
I'm working on trying to change the MIDI support... Now channel70 is fader0 in jamulus I was thinking about a new midi mapping...
Then group of 3 midi channel for every Jamulus Channel, so:
In this way everyone can map the note nedded in their MIDI Controller... (my friend has a Korg NanoKontroller2) Does anyone know a midi program for linux that simulate midi presses? I don't have a midi controller, and my friend has a mac and we can't compile in his pc because we get error after following the guide in the wiki. If anyone have idea how to integrate the midi support also for windows would be very nice! |
Would be awesome to have MIDI support to control faders, solos and mutes integrated with a user friendly interface . I attached some mockups to show some interface and functionalities ideas:
|
I need to find a way to be able to test my code without a real midi controller... For the moment I'm trying to connect to midi the mute button, I find the code a little bit messy so I need time to be able to understand the big picture. As a first step I was thinking about a static channel mapping, the in the future to update to a "MIDI Mapping" window |
I'm not a experienced developer, unfortunately I cannot help you much. |
I believe that this issue addresses three topics which are only loosely coupled:
Regarding 1:
Regarding 2: |
I am rehearsing with a big band in Jamulus (17+ strips) the things we want to set is: the config file should also default values. we could then create such a file and send to the entire band. |
Wow, all in your band of 17 members have a MIDI control hardware available for usage with Jamulus? |
What about reading the value of the offset from the settings (with a default of 70)? This should be relatively quick to implement and would enable a user to change the number by editing the settings file, i.e. without recompiling. |
This is something I'm very interested in too. The Mute Myself being on a midi controller is probably the one I'd use the most: the ability to have a foot pedal controller toggle that on and off. I like the idea of MVP being able to configure the midi setup in a config/ini file on startup. |
There are some solutions out there for this request, see, e.g.: https://sourceforge.net/p/llcon/discussion/533517/thread/f3252db0f5 |
I would like to implement saving the MIDI control offset in the settings as proposed in my comment from 29th June. The simplest way I see is as follows:
Please comment. |
Hm, maybe a quick hack is even simpler? We already have iCtrlMIDIChannel. The allowed channels are from 0-16 as far as I know. Integer has 2^31 values. So a lot to play with ;-). So we could define: if --ctrlmidich is in range 0-16 we do the same as before. If it is > 16 we could apply some math which extracts the MIDI channel number plus the offset. Ideas? |
16 channels total 0..15 or 1..16 depending on storage, only 4 bits required.
…On Sun 15 Nov 2020 at 21:20, Volker Fischer ***@***.***> wrote:
Hm, maybe a quick hack is even simpler? We already have iCtrlMIDIChannel.
The allowed channels are from 0-16 as far as I know. Integer has 2^31
values. So a lot to play with ;-). So we could define: if --ctrlmidich is
in range 0-16 we do the same as before. If it is > 16 we could apply some
math which extracts the MIDI channel number plus the offset. Ideas?
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
<#95 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ABIJSQL6BTONKHH7Q4FKTXDSQBAYXANCNFSM4MLNSA7A>
.
|
One could use the first byte of iCtrlMIDIChannel for the channel and the rest for the offset. But maybe it's more clean to use two separate variables. iCtrlMIDIChannel could be reduced to an unsigned 8bit variable if you want to save space. EDIT: One could also replace iCtrlMIDIChannel with a MIDISettings structure which contains the variables iCtrlMIDIChannel and iCtrlMIDIOffset. This is more clean and more flexible for potential future enhancements. If the size of both variables is small, e.g. 8 bit or 16 bit, the overall size does not increase. |
It's not about saving space. We are talking about a functionality which less than 0.5 % of the Jamulus users use. So I want to keep the code added to Jamulus as small as possible. Extending the existing --ctrlmidich makes it possible that only the CSoundBase class must be changed slightly and nothing else. What range do you need for the offset? |
A very simple definition would be: |
My master keyboard needs an offset of 20. As far as I know, the number has a range between 0 and 127, i.e. 7 bits. Do you mean that you don't want to replace iCtrlMIDIChannel with a structure? That would enable to extend the functionality e.g. to buttons on the (hardware) fader strip (with the functionality to mute channels) or knobs on the fader strip (with functionality to pan) in a second step. This is useful e.g. when using the Jamulus client on a Raspberry Pie. |
Ok, we could change iCtrlMIDIChannel to a string instead of an integer. Then you could do something like this: |
That's a good idea. Then the constructor of CSoundBase can parse the string and set member variables for channel, level offset, etc., but the other classes remain agnostic of the structure. |
Exactly, that was my intention to keep the implementation simple. We already have a similar parser for the server properties:
|
I can pitch in for the Korg nanoKONTROL2 here: it offers a "native" mode implemented with Midi controllers, and an application where you can define the controller numbers for every button/slider/pot and whether they act as one-shot buttons (events on both push and release) or as toggles (events on push). It can light most of the buttons via Midi commands, and it can also (by holding buttons while powering up) go into various non-native modes working mostly via note on/off events that include the Mackie control interface and HUD (some older interface used with a particular DAW). The application runs under WINE (it doesn't get the MIDI devices for both read and write right, you need to explicitly configure them in the settings menu, then manually select the nanoKONTROL2 as the device to configure, but then it works). Reasonably affordable second hand, runs via USB. Has no motor faders or "infinite" rotary controls, but at least feedback for the buttons. So at a comparatively moderate price point, it's good for testing a whole lot of functionality of different more expensive controllers. And is quite convenient, actually. |
With regard to syntax: for more than one controller type it becomes important to figure out the count. I mulled through a number of schemes for figuring out the actual counts, but I think that this kind of second-guessing is likely not helping a lot. So how about (for a nanoKontrol2)
Requiring ranges to be specified explicity allows avoiding to employ some magic for figuring out which function a particular controller belongs to. |
Since the length of the fader strip can be considered constant (i.e. the number of faders, pan knobs, mute buttons, etc. is the same), it is redundant to give it for each parameter. Thus, I suggest to give the parameters in the order channel, length of the fader strip, offset for faders, offset for pan, offset for mute, offset for solo. For your example for the nanoKontrol2 that would be
where 0 is the MIDI channel, 8 the length of the fader strip, 32 the offset for the faders, 48 the offset for pan, and 16 the offset for the mute buttons. |
andreassch <notifications@github.com> writes:
Since the length of the fader strip can be considered constant
(i.e. the number of faders, pan knobs, mute buttons, etc. is the
same), it is redundant to give it for each parameter. Thus, I suggest
to give the parameters in the order channel, length of the fader
strip, offset for faders, offset for pan, offset for mute, offset for
solo. For your example for the nanoKontrol2 that would be
```
--ctrlmidich "0;8;32;48;16"
```
where 0 is the MIDI channel, 8 the length of the fader strip, 32 the
offset for the faders, 48 the offset for pan, and 16 the offset for
the mute buttons.
The scheme with a prefix letter and given count will also work for
non-strip buttons like "mute transmission" (could be on the general
"record" button). For generic controllers, the organisation might not
always be in strips: one might use non-dedicated rotary controllers for
pan. Also one can specify one but not the other, like if you don't use
"mute" buttons.
That was sort of the rationale behind my proposal: doing something that
does not use an artificial order one needs to remember and that we won't
need to overhaul time and again.
…--
David Kastrup
|
I agree that your approach is more versatile. And letters as identifies make it easier to use. |
This is preparation for continuing work on issue jamulussoftware#95. While it does not yet introduce functional differences, MIDI controller information is organised in a manner where reacting to more than just fader control messages becomes easy. The preparation right now is for controllers of type fader, pan, solo, mute but can be easily extended for other messages arriving on a single channel.
As part of issue jamulussoftware#95, this implements a new way of specifying various controllers. The previous possibilities are retained. This leaves --ctrlmidich <n> receives on channel n (if 0, on all channels), offset to first fader is 70 (Behringer X-Touch) --ctrlmidich <n>;<off> for specifying a different offset --ctrlmidich <n>;f<off>*<channels>;p<off>*<channels> specified offsets for fader controllers and pan controllers, respectively. There are also s<off> and m<off> specs for Solo and Mute buttons, respectively. This only concerns the command line parsing: the actual implementation is only there for the volume faders.
This actually implements the --ctrlmidich options for panning with a MIDI controller for issue jamulussoftware#95. For example, in native mode a KORG nanoKONTROL2 can be used with Jamulus --ctrlmidich '0;f0*8;p16*8' since its colume faders start at controller 0 and its pan pots start at controller 16.
As part of issue jamulussoftware#95, this implements a new way of specifying various controllers. The previous possibilities are retained. This leaves --ctrlmidich <n> receives on channel n (if 0, on all channels), offset to first fader is 70 (Behringer X-Touch) --ctrlmidich <n>;<off> for specifying a different offset --ctrlmidich <n>;f<off>*<channels>;p<off>*<channels> specified offsets for fader controllers and pan controllers, respectively. There are also s<off> and m<off> specs for Solo and Mute buttons, respectively. This only concerns the command line parsing: the actual implementation is only there for the volume faders.
This actually implements the --ctrlmidich options for panning with a MIDI controller for issue jamulussoftware#95. For example, in native mode a KORG nanoKONTROL2 can be used with Jamulus --ctrlmidich '0;f0*8;p16*8' since its colume faders start at controller 0 and its pan pots start at controller 16.
This is preparation for continuing work on issue jamulussoftware#95. While it does not yet introduce functional differences, MIDI controller information is organised in a manner where reacting to more than just fader control messages becomes easy. The preparation right now is for controllers of type fader, pan, solo, mute but can be easily extended for other messages arriving on a single channel.
As part of issue jamulussoftware#95, this implements a new way of specifying various controllers. The previous possibilities are retained. This leaves --ctrlmidich <n> receives on channel n (if 0, on all channels), offset to first fader is 70 (Behringer X-Touch) --ctrlmidich <n>;<off> for specifying a different offset --ctrlmidich <n>;f<off>*<channels>;p<off>*<channels> specified offsets for fader controllers and pan controllers, respectively. There are also s<off> and m<off> specs for Solo and Mute buttons, respectively. This only concerns the command line parsing: the actual implementation is only there for the volume faders.
This actually implements the --ctrlmidich options for panning with a MIDI controller for issue jamulussoftware#95. For example, in native mode a KORG nanoKONTROL2 can be used with Jamulus --ctrlmidich '0;f0*8;p16*8' since its colume faders start at controller 0 and its pan pots start at controller 16.
This is preparation for continuing work on issue jamulussoftware#95. While it does not yet introduce functional differences, MIDI controller information is organised in a manner where reacting to more than just fader control messages becomes easy. The preparation right now is for controllers of type fader, pan, solo, mute but can be easily extended for other messages arriving on a single channel.
As part of issue jamulussoftware#95, this implements a new way of specifying various controllers. The previous possibilities are retained. This leaves --ctrlmidich <n> receives on channel n (if 0, on all channels), offset to first fader is 70 (Behringer X-Touch) --ctrlmidich <n>;<off> for specifying a different offset --ctrlmidich <n>;f<off>*<channels>;p<off>*<channels> specified offsets for fader controllers and pan controllers, respectively. There are also s<off> and m<off> specs for Solo and Mute buttons, respectively. This only concerns the command line parsing: the actual implementation is only there for the volume faders.
This actually implements the --ctrlmidich options for panning with a MIDI controller for issue jamulussoftware#95. For example, in native mode a KORG nanoKONTROL2 can be used with Jamulus --ctrlmidich '0;f0*8;p16*8' since its colume faders start at controller 0 and its pan pots start at controller 16.
This is preparation for continuing work on issue jamulussoftware#95. While it does not yet introduce functional differences, MIDI controller information is organised in a manner where reacting to more than just fader control messages becomes easy. The preparation right now is for controllers of type fader, pan, solo, mute but can be easily extended for other messages arriving on a single channel.
As part of issue jamulussoftware#95, this implements a new way of specifying various controllers. The previous possibilities are retained. This leaves --ctrlmidich <n> receives on channel n (if 0, on all channels), offset to first fader is 70 (Behringer X-Touch) --ctrlmidich <n>;<off> for specifying a different offset --ctrlmidich <n>;f<off>*<channels>;p<off>*<channels> specified offsets for fader controllers and pan controllers, respectively. There are also s<off> and m<off> specs for Solo and Mute buttons, respectively. This only concerns the command line parsing: the actual implementation is only there for the volume faders.
This actually implements the --ctrlmidich options for panning with a MIDI controller for issue jamulussoftware#95. For example, in native mode a KORG nanoKONTROL2 can be used with Jamulus --ctrlmidich '0;f0*8;p16*8' since its colume faders start at controller 0 and its pan pots start at controller 16.
As part of issue jamulussoftware#95, this implements a new way of specifying various controllers. The previous possibilities are retained. This leaves --ctrlmidich <n> receives on channel n (if 0, on all channels), offset to first fader is 70 (Behringer X-Touch) --ctrlmidich <n>;<off> for specifying a different offset --ctrlmidich <n>;f<off>*<channels>;p<off>*<channels> specified offsets for fader controllers and pan controllers, respectively. There are also s<off> and m<off> specs for Solo and Mute buttons, respectively. This only concerns the command line parsing: the actual implementation is only there for the volume faders.
This actually implements the --ctrlmidich options for panning with a MIDI controller for issue jamulussoftware#95. For example, in native mode a KORG nanoKONTROL2 can be used with Jamulus --ctrlmidich '0;f0*8;p16*8' since its colume faders start at controller 0 and its pan pots start at controller 16.
This is preparation for continuing work on issue jamulussoftware#95. While it does not yet introduce functional differences, MIDI controller information is organised in a manner where reacting to more than just fader control messages becomes easy. The preparation right now is for controllers of type fader, pan, solo, mute but can be easily extended for other messages arriving on a single channel.
As part of issue jamulussoftware#95, this implements a new way of specifying various controllers. The previous possibilities are retained. This leaves --ctrlmidich <n> receives on channel n (if 0, on all channels), offset to first fader is 70 (Behringer X-Touch) --ctrlmidich <n>;<off> for specifying a different offset --ctrlmidich <n>;f<off>*<channels>;p<off>*<channels> specified offsets for fader controllers and pan controllers, respectively. There are also s<off> and m<off> specs for Solo and Mute buttons, respectively. This only concerns the command line parsing: the actual implementation is only there for the volume faders.
This actually implements the --ctrlmidich options for panning with a MIDI controller for issue jamulussoftware#95. For example, in native mode a KORG nanoKONTROL2 can be used with Jamulus --ctrlmidich '0;f0*8;p16*8' since its colume faders start at controller 0 and its pan pots start at controller 16.
This is preparation for continuing work on issue jamulussoftware#95. While it does not yet introduce functional differences, MIDI controller information is organised in a manner where reacting to more than just fader control messages becomes easy. The preparation right now is for controllers of type fader, pan, solo, mute but can be easily extended for other messages arriving on a single channel.
As part of issue jamulussoftware#95, this implements a new way of specifying various controllers. The previous possibilities are retained. This leaves --ctrlmidich <n> receives on channel n (if 0, on all channels), offset to first fader is 70 (Behringer X-Touch) --ctrlmidich <n>;<off> for specifying a different offset --ctrlmidich <n>;f<off>*<channels>;p<off>*<channels> specified offsets for fader controllers and pan controllers, respectively. There are also s<off> and m<off> specs for Solo and Mute buttons, respectively. This only concerns the command line parsing: the actual implementation is only there for the volume faders.
This actually implements the --ctrlmidich options for panning with a MIDI controller for issue jamulussoftware#95. For example, in native mode a KORG nanoKONTROL2 can be used with Jamulus --ctrlmidich '0;f0*8;p16*8' since its colume faders start at controller 0 and its pan pots start at controller 16.
Since the PR was merged, I'll close this now. If it needs to be re opened, please re open it. |
I have read that from the 3.4.4 (2020-03-25) version there is MIDI support.
- added support for controlling the audio mixer faders with a MIDI controller (MacOS and Linux)
How can i map my MIDI Controller to the mixer fader, solo and mute button?
Also there is a way to map the rever effect and the mute my input?
I don't have find anything about it. Only some thing about it in the source code...
For info i have a Korg NanoKontrol2
The text was updated successfully, but these errors were encountered: