I am experimenting with using the Sensel Morph as an input device for finger drumming, i.e. triggering drum samples by tapping with the fingers on the sensor surface. The idea here is to use the x-y position to determine the drum and articulation, and use the “strength” of the tap for the velocity.
I am using the C API to look for contacts and trigger MIDI notes accordingly.
Things that seem to work well for this application:
- The latency seems to be acceptably low, at least when using the low resolution / high scanning frequency setting. I set it to SCAN_DETAIL_LOW and set the max frame rate to 1000Hz. (Note: Even though I can successfully set the value to 100, I assume I am actually only getting 500Hz, since the specs says the actual maximum at low scan detail is 500Hz. Haven’t tested how many frames per second it actually delivers).
- The sensitivity range is wide enough to detect even light taps, which is great.
- Detection of multiple rapid and potentially simultaneous contacts works well (e.g. for drum rolls).
The one thing that does not seem to work well is to use the force readings to derive the “strength” of the tap. The issue I am seeing is that the readings are very inconsistent. For taps of very similar perceived strength, I see the value of the SenselContact.total_force of the first frame detecting the contact vary by as much as a factor 100. I did a couple of tests to try to understand why this happens and if there is any workaround:
-
To make sure this is not due to my test taps being too inconsistent, I used a badminton shuttlecock and dropped it repeatedly from the same height. I still got force readings vary by as much as factor 10.
-
To check if the inconsistency is an artifact of the algorithm that determines contacts from the force image frames, I also compared with the total force accumulated from the force image frame (making sure there is only ever one contact at a time), and the inconsistence is present there as well.
Currently my best guess as for a cause is that this could be a timing issue caused by the force readings corresponding to essentially instants in time. Depending on at what stage of the tap the force sample gets taken, one might end up with very different values. For example, if a sample is taken at a moment where the finger has just barely started touching the sensor and has not yet reached its lowest point, the force reading might be low. If the sample happens to get taken at the time where the tap exhibits the highest force, then one may end up with a very high value.
Note, that the above theory also matches observations that can be made using the visualizer in the Sensel App. When tapping the sensor such that the duration of the contact is very short, one can observer that sometimes the visualizer shows a large peak and sometimes it shows nothing.
Can anyone confirm whether or not my theory for the cause is correct?
If so, then it might be that this type of sensor is simply not well suited for measuring the strength of very brief contacts.
Please let me know if you have any suggestions as for how the Morph could be used to determine the strength of finger taps.