Hi there,
I’m trying to use my AKAI MPK mini plus MIDI controller on Ardour and encountered a weird issue. When I play a series of notes (like a scale), some notes aren’t played, so that (as an example) I’m hearing the 1st and the 3rd note, but not the 2nd.
The weirder part is that this doesn’t happen with some instrument plugins. More specifically, I got the issue using General MIDI Synth and CALF FluidSynth instrument plugins, but played scales result in a “solid” output with Yoshimi or (outside Ardour, used as a standalone software) HELM Synth. I noticed that the issue gets better if I delay on note from the other, thus reducing the playing speed of a scale for example, in that case I can clearly hear all the notes of the scale.
I already tried to fiddle with velocity settings on my AKAI MPK mini plus getting to the “hidden” menu and regulating v1-4 velocity from it, but nothing seemed to change.
I’m using:
AVLinux Operative System (kernel: 6.0.0-10.1-liquorix-amd64)
Ardour 7.2.123 (rev 7.2-123-gdb63f8320e) as DAW
I post you some videos below to help you understand better:
General MIDI Synth scale test: here you can see that some notes don’t get played although I press the corresponding keys. The instrument plugin I’m using here is General MIDI Synth
Yoshimi scale test: In this video you can see that, instead, using Yoshimi instrument plugin all the notes of the scale can be heard
General MIDI Synth slide test: I think the best way to hear the issue is by watching at a “slide” on the keyboard. This video shows that if I slide on the keyboard you can essentially hear only the first and the last 3/4 notes of the slide. The instrument plugin I’m using here is General MIDI Synth, but - again - using Yoshimi I can’t hear any issue.
I also recorded videos of the signal arriving to the track, trying to figure out if for some reason the velocity sent from the midi controller was “weird”… Here is the Arrived MIDI signal video.
Someone can give me a hand on this? Thanks in advance!
Hi there and thank you for your help!
Issuing aseqdump -l I can find two MIDI ports as you can see below:
aseqdump -l
Port Client name Port name
0:0 System Timer
0:1 System Announce
14:0 Midi Through Midi Through Port-0
24:0 MPK mini Plus MPK mini Plus MIDI 1
24:1 MPK mini Plus MPK mini Plus MIDI 2
which are the same I can find in jack (qjackctl connections) as MIDI output clients.
I actually don’t know what’s the purpose of the second MIDI port, do you?
Anyway I tested every key with aseqdump -p <port-number> and I can see Note On and Note Off events for every key in port 24:0 (the first one), while I can’t see no event at all in port 24:1 (the second one).
The same happens in ardour using ACE MIDI monitor plugin
It is fairly common that modern USB MIDI controllers have additional MIDI ports over one USB connection. Probably the second port is for communication between DAW software and the device (the manual may confirm this).
So, if the MIDI events all reach the track, the next test would be to insert the General MIDI synth plugin and play the same notes as before and record the audio output to confirm whether some notes are really dropped.
I suspect this is simply a matter of some low velocity values triggering (almost) inaudible notes with some of the sounds in the General MIDI soundset. You may need to adjust the velocity curve on the Akai or insert a MIDI Velocity Scale plugin in the first slot.
As you guessed, the issue was due to low velocity values sent from the MPK mini plus (It seems I didn’t fiddle enough with the velocity menu of the controller …). In fact either aseqdump and ACE MIDI monitor plugin gave a value of 8 for velocity when I was pressing softly on the keys, value that made the notes not audible in ardour (or other standalone sequencers).
I solved setting a value of 60 for the v1 parameter in the velocity menu of the MPK mini plus and now I can hear the notes. I don’t know if this is the correct way to go (is 8 a very low value for velocity?) or if, perhaps, I have to compensate differently in ardour and/or in other sequencers… I also don’t know what v2, v3, v4 and black bal settings are in the velocity menu of the MIDI controller and if I should adjust them as well… Could you give me some insight?
It’s also weird that with some other synth/sequencers I didn’t have any issues (Yoshimi or HELM), but I guess those ones raise received velocity before actually playing the notes… But, again, is just a guess.
Anyway thanks a lot for the help and for giving me a way to “debug” MIDI signal!
Personally, I usually set the velocity curve of MIDI controllers to standard and do any adjustments with software, such as the aforementioned x42 MIDI Velocity Scale plugin.
It is up to the software instrument (i.e. plugin) how to handle velocity and usually, this can differ from sound to sound. The software just receives values between 1 and 127 and there is not standard how to map this to volume or expression. But values lower than 32, 40 or even 64 are generally considered low.
Synthesizers also often have parameters to set the velocity sensitivity for each sound. Alas, with soundfont players such as the General MIDI Plugin, this velocity sensitivity is baked into each sound and can not be easily altered without editing the soundfont.
May I ask you the precise name of the x42 MIDI Velocity Scale plugin and how I can get it? 'Cause I can’t find it among my plugins in ardour, but still wanted to do some tests.
I think v1, v2, v3 and v4 are related to the adjustment of the velocity curve showed in a picture in the MPK mini plus manual at page 24, although in the manual it is adjusted via software.
Do the plugin operate in a similar way? What could it be a good velocity curve to start with?
Actually, a plugin which provides a freely programmable velocity scaling curve, preferably with a nice graphical UI, is something that is sorely missing in the FLOSS world. It’s rather easy to program the actual MIDI processing with something like Moony.lv2 or Ardour Lua scripts (e.g. see this), but making a nice UI is more effort.
BTW, it seems you are not the only one with this problem: