Note On Pitch "yip" with quantize off

Official support for: rogerlinndesign.com
RELATED
PRODUCTS

Post

Perhaps someone could try reverting to an older version of the firmware, to see if this issue is recent, or if it's always been around. (Beware, older versions will delete your user settings and calibration data.)

Post

From memory the sensors in the LS take a time to stabilise, the code uses a certain time period to get a "correct" value. There has been a lot of talk on the forum about this time and the pressure value. The firmware I guess could be changed to minimise this time at the cost of accuracy and also delay the note on until the values have been calculated with the cost of higher latency.

Another thing is that most synths smooth/lag pitchbend over a period of time, you can test this out with a DAW, draw in a square wave PB and listen to the synth. This is really annoying with midi guitars where pitchbend can be used instead on a note on when a previous note is playing on the same string.

Might be worth checking this out on the synth you are using and seeing if the yips are still there, maybe the majority of yippiness is coming from the smooth/lag in the synth.
Bitwig, against the constitution.

Post

I had a quick look at the code, the sensor reading time is not an issue.

Correct Y values are sent before the Note on, but X and Z are delayed by 10ms:

Code: Select all

10:27:56.910	From LinnStrument MIDI	Pitch Wheel	15	0
10:27:56.913	From LinnStrument MIDI	Control	15	74	127
10:27:56.913	From LinnStrument MIDI	Channel Pressure	15	0
10:27:56.913	From LinnStrument MIDI	Note On	15	G3	127
10:27:56.923	From LinnStrument MIDI	Pitch Wheel	15	65
10:27:56.923	From LinnStrument MIDI	Channel Pressure	15	127
For the life of me I can't find the code that is introducing the 10 ms delay.

The only thing I can think of is the decimation code, but that makes little sense.
Bitwig, against the constitution.

Post

Deleted, I was talking rubbish.
Bitwig, against the constitution.

Post

TallKite wrote: Sun Mar 24, 2024 8:21 am Perhaps someone could try reverting to an older version of the firmware, to see if this issue is recent, or if it's always been around. (Beware, older versions will delete your user settings and calibration data.)
Looks like it has been there quite a while (if this is the code path in question, my first time looking at the code)

The commit message says "Improvements to MIDI message sequence before note on, to ensure an as stable state as possible before the note sounds." but I think it went too far.

Again I appreciate people's attempts to help with info on slew etc but I am well aware of these things. Also, I write my own MIDI processing code and I can't determine the actual pitch at note on because of this reset-first, truth later approach.

IMO the Continuum's behavior is correct here.

Post

Hey Rich,
well your comparison to Continuum's behavior is unfair and truly an apples to oranges comparison. If I understand your issue properly, lets talk about the differences.

I'll start with price, Haaken's are 4-5 x the cost of Linnstrument.

Continuum is a truly "fretless" controller, you can start a note anywhere along the virtual string length. Despite Linnstrument looking and feeling fretless, it's actually what I would consider a fretted instrument. Well actually inverted frets, but that's another issue. Personally 0 is where I want all notes to start for my playing purposes.

Well since you can code, you sound like the perfect candidate to create your own firmware for your own specific use case. I know there are several folks here who have done their own very successfully.

And just an FYI my Linnstrument is always set at 48 midi pitch bend, also my hardware synth is also set at midi pitch bend at 48.

Good luck,
Dirk

Post

First off, I am not starting a LinnStrument 'vs' Continuum fight. I love my LinnStrument, I've had it for many years (since a year after its introduction), some of my suggestions have made it into the firmware, and I have recently purchased a second unit. In fact it was when trying to simplify my setup emphasizing the LinnStrument as the centerpiece, even for continuous work, that I tripped up on this.

The difference in price between the Continuum and LinnStrument has more to do with the construction, components, and the fact that a Continuum is also a synthesizer with DSP chips etc. As MPE controllers however, they are in the same space.

In particular, the Continuum also marks out 'notes' across its surface and offers a 'quantized' mode where notes start in, (or move into over time, a great feature), perfect tune and can subsequently generate vibrato or glissandi, in addition to its unquantized/continuous mode. Both instruments are engaged in the same challenges of mapping their X/Y/Z expressive control into the language of MIDI, offering similar modes etc and thus it is instructive to examine how they both approach the same problems.

As someone who's played a fretted instrument for many decades I know the LinnStrument's pitch-crossing glissandi capabilities are not at all fret-like, and to relegate LinnStrument to being a 'fretted' instrument is to sell it well short of its capabilities.

That said, it's fine that you want all your notes to start at 0. You have the quantize mode for that. That's what modes and settings like "quantize" are for - so the instrument can adapt to the (differing) needs of each player. What I am saying is that the "unquantized" mode isn't in fact unquantized.

As far as "well you can code so write your own firmware" it's hard to take that as anything other than a personal brushoff. I could write my own DAW and synthesis software too, but then I wouldn't be making music.

FYI all 1:1 ratios between LS PB range and synth PB range will exhibit identical behavior relative to this problem. All increasing the PB range does is increase the total glissando range at the expense of precision - it does not affect how far the resulting pitch moves when your finger moves from one cell to the next (i.e. at all 1:1 ratios that will be one semitone), just how precisely it can be tracked, as higher PB ranges use a smaller number to represent 1 semitone than lower PB ranges.

Post

You will likely be waiting a while until Geert is able to respond to your issue and/or implement what you are looking for in the firmware. At least with the LinnStrument, the firmware is open-source and you do not have to wait around for developers to address issues on their own time. I suggest taking advantage of its benefits to fit your own needs, similar to what Kite and I are doing with our own custom firmwares.

Post

In the firmware, ls_handleTouches.ino, lines 1214 and 1215:
resetLastMidiPitchBend(sensorCell->channel);
preSendPitchBend(sensorSplit, 0, sensorCell->channel);

I commented these out and there is no longer a reset to 0 in my midi data.
I could send you my firmware if you're interested, but even though I trust me, it seems risky to install firmware from a rando on the interwebz.

Roger has really good instructions for how to make changes here: https://www.rogerlinndesign.com/support ... ource-code

Also bear in mind Geert is a much better linnstrument programmer than I and probably had those lines in there for a reason. However, the change seems fine to me after some testing. I like it, and will leave it this way.

Post

Thank you for your contribution Max. I will use this to modify my own custom firmware further and pass this on to Kite tomorrow during the weekly Jitsi Meet video conference.

Post

shutterdownmax wrote: Fri Apr 12, 2024 10:59 pm In the firmware, ls_handleTouches.ino, lines 1214 and 1215:
resetLastMidiPitchBend(sensorCell->channel);
preSendPitchBend(sensorSplit, 0, sensorCell->channel);


Also bear in mind Geert is a much better linnstrument programmer than I and probably had those lines in there for a reason. However, the change seems fine to me after some testing. I like it, and will leave it this way.
The problem is not that there's a reset. The problem is the reset is to 0 rather than to the new distance from cell center. There needs to be a reset since you are coming from some arbitrary pb from the prior note, which could yield an even bigger slide than coming from 0.

Post

Also note that this should only be 'fixed' when quantize is off. Getting rid of reset to 0 might break the quantized modes.

Post

Okay, I appreciate the insight and will revert my latest commit.

Post

I'm not going to argue about it; as I said I'm not a master of this firmware by any means. But the change is working for me. I take your point about the PB coming from an arbitrary value; that's what I was trying to get at in an earlier comment. However when I play, the pitch is starting right where I expect it to, and no yips from zero or elsewhere.

I did test the quantize modes and didn't find any problems, although maybe they would pop up in specific untested situations.

The pitch bend is set to 0 in other places as well, particularly lines 1812, 1828, 1839 in ls_midi.ino. This is where I first tried to eliminate the yips, but it had no effect, so i restored them. Maybe these lines are protecting the quantized mode, although it doesn't seem traightforward as there's no "if quantized" or anything like that there.

Post

I finally got some time to look at and work on the firmware. This change (in my forked repo) fixes it. It makes the reset to 0 conditional on the quantize setting.

With quantize on:

Code: Select all

16:06:36.478	From LinnStrument MIDI	Pitch Wheel	1	0
16:06:36.481	From LinnStrument MIDI	Note On	1	D♯4	83
16:06:36.490	From LinnStrument MIDI	Pitch Wheel	1	36
16:06:36.502	From LinnStrument MIDI	Pitch Wheel	1	24
16:06:36.521	From LinnStrument MIDI	Pitch Wheel	1	20
16:06:36.545	From LinnStrument MIDI	Pitch Wheel	1	24
16:06:36.557	From LinnStrument MIDI	Pitch Wheel	1	12
16:06:36.572	From LinnStrument MIDI	Note Off	1	D♯4	37
16:06:37.594	From LinnStrument MIDI	Pitch Wheel	1	0
16:06:37.603	From LinnStrument MIDI	Note On	1	A♯3	30
16:06:37.607	From LinnStrument MIDI	Pitch Wheel	1	8
16:06:37.619	From LinnStrument MIDI	Pitch Wheel	1	12
16:06:37.631	From LinnStrument MIDI	Pitch Wheel	1	8
16:06:37.644	From LinnStrument MIDI	Pitch Wheel	1	12
16:06:37.693	From LinnStrument MIDI	Pitch Wheel	1	8
16:06:37.713	From LinnStrument MIDI	Note Off	1	A♯3	36
16:06:38.929	From LinnStrument MIDI	Pitch Wheel	1	0
16:06:38.938	From LinnStrument MIDI	Note On	1	D♯4	67
16:06:38.942	From LinnStrument MIDI	Pitch Wheel	1	20
16:06:38.954	From LinnStrument MIDI	Pitch Wheel	1	-8
16:06:38.960	From LinnStrument MIDI	Pitch Wheel	1	0
16:06:38.978	From LinnStrument MIDI	Pitch Wheel	1	-8
16:06:38.985	From LinnStrument MIDI	Pitch Wheel	1	0
16:06:39.015	From LinnStrument MIDI	Pitch Wheel	1	8
16:06:39.041	From LinnStrument MIDI	Note Off	1	D♯4	51
with quantize off:

Code: Select all

16:07:04.698	From LinnStrument MIDI	Pitch Wheel	1	144
16:07:04.701	From LinnStrument MIDI	Note On	1	F4	43
16:07:04.710	From LinnStrument MIDI	Pitch Wheel	1	148
16:07:04.722	From LinnStrument MIDI	Pitch Wheel	1	156
16:07:04.734	From LinnStrument MIDI	Pitch Wheel	1	148
16:07:04.758	From LinnStrument MIDI	Pitch Wheel	1	156
16:07:04.771	From LinnStrument MIDI	Pitch Wheel	1	160
16:07:04.822	From LinnStrument MIDI	Note Off	1	F4	40
16:07:05.690	From LinnStrument MIDI	Pitch Wheel	1	96
16:07:05.699	From LinnStrument MIDI	Note On	1	C4	78
16:07:05.702	From LinnStrument MIDI	Pitch Wheel	1	104
16:07:05.720	From LinnStrument MIDI	Pitch Wheel	1	96
16:07:05.732	From LinnStrument MIDI	Pitch Wheel	1	104
16:07:05.762	From LinnStrument MIDI	Pitch Wheel	1	108
16:07:05.774	From LinnStrument MIDI	Pitch Wheel	1	116
16:07:05.799	From LinnStrument MIDI	Pitch Wheel	1	120
16:07:05.804	From LinnStrument MIDI	Pitch Wheel	1	108
16:07:05.817	From LinnStrument MIDI	Pitch Wheel	1	116
16:07:05.831	From LinnStrument MIDI	Note Off	1	C4	42
16:07:06.627	From LinnStrument MIDI	Pitch Wheel	1	148
16:07:06.637	From LinnStrument MIDI	Note On	1	F4	37
16:07:06.646	From LinnStrument MIDI	Pitch Wheel	1	156
16:07:06.658	From LinnStrument MIDI	Pitch Wheel	1	144
16:07:06.700	From LinnStrument MIDI	Pitch Wheel	1	148
16:07:06.712	From LinnStrument MIDI	Pitch Wheel	1	136
16:07:06.727	From LinnStrument MIDI	Note Off	1	F4	53
16:07:11.910	From LinnStrument MIDI	Pitch Wheel	1	-232
16:07:11.922	From LinnStrument MIDI	Note On	1	E4	26
16:07:11.922	From LinnStrument MIDI	Pitch Wheel	1	-244
16:07:11.934	From LinnStrument MIDI	Pitch Wheel	1	-232
16:07:11.947	From LinnStrument MIDI	Pitch Wheel	1	-228
16:07:11.959	From LinnStrument MIDI	Pitch Wheel	1	-232
16:07:11.971	From LinnStrument MIDI	Pitch Wheel	1	-228
16:07:11.983	From LinnStrument MIDI	Pitch Wheel	1	-232
16:07:11.996	From LinnStrument MIDI	Pitch Wheel	1	-236
16:07:12.008	From LinnStrument MIDI	Pitch Wheel	1	-232
16:07:12.026	From LinnStrument MIDI	Pitch Wheel	1	-236
16:07:12.035	From LinnStrument MIDI	Note Off	1	E4	34
(I submitted a pull request in case that's how the project works)

Post Reply

Return to “Roger Linn Design”