How Breath Rate affects Latency
-
At the suggestion of @join, I tested how the Breath Rate setting on the Sylphyo affect the time it takes to go from the Breath Impulse to the appearance of MIDI on the Link. The setting is located in MIDI Mappings => Breath => More Options => Breath Rate.
As I expected, as I reduced the scanning frequency from Max down to Low, the delay in recieving the MIDI Note on climbed from 9.18 to 12.77 msec. However ...
When I set Breath Rate to Low - reporting a paltry 63 times per second - Latency plummeted to 7.87 msec.
Could anyone suggest why this happens? Has anyone else seen this behavior??
I did 10 tests for each case and plotted the average, the +/- standard deviation, and the min and max values:
A full listing of my other settings are in this other thread.
-
Hm ... pretty large standard deviation ...
What can be the cause for such variations and do they play a role for general latency?That's maybe Jitter. The higher the breath rate, the more jitter you get. Here are MIDI Jitter measurements from a Sylphyo connected via USB:
The first graph is just a breath example for the test, don't compare it to the other graphs. Please do not trust the 1000 Hz graph because this seems to go beyond the border of my measurement possibilities.
If a "jitter interpreter" drops unrealistic jumps instead of interpolating the history, you may get less "good" events and therefore, in an unlucky moment, more latency with a high breath rate than with the tamer jitter of lower rates. An unlucky moment could be right at the start of playing, at least this may be part of explanation why you get the best attack at the lowest rate, where almost every event counts. This is just a wild theory but as good as many others :-)
But the most important question, after you switched back from technician to musician again:
Do you actually feel a better attack with the lowest breath rate? It's clear that slow rates do not allow advanced techniques like flutter tounge, but is the overall feeling different? Specifically for the attack I would expect a timing difference between Sylphyo's audio out and any MIDI process but not so much between settings of MIDI processes. Well, for a MIDI guitar the attack is very important, but for a wind instrument ... ?I'm not a trained horn player, but I can't create a puff of air that is comparable to the attack of a string or a key.
-
Nice jitter analysis! I'm new to all this latency stuff, but bending my brain around it.
My Sylphyo needed a reset after all the hundreds of settting changes, so I decided to review my entire Sylphyo config and (now that I understand things a lot better) made some fundamental changes.
My feeling is that my prior testing is highly dependent on my prior settings. I'll basically need to re-test with the new settings (shown below).
Two interesting techniques I've stumbled on:
-
Humming into the flute is a great way to see how a sound module behaves at rapid-fire breath pressure changes and/or lots of note-on/note-off pairs per sec.
-
Playing into speakers and changing your distance from those speakers. At one msec per foot, I got to experience the sound/feel of adding another 20msec of latency. Works great with a dry sound. Great ear training for latency.
>>> Setting Changes
Here are the mods I've made in my setup, with some rationale. These changes have made, for me, a substantial improvement in playability and latency. My full setup is listed below.
MIDI Mapping / Breath / Breath rate: Low (125 Hz) ==> High (500 Hz)
After all my testing (rather than real playing) it turns out that Low (125 Hz) simply doesn't work on my VL70-m. Not usable. Don't know exactly why, but after exercising the VL70-m, XpressO, and Respiro, High (500 Hz) is the winner.
Max (1 kHz) overloads the VL70-m.
MIDI Mapping / Breath / Delay notes if needed: On ==> Off
Turned this off on general principle. I can see the results in the MIDI stream, but have not (yet) heard any real-world results from this setting.
Note that the "syndrome" described below (in Note-off delay) does NOT seem to be affected by whether this setting is ON or OFF.
MIDI Mapping / Velocity: Dynamic, 20ms, 127 ==> 1, ---, ---
To eliminate the 20ms delay in determining the dynamic velocity. The VL70-m and XpressO seem OK with this.
MIDI Mapping / Note-off delay: 10ms ==> 1ms
Lowered in a general bid to improve latency. I see the change in the MIDI stream, but cannot detect a real-world difference in Respiro or the VL70-m. Setting this value too high (like 60ms) induces a syndrome where, occasionally during extremely fast legato runs with Respiro, sound will come to an end.
It looks like a MIDI sequencing issue - there is no pending Note On even though Breath Controller data is still flowing.
Breath / Curve: Log ==> Linear
Change from Log to Linear produces much better response at low breath pressures. This long-standing issue (error) was born in the days when I was wrestling with "grit" from aliasing as Breath Controller values hovered around 0-1-2-3-2-3-2-1-0 levels. I had applied the Log curve, thinking it was something line an exponential curve, when actually the Log increases its output quickly from low breath pressures.
Breath / Filtering: On ==> Off
Based on the description, this should have been off all-along. Interesting to note that Pedro Eustache [PE] had this set ON in his May 2019 settings.
Keys / Reaction time: 20ms ==> 1ms
A good test is whether intermediate notes are heard when doing a trill involving multiple fingers. On NativeFlute, trilling between <ooo|xoo and <xxo|xoo is a good test. If there are intermediate transient fingerings of <oxo|xoo, then an octave-up "pop" will be heard in addition to the two intended trill pitch. However, this is an extreme case. In practice, a trill between <xxx|xxx and <xxx|xoo is more representative of real play, and an accidental transient note of <xxx|xxo is hardly noticable (if at all).
In tests on 12/1/2021, using Respiro and the <ooo|xoo and <xxo|xoo trill, I got frequent pops at 1ms, occasional pops at 10ms, and almost no pops at 15 ms. However, I am chosing 1ms now because of the excellent responsive play on the VL70-m in exchange for an occasional unintended transient note in oddball situations.
Keys / More Sensitive: On ==> Off
Not much info on this setting. I'm turning it off to see what happens.
>>> Full Settings
Clint's Configuration Settings for the Aodyo Sylphyo Firmware version: 1.4.8 As of 12/01/2021 %% A non-default setting (these are the only ones that need to be changed after a Reset). ## A setting that significantly affects the typical MIDI playability of the instrument. * Sound Volume: 100% %% Reverb: 70% %% * MIDI Mapping Breath: CC 2, --, -- %% Breath rate: High (500 Hz) %% ## ...per CC: On Delay notes if needed: Off %% ## Velocity: 1 %% ## Capture delay: 20ms Max. velocity: 127 %% Slider ctrl. CC 1 Top slider ctrl. CC 12 Btm. slider ctrl. CC 13 Elevation ctrl. CC 75 Roll ctrl. CC 76 Compass ctrl. CC 77 Key-bend ctrl. CC 78 Program change > Off, ---, --- Note-off delay: 1ms %% ## * Breath Minimum: 20 Range: 600 Curve: Linear %% ## Filtering: Off %% ## * Keys Fingering: NativeFlute+ %% Octaves: 5(+2) octaves Invert ocatves: Disabled Left pinky: -1st: Disabled Right pinky: +1st: Disabled Replay same note: Disabled Reaction time: 1ms %% ## R.time octaves: 30ms More sensitive: Disabled %% ## Key-bend (BETA): PB+ %% Key noise (BETA): Disabled * Slider Function: Control (latch) Top edge: Bend - Btm. edge: Control Edge size: 9mm * Movement Shake to move: On Shake vibrato: On Range: 20% %% Sensitivity: 43% Threshold: 9% Elevation control: On Bidirectional: Off Absolute: Off Range: +-35 degrees Roll control: On Bidirectional: Off Absolute: Off Range: +-20 degrees Compass ctrl. (BETA): On Absolute: Off Bidirectional: Off Range: +-20 degrees %% Always on: Off ---- * Base Key: A3 %% * Output: MIDI ch. 1 ---- * Invert Display: Off * Receiver device: Connected CH 23 * LED: Off
-
-
If a note Off is delayed, then there is a moment that two notes are ON. This might cause a mini legato / glide in Respiro.
If the Respiro note transition is set to Synth mode then you will have less pops versus when you use the Real mode.
I would need to dig into the Sylphyo to understand the way it deals with key glitches. But typically when using certain fingering transitions, glitches can occurs due to the changing keystroke (not all fingers in sync). I think this is why the Key / Reaction time parameter exist. Typically keystrokes less than 20ms are glitches. Therefore setting this value to 1ms will probably not filter glitches keystrokes and provide a more snappy response to your fingering BUT it demands that you master your fingering technique...Respiro is responding super fast to note changes and a glitch note during playing can result in a create a pop.
With other words, if you set the reaction time to 1ms, then I would advice Respiro in Synth Mode and increase the value till pops are gone...
Hope this helps ;-)
-