dvhdr / launchpad-pro

Open source firmware for the Launchpad Pro grid controller
BSD 3-Clause "New" or "Revised" License
442 stars 101 forks source link

Way to adjust minimum pad on and off pressure sensitivities? #6

Open micahscopes opened 9 years ago

micahscopes commented 9 years ago

Okay, this is a very cool controller. You guys did a great job. It's awesome that it's so customizable too, and that you've made this firmware available.

So I wanted to give honest feedback. As a keyboard player, I'm having trouble with the minimum sensitivities for triggering pads on and off. I've tried playing with the velocity settings but that doesn't solve this.

In the open source firmware, is there a way to adjust with the minimum pressure threshold for triggering pads off and on? The current minimum feels much too high. Ideally I'd be able to rest all ten fingers lightly on the pads and get a "consistent" response from each pad, using less than the weight of the hand alone. Holding my arm stiff, right now I can rest my left hand fingers on five pads and none of them will trigger.

Since the pressure applied from the arm is divided over fingers, playing one or two pads per hand is doable (although still clunky), but each additional note becomes more and more difficult. My arms are having to exert a lot of force with this controller, and my fingers are tired.

So if the right hand is already pressing on four pads, a fifth pad becomes difficult to press without releasing pressure on one of the less advantaged fingers. Playing chords and melodies simultaneously is very hard to do because I'm losing notes every time I shift a little to accommodate new ones.

If the issue here is a hardware issue (too much noise at lower pressures), one thing that could help is to make the 'pad off' minimum pressure lower than the 'pad on' minimum. If someone still has their finger pressing on a pad, after having already pressed it with the minimum 'pad on' sensitivity, it's significantly more likely that they want the note to stay on.

For example, sometimes I will play a chord with my thumb, pointer and middle fingers and the melody with the ring and pinky. The pressure from the thumb might pass below the pressure needed to trigger the pad on in the first place, but I still want the note to to be down. Another case for this is when you're holding pads for a long time. I don't want to have to hold the same pressure required originally required to trigger the pad on on for long periods of time.

Right now, it seems like the minimum "pad on" and "pad off" thesholds are set the same. If I slowly press on a pad, I can find a narrow range of pressures the pad flickers on and off with very little change in pressure. This leads me to believe that the sensors are pretty accurate near the current minimum settings, and that some software changes could make me very happy with the controller.

Without much idea of what's going on inside, my hunch is that this controller is physically capable of performing at least as well as the ableton push, which feels a lot more playable to me, but right now it just doesn't feel tuned like a performance instrument. Even using musical typing on a PC keyboard feels hugely more expressive, regardless of the lack of velocity sensitivity, because my fingers have so much more control at the pressures required to press down on PC keyboard keys. That's not meant as a diss :) I'm just being real with you. Since this is marketed as a professional "performance" instrument, I'd expect it to be more expressive than a PC keyboard, not less expressive. Right now, the controller feels tuned like a drum machine.

jorgen1005 commented 6 years ago

Any further work on this issue?

jorgen1005 commented 6 years ago

Or maybe i should ask, is it even possible to fix this? Because i'm willing to try if it is. Best regards.

Kyran-C commented 6 years ago

@jorgen1005 the sensor data is exposed in the API now, but there's an aliasing issue which prevents having a very low threshold (which was the whole point of exposing the raw sensor data in the first place)

mccrabney commented 6 years ago

I'll speak up on behalf of all the lurkers who care about this too

On Thu, Jul 26, 2018, 4:02 PM Kyran-C notifications@github.com wrote:

@jorgen1005 https://github.com/jorgen1005 the sensor data is exposed in the API now, but there's an aliasing issue https://github.com/dvhdr/launchpad-pro/issues/36 which prevents having a very low threshold (which was the whole point of exposing the raw sensor data in the first place)

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/dvhdr/launchpad-pro/issues/6#issuecomment-408218182, or mute the thread https://github.com/notifications/unsubscribe-auth/AFN9DR3HOWn-JBzT3n2tLxC2aC6W9D1Vks5uKiBagaJpZM4FjBOV .

jorgen1005 commented 6 years ago

So, looks like the alias issue-thread is dead. No update in half a year. Such a shame :(

ben-richardson commented 6 years ago

I'll jump back in and re-express my interest in this being resolved/improved.

@faroit @whibble @dvhdr Any further thoughts? Thanks as always!

stevenreddie commented 6 years ago

@dvhdr @whibble @joefocusrite -- Can we please get a status update? I get the feeling that this project has been abandoned, but it would be good to know Novation's intentions. I purchased the Launchpad Pro and found it to be totally unusable for my primary requirement as a synth controller due to pad sensitivity and premature note-off events. In hindsight I should have just got my money back immediately, but the open firmware looked promising as a way to workaround such shortcomings, so I waited (beyond the purchase return window). After a ton of playing with the firmware, I'm no longer confident that sensitivity can be meaningfully adjusted, but I won't know for certain until the aliasing issue is fixed (which sounds like the fix has been pending commit since Jan 31). It's going to be really disappointing if this hardware is useless to me, especially with the time invested in experimenting with fixes via the firmware.

jorgen1005 commented 6 years ago

Please guys. lol

jorgen1005 commented 6 years ago

I have contacted Novation support regarding this issue and this thread, so maybe they can get the technicians to submit some further thoughts.

dvhdr commented 6 years ago

Hey folks, sorry it's been so long. I'll get this over quickly - I've still not got a good answer for you regarding the ADC aliasing issue. The original firmware engineer has moved on, and the rest of the team are busy working on new things.

I don't consider this project dead - but my expertise is not in low level firmware and electromechanical design, and I can't make any commitments regarding this issue.

We do hear you and consider your feedback. Thanks for all of it.

ftwftw0 commented 5 years ago

Hello there, whatever its worth to the product owner, I and a friend have been using the LP Pro for days and we both also experienced this problem. We are regularly checking this thread/issue gets a fix (or at least has a workaround) to finally purchase the LP Pro, respectively one for each of us. I think it really is a big issue, and im sure we are not the only ones waiting for this to be fixed before making a purchase. This is not a critic, simply the best feedback I can make to encourage a product I'd love to own.

mccrabney commented 5 years ago

http://www7a.biglobe.ne.jp/~mpc1000/128xl/padsens.htm

^ the pinnacle of pad sensitivity tuning, as designed by a 3rd party developer for the MPC series

On Thu, Sep 20, 2018 at 7:17 PM, ftwftw0 notifications@github.com wrote:

Hello there, whatever its worth to the product owner, I and a friend have been using the LP Pro for days and we both also experienced this problem. We are regularly checking this thread/issue gets a fix (or at least has a workaround) to finally purchase the LP Pro, respectively one for each of us. I think it really is a big issue, and im sure we are not the only ones waiting for this to be fixed before making a purchase. This is not a critic, simply the best feedback I can make to encourage a product I'd love to own.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/dvhdr/launchpad-pro/issues/6#issuecomment-423364328, or mute the thread https://github.com/notifications/unsubscribe-auth/AFN9DRx7HPWr4gIXWKYTAtMLxo389PHJks5udCICgaJpZM4FjBOV .

jorgen1005 commented 5 years ago

I must say, this is the biggest dissapointment i have ever had with a music product. And to think of the potential of the LP pro going to waste, i just get sad really, also very dissapointed with novation.

dvhdr commented 5 years ago

We've made some improvements to the ADC noise and crosstalk. Check out this branch: https://github.com/dvhdr/launchpad-pro/tree/adc-improvements

jorgen1005 commented 5 years ago

A pleasant surprise! Keep up the good work!

jorgen1005 commented 5 years ago

Hi @dvhdr ! Any updates regarding the pad sensitivity issue?

Thanks!

spacepluk commented 5 years ago

hi there, I wanted to checkout the adc-improvements branch but it looks like the link is dead.

dvhdr commented 5 years ago

@spacepluk hey - it was merged to master :)

faroit commented 5 years ago

I checked the ADC improvements and played a bit with the code. So, as I see it, the minimum sensitivity cannot be lowered using the raw data.

@dvhdr @whibble are there any plans to further improve on this (e.g. increasing the gain) or do you see any way of a user mod that could be applied to the circuit to increase the ADC gain? In that case it would be great if you could provide any feedback on where to start. Otherwise I would suggest to close this issue.

svankov commented 5 years ago

You're making this too complicated! All you need is your MacGyver hat and ~$3 of Avery 3-ring binder reinforcement stickers. This is a hack I've performed successfully on just about every pad controller I've owned (albeit not with 3-ring binder stickers, but same general principle). And I just did it on the LP Pro and it's fantastic!

Here's what you need:

  1. A package of Avery reinforcement labels (model 6734)
  2. About 60-90mins (low-medium skill level)

Here's what you do:

  1. Turn over the unit and peel off the orange backing. This part's a bit of a pain, but be patient and go slowly.
  2. Unscrew the back panel and remove it. You can slide your finger nails between the back and side panels to lift the back off.
  3. Grab the unit (put some pressure on the front panel / pads / pc board so that it doesn't come fully off), and turn it over so you're looking at the front. The Kensington lock metal piece may fall out, you can put it back later.
  4. Remove the front panel. Easiest way to do it is to push the plastic screw holes from the back, if it's not coming off easily.
  5. Remove the silicone pad sheet.
  6. Apply Avery stickers to the bottom of each pad (see notes on sensitivity / how many to use below). The stickers have a hole that the leds will go through. When done with the stickers, give the sheet a little blow to get any dust or dirt out.
  7. Replace silicone pad sheet. Once the pad sheet is back on the fsr sheet, you can lift each corner to make sure the fsr sensors underneath are aligned, and nudge the fsr sheet if needed.
  8. Replace top cover.
  9. Hold unit together (side and front panel), and flip it over.
  10. Replace Kensington slot metal piece and replace back panel. Screw everything in.
  11. You may want to hold off on putting the sticky orange backing back on, in case you need to open it back up to adjust anything.
  12. Power on the unit and give it a test. If you get any crosstalk/stuck pads, you may want to mash the pads around to get things to settle. Also, see note below about screw tightening.

Sensitivity:

I found 2 stickers on each pad gives the best result. 3 and 4 feel incredible, but were causing some crosstalk and pads getting stuck on. 2 seems to be optimal. One pad I downgraded to 1 sticker, since it was getting triggered by adjacent pads. But otherwise, all 2s. Even with 2 stickers, it's very sensitive, even brushing your fingers lightly across the grid will trigger. So if you don't need that much sensitivity, 1 will do you fine. On quick test, pressure sensitivity still works with this hack.

Other notes:

Be careful once you open the unit. I made the mistake of letting the whole pc board underneath the front panel fall out the first time I opened it. It's attached to the small USB board via a surface-mounted pin connector which can be a bit of a pain to align and snap back together. If you follow the instructions above and hold the unit together when you're flipping it over to access the front, then you shouldn't have this problem.

I had some stuck pads which were mitigated by loosening the center screw slightly. This may be something to try if you get any crosstalk/stuck pads when you close it up.

You may need to open up the unit a couple of times to deal with crosstalk, etc. I opened my unit 4-5 times through the course of this project (testing with different sticker thicknesses, etc), all in all it took about 2 hours. It should go quicker for you, since 2 stickers seems to be the max, but you may need to open it a couple of times to adjust pads that may be misbehaving.

Disclaimer:

This is a simple hack and there are not a lot of parts inside the LP Pro to get in trouble with. Still, undertake this at your own risk. And note that it may void your warranty.

IMG-3861 IMG-3860

Kyran-C commented 5 years ago

@svankov Thanks for the info. I've done a similar thing on my MPK using layers of electrical tape and, while finicky, it did make a huge improvement. I've always thought about doing it with the LPP but didn't want to be the guinea pig. What's interesting in this case, is that we have access to the sensor readings through firmware, so we can mitigate stuck pads and crosstalk by raising the threshold. This whole time we've wanted a way to increase electrical sensitivity, but instead we can increase mechanical sensitivity and then fine tune it through software.

I was working on firmware that had an auto calibration mode where it would take a sensor reading with no pads pushed, and then another reading while the user applies max pressure, and sets the min/max thresholds accordingly. I might revisit that and make it work for each pad individually to compensate for any variation across pads. It could be as simple as doing this mod, and then running through the auto calibration to get max sensitivity, consistently across every pad.

faroit commented 5 years ago

I was working on firmware that had an auto calibration mode where it would take a sensor reading with no pads pushed

@Kyran-C interesting. I thought the adc-improvements was just giving us access to RAW values and the demo in the master now visualizes the lowest ADC readout with mapping it to the LED directly. Is there a way to really see the ADC noise?

faroit commented 5 years ago

@Kyran-C

did you experiment with this line to get the lower 6 bit of the 12 bit readout?

Kyran-C commented 5 years ago

That's just truncating the sensor value so it can be used to drive the LEDs. If you poll the ADC values with no pads pressed, you get small, time-varying values (the noise floor of the sensors/ADC). If we were to do this mod to effectively have the pads always slightly pressing against the sensors, you'd push past the noise floor of the ADC so that any slight pressure would register with decent strength. You'd set your pad trigger threshold slightly above that, and then scale the pressure into the 0-127 range. It might even have the effect of making pressure more consistent at low levels. As it stands now, the ADC readings are usually a bit jittery with really light touch, but consistent with more firm presses.

svankov commented 5 years ago

@Kyran-c, Hey glad to see another fan of the tape hack! I’ve had a couple of days playing with the modded LP Pro, and have only run into one pad getting stuck on sometimes, so I’ll probably open up the unit and remove one of the two stickers. Pretty impressed at how well the mod seems to be working, I can even do light double finger taps on pads, and they trigger perfectly.

I was on the verge of returning the LP Pro due to how awkward and inconsistent it was at low activation, but I’m glad I opened it up.

Interested to hear if anyone else attempts this mod.

Kyran-C commented 5 years ago

I did the mod, using 3 layers per pad. It's a huge improvement. There's a few stuck pads when I first power it on, but I run the auto-calibration in my custom firmware and it sets the low threshold just slightly above the noise floor. Sometimes I still get some ghosting from the plastic case flexing, so I can manually bump up the trigger threshold a little bit to eliminate that.

I used to have to push my fingers perpendicular to the pads and use arm/wrist to get to full velocity. Now I can hit full velocity with my fingers parallel to the pad surface, only pushing using my fingers. Which means each finger can apply pressure independently instead of having to remain stiff and depend on arm muscles to do the work. Even my pinkie finger can hit max velocity no problem.

I was worried it would reduce the dynamic range of the pads; in other words they'd be easy to trigger but hit full velocity almost right away. But the pads actually feel more dynamic. It's easy now to play soft notes or loud notes. I'm not sure if 4 layers per pad would be any more sensitive or just start to reduce the dynamic range. I'm not going to bother applying more.

I feel like it should have been designed like this in the first place, but it seems pretty common for pad controllers to have a gap between pads and sensors so maybe manufacturers have their reasons. Perhaps tolerance issues with the pad molds, or extra work to assemble or calibrate them?

Either way, the launchpad is now usable as an instrument for me so I'm pretty happy. I still have to implement more features in my firmware to refine the pad response (curve, hysteresis, smoothing) but the current level of sensitivity is pretty encouraging. I'll upload to github once I get things a bit more polished so people can use it or fork it.

Everyone in this thread should really try this mod out, it's super cheap and easy, and it makes a pretty drastic improvement in pad response. Maybe try just 2 layers if you don't want to write your own firmware that lets you fine tune the trigger threshold. 3 layers would most likely give you stuck pads with the stock firmware.

faroit commented 5 years ago

@Kyran-C that sounds exciting. Would you mind to share your firmware fork on GitHub?

mccrabney commented 5 years ago

@Kryan-C agreed with above. i have not yet installed custom firmware on my launchpad but this will make me take the plunge.

trigger threshholds should be determined by averaging voltage for x seconds after boot, and possibly again at user command.

micahscopes commented 5 years ago

Wow! This is really exciting! Proud/ashamed to say that I was one of the original complainers (sorry @dvhdr 🤪...).

I'd sort of given up on this thing, since I just haven't found the time to create my own firmware application that would still work seamlessly with the bitwig launchpad pro interface. But this mod is giving me hope! I'm definitely gonna have to try it.

One thing that might still be worth trying is adding some "hysteresis": making it so that it takes less pressure to hold a note down once its already been pressed. You'd basically make the note-off threshold more sensitive. Has anyone tried this yet?

By the way @dvhdr: looking back, I really appreciate how you all responded to this issue. I realize you were busy with the circuit, but you made time to address this. The mod has me wondering if the some of the original prototypes of this thing weren't more sensitive, but that maybe something got lost in bringing it to market. Perhaps it was deemed too risky to have some units with stuck pads, so the physical sensitivity was decreased?

RibbleFripFnibbulator commented 5 years ago

Thank you @svankov, I just did this mod and it worked great!! Some randomly triggered pads that loosening their nearby screw(s) resolved. The Launchpad Pro feels like a higher quality instrument now, and I can play it much more lightly. Highly recommended to everyone who wants to improve the sensitivity. It was fast and easy.

faroit commented 4 years ago

That's just truncating the sensor value so it can be used to drive the LEDs. If you poll the ADC values with no pads pressed, you get small, time-varying values (the noise floor of the sensors/ADC). If we were to do this mod to effectively have the pads always slightly pressing against the sensors, you'd push past the noise floor of the ADC so that any slight pressure would register with decent strength. You'd set your pad trigger threshold slightly above that, and then scale the pressure into the 0-127 range. It might even have the effect of making pressure more consistent at low levels. As it stands now, the ADC readings are usually a bit jittery with really light touch, but consistent with more firm presses.

@Kyran-C I had a bit more time trying to get a better impression of the raw ADC values. I couldn't get anything out of the sensors that looked like to be some starting point for some smart algorithm that could detect the pad hit from noise. Maybe some Kalman filtering would do? In any case, could you share your code with the best ADC -> LED mapping that you got to visualize the lower bits of the sensor?