Note On Pitch "yip" with quantize off
- KVRer
- 25 posts since 1 May, 2013 from Portland Oregon USA
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.)
-
- KVRAF
- 1651 posts since 2 Apr, 2015
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.
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.
-
- KVRAF
- 1651 posts since 2 Apr, 2015
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:
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.
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
The only thing I can think of is the decimation code, but that makes little sense.
Bitwig, against the constitution.
-
- KVRist
- Topic Starter
- 36 posts since 25 Aug, 2006
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.
-
- KVRian
- 645 posts since 12 Sep, 2007
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
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
-
- KVRist
- Topic Starter
- 36 posts since 25 Aug, 2006
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.
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.
-
FranklyFlawless FranklyFlawless https://www.kvraudio.com/forum/memberlist.php?mode=viewprofile&u=586325
- KVRian
- 877 posts since 24 Oct, 2022 from Abbotsford, British Columbia
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.
-
shutterdownmax shutterdownmax https://www.kvraudio.com/forum/memberlist.php?mode=viewprofile&u=370803
- KVRist
- 63 posts since 6 Dec, 2015
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.
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.
-
FranklyFlawless FranklyFlawless https://www.kvraudio.com/forum/memberlist.php?mode=viewprofile&u=586325
- KVRian
- 877 posts since 24 Oct, 2022 from Abbotsford, British Columbia
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.
-
- KVRist
- Topic Starter
- 36 posts since 25 Aug, 2006
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.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.
-
- KVRist
- Topic Starter
- 36 posts since 25 Aug, 2006
Also note that this should only be 'fixed' when quantize is off. Getting rid of reset to 0 might break the quantized modes.
-
FranklyFlawless FranklyFlawless https://www.kvraudio.com/forum/memberlist.php?mode=viewprofile&u=586325
- KVRian
- 877 posts since 24 Oct, 2022 from Abbotsford, British Columbia
Okay, I appreciate the insight and will revert my latest commit.
-
shutterdownmax shutterdownmax https://www.kvraudio.com/forum/memberlist.php?mode=viewprofile&u=370803
- KVRist
- 63 posts since 6 Dec, 2015
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.
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.
-
- KVRist
- Topic Starter
- 36 posts since 25 Aug, 2006
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:
with quantize off:
(I submitted a pull request in case that's how the project works)
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
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