For the last few months I've been working on a brand new way of extracting touches from the Soundplane pressure data. I'm very happy to send out the first public demo of that work today, as Soundplane 1.5.0b1.
The new touch tracker algorithm is a fundamentally new approach, and fixes small but annoying inconsistencies that players had to work around with the old one. Some of these showed up as stuck notes, or lingering phantom notes that would follow a touch.
I've been playing my Soundplane a lot while working on this. Now, when the sounds aren't right, I'm finding more often it's a problem with where my fingers are and not the software. So I'm very happy to switch my focus a bit more from algorithm development to practising!
Soft touches are no longer subject to a time-varying rejection filter, and should feel much more stable and less spongy. Positions of touches should be more accurate and consistent. Adjacent touches should maintain their positions better over a range of pressure.
Generally speaking, the new algorithm uses spatial filtering in a lot of places where the old one used temporal filtering. So latency should be much better, and in general it should reflect whatever your fingers are doing right now, which is kinds the point. Read on for details.
Version 1.5 changes
- new touch tracker algorithm
- attempted fix for Kyma connection
I'm sending out this version and any other upcoming betas simply as a compressed file containing the application. You can move it to wherever you currently keep your Soundplane application and run the new one alongside the current one. All data files have the same format, so you can use old zone presets with the new version.
On installing, I recommend that you go to the Expert page of the application and choose "restore defaults." This will set the default parameters for the new tracker and pick carriers.
If you have a carefully made calibration for the old tracker, you may want to back that up. I believe that it will be preserved if you switch to the new version and back, but better safe than sorry. The calibration file is in Library/Application Suppport/Madrona Labs/Soundplane/SoundplaneAppState.txt.
This new tracker runs on a new, more robust principle and so a calibration procedure is no longer needed at all. In the future, I may add some form of positional fine tuning to allow for differences between instruments, but for now I think this should perform well without any calibration, and we'll have a more consistent baseline so I can get feedback on how it's working for the beta.
A couple of levels might need to be adjusted, as follows. Run the app and go to the "Touches" page, and pick the "xy" view mode from the view mode menu. If you raise the view scale dial to around 10, you can probably see some gray flickering. This is the sensor background noise. If you touch the surface now, you will see some green pixels, and probably a touch. If you see green pixels when you are not touching the surface, the "lo thresh" dial needs adjustment. To do this, go to the Expert page.
Back on the Touches page the "thresh" dial functions basically as before. The default here is 0.01. If you make this lower, lighter pressure will create touches, but touches will not be as consistent. Please use the default value for now when reporting issues.
Let me know if the new tracker seems like an improvement. If there are some cases where it isn't, the most effective communication to me would be a short written statement about what doesn't work well. I may be seeing the issue too, and already aware of it. After that, screen shots and movies are probably the best way to communicate about issues with tracking.
If you have a Kyma, please get in touch and let me know if this fix solves the connection issue with 1.4. If it does not, I will be sorry, but not too surprised, because I don't have a Kyma for testing. Now that the new tracker is done, and we are in the testing phase for this release, I can work frequently with you to find a fix.
New tracker notes
The new tracker runs in multiple phases, which you can see visualizations of using the various view modes on the Touches page. In short, these are:
- raw data: as before, raw Soundplane data
- calibrated: data after calibration and spatial smoothing
- pings: touch candidates obtained by curvature method
- pings horiz: horizontal pings only with pressure graphs
- pings vert: vertical pings only with pressure graphs
- key states: where a touch may be over each key
- raw touches: touch candidates derived from key states
- touches: filtered and matched touches
- xy: finished touches with position histories, also sensor data
Sustaining touches on adjacent keys should now be possible, with careful playing, as long as the touches are more than a key width apart. In other words,
While single touches can be played very softly, groups of touches may take more pressure.
Touches on the bottom row suffer from positional inaccuracy because the palm of the hand is often close by providing a sink for electrical charge. This is a Soundplane hardware issue, not a tracker thing as such. To see an example, try pushing the lower row keys with a nonconductive pen or pencil instead of a finger. You may see that the positions go more easily to their limits. I have found keeping the bulk of my hand away from the surface, by curling the finger underneath and playing with my nail, to be a useful technique.
Touches never go all the way to the edge of the outer keys. If you think about it, you would have to be poking into the corner with something pointy-shaped in order for the center of a touch to be truly on the edge of the surface. The Soundplane is designed for fingers, which all have some thickness.
If you look on the Soundplane issue tracker on Github, you can see the problems I know about or improvements I would like to make. If you have a problem with the software or a feature suggestion that's not on this list, please let me know.
The current state of the software archive is a bit messy, and it's not too clear what versions of libraries to grab to compile your own version. I'll be cleaning things up as I work on the 1.5 release. Meanwhile feel free let me know if you have any questions.
I also look forward to finally updating the manual, now that the software is settling down. I'm having a lot of fun playing now, and I plan to do some more video demonstrations soon.
Finally, all this work sets the stage for the soundplane-to-CV module, and the next model of the Soundplane itself. Stay tuned for developments.
This version definitely feels like a great improvement - congratulations, thank you for putting in the effort to bring about these improvements.
generally, I think the close touches register much better, and its a more consistent feel, and its great to not have the calibration step :)
a couple of things
midi, is still a bit hit n miss for me, in particular the velocity is a bit on/off still... also if you try quickly alternate between 2 different notes quickly, sometimes this will be considered a PB rather than new notes. ( the lopass , seems to have no affect on this)... if you x/y view you can see its thought of as a slide rather than a new touch.
i usually use OSC, and pressure rather than noteon/envelopers so its not a big deal for me, but to use with non ML mpe synths, improving these would help alot.
calibration, as i said seems to work well without it, the only exception to this, is i notice that sometimes the 'line' between row 1/2 , 4/5 is not detected as straight. so if you play a note high on row 2, somtimes it play as row 1, or a note low Y on row 4, it detects as row 5.
obviously this only is an issue if you play with 5 rows of notes, which I like to do, to give me a bit more range (of notes).
... what would nice is if we could draw the row boundaries with our fingers (in a calibration mode), then the software could use these to find the notes, and interpolate the Y position.
it is only an issue in a few places on the board, so i currently play around it.
as you say, I'm also getting used to the fact, that if you play one touch, hold it, and add another touch close (so a chord) it does require more pressure - guess it will take a short while to get used to this, but definitely worthwhile for the other advantages.
as i said really grateful for the effort you have put into it, its hard to tell with 'feel', but from my initially playing it does feel like a big improvement.
p.s. let me us know when the source code is up to date for SP and ML repo, as id like to update my fork to use the new code :)
Thanks Mark. I'm glad you were excited to check this out and get back to me. Your feedback is very encouraging, and confirms that my new picture, both in improvements and a few remaining problems, reflects reality! After so much work on one thing it's a relief.
I also found that MIDI velocity is not working well. This should be a quick fix. I'll continue to adjust the "slide" distance for a good feel and possibly add this as an expert setting.
I am thinking about a new calibration routine that will work just as you suggest. I wanted to confirm that the underlying layer was working well first.
My next step is to clean up the repo and make the tracker module compile in our embedded world, which means giving up on a few C++11 niceties I'd gotten used to and removing some dependencies.
First quick test :
For me, adjacent touches doesn’t work well :
Adjacent touches aren’t detected
When there’s a square between two touches, the second touche substract something on the first touch that disappear even if you continue to sustain.
Thanks for this work
Adjacent touches should be possible now but only on the opposite sides of keys, and only with care and extra pressure. The centers of the touches must be > 1.5 key widths apart. So, if key edges are at (0, 1, 2), the touches must be within the range (0, 0.25) and (1.75, 2). I'll work on reducing the pressure required in the future. If you look at the "pings" display you can see what might be possible.
I am thinking of adding a "join" mode where a touch directly on the edge triggers both keys. There are some details to work out, but I think this could be a useful option. It breaks the "continuous" use of moving touches but could allow more chords to be played.
Thanks for all the hard work, Randy! This thing is awesome. Overall, much more playable and musically stable. I just got lost playing for an hour or so and didn't hear a single ghost note or something that made me stop and move into diagnostic mode. On to practicing more!
I will also confirm what Mark said about the boundary between the the top 1/2 and 4/5 seem a bit nebulous in places. However, it seems more intermittent and subtle than the previous tracker. Either I'm adapting to it more easily or the tracker is adapting to me more easily. Or both.
Great job and thanks again for a wonderful instrument.
Overall, much more playable and musically stable. I just got lost playing for an hour or so and didn't hear a single ghost note or something that made me stop and move into diagnostic mode. On to practicing more!
I'm very very glad to hear this.
This is just the first version of a tracker using this new technique. Improvements will follow, including some way to calibrate or correct for the wobbly y boundaries.
this is all great news :)
if you can improve the boundaries, that will make a huge difference for me, in the previous version I rarely used the top/bottom rows, as I couldn't be 100% sure it'd trigger the correct note.
when doing the boundaries, perhaps you can also work out (or even estimate) the useable area of the top and bottom row, so that why can be scaled to that...
e.g. if 50% of the top row perhaps its better, to have Y run 0..1 over that 50%?
another observation, so you talked about x/y and turning up to x10, and then using lo thresh to get rid of green patches... so I did this (though even without , I wasn't getting false triggers) , I turned it up to about 0.12-0.13 (default of 0.10).. and they disappeared, but noticed after about 5 minutes of playing, they seem to be appearing again, so turned it to .14, gone, then a few minutes, .15 etc...
but got distracted, turned off the SP/SP app... can back after a while, and noticed I could turned it down to .12/3 again
always the green patches in the same area (centre, most played/worn ? ... I couldn't really figure if this was a 'software' issue, or if the surface is 'warming up', perhaps not returning to the 'same point'
( as I said, it wasn't causing any false triggers, I was merely following your instructions above-- so perhaps this is expected, nothing to 'worry' about)
Yes, I think your experience with the green patches is just the surface not going back to its rest state completely. This shouldn't be a problem. The tracker is designed to ignore those little blips if they don't correspond to a touch. If you have the main page "thresh" set very low to respond to the softest touches possible, it could be more of an issue.
The areas where they appear most may be due to both the long-term compression and the fact that certain carriers have more background noise.
so I got distracted and left the SP turned on for about an hour or so, untouched - when I came back there were lots of green patches in the middle...I had to turn it to 0.20 to get rid of them all.
but then by chance, I decided to hit 'recalibrate' ... and they all disappeared, even when turned down to 0.10 .. is this what you would expect?
It's hard to say from here— it could be either that a new source of radio interference appeared, or that a mechanical shift took place. Once in a while I see a variation I think is from radio noise here but it tends to be more minor.
When the new detector is deployed I could think about some kind of auto-calibration again.
After a long time away from the SP I just lost myself for three hours with the new tracker and aalto - a marked improvement. In the past I struggled to find a calibration that provided a consistent and predictable response over time. The new tracker seems much easier to dial in.
I am unable to get adjacent touches to work with continuous pressure (the touches always merge) but trills are working very reliably (much more so than with the older tracker).
Awesome step forward. I look forward to the eurorack interface as well.
(When I get a chance I'll test out the Kyma support as well and confirm that is working well).
Good to hear. I'll be working to make adjacent touches easier. They really need to be on the outermost edges of the adjacent keys.
I heard that Kyma communication is still broken. I'll be sending out another beta to try very soon.
A new beta: Soundplane 1.5.0b2.
The only changes from b1 are attempts to get Kyma working. So, if you don't have a Kyma you probably don't want to bother with this.
if I want to build, is the 'embedded' branch, the latest and greatest? and are all the necessary changes to madronalib already checked in?
also do you know if the cpu load has dropped with the new tracker?
generally, thinking about updating my fork, to get my midi goodies... and also the mec repo, so I can test it again on my bela.
Everything is there and would theoretically compile. I'm checking in all the changes to the embedded branch currently, and will merge it back into master and clean up compilation instructions / dependencies when the software is out of beta.
I'm going to be changing the API around the TouchTracker module before that release, again for better compatibility with the embedded code.
Then there's note-on velocity, which happens in the tracker and really isn't done yet.
All this is to say, if I were you I'd wait a bit more until I send out something with proper velocity and a new API.
I haven't done any work on optimizing yet. So the new code may even be slower. But due to the new algorithm I know it has the potential to be much faster.
Right now I'm mostly working on a much-needed update to Kaivo. I appreciate your patience.
I finally had some time to try out the new software. I'm getting a lot of very noticeable latency. Are there some tweaks I need to make so that my soundplane is as responsive as before? Thanks.
@jeffreypierce Latency should be a bit lower for the new software.
My guess is you are describing a problem I've seen where OSC communication gets "stuck" at a very high latency sometimes. The trigger seems to be high CPU load. I would try rebooting or using MIDI to see if this is the issue.
Future versions of the app will be optimized, so hopefully you can do whatever you were trying to and the CPU load won't be such an issue.
Had a chance to play with this new driver for a few hours last night. Great job! It feels amazing compared to the old one, especially the bottom and top rows. I've always had some issues with ghost notes on the far right of my board too and that seems to be no more.
Only issue so far was the surface being extra noisy, but after playing for a bit and re-calibrating the carriers a few times it calmed down.
Very happy right now, I expect to be playing a lot more sndpln in the near future.
Hmm I can't seem to get it to open without crashing immediately. Are there any changes in system requirements to run the beta? I'm on a Macbook osx 10.8.5.
Did you try the beta 1? It should still be linked above. Another person had the same issue with the beta 2 but not #1.
Yeah they both don't seem to work for me. The beta 1 attempts to open and then crashes, and the beta 2 doesn't start up at all.
Looks like I have been building for 10.9 and up. I'll see what I can do to support 10.8.