Is there any VST host that doesn't quantize live MIDI ?
-
- KVRAF
- 4229 posts since 9 Apr, 2003 from Right here, in front of my computer...
-
- KVRian
- Topic Starter
- 1239 posts since 17 Jul, 2003
I tried a couple of host, SX3, Sonar4, Ext, Forte, .. and they all have the same behaviour.
An event that reached the host just after the buffer was sent to the audio driver, and one received just before sending the next one will have the exact same timestamp from the VSTi point of view.
This is only when playing live, as the idea was to output that note as soon as possible.
What I'm looking for is a host that will send each event relative to the moment it was received by the host.
So that an event, received at the beginning of the buffer time will be played at the beginning of the next buffer, and an event that was received at the end of the current buffer, will play at the end of the next buffer.
All these hosts will play ANY event at the beginning of the next buffer, believe me or not.
Now I don't know if it's called jitter, I call it quantizing, as it's exactly what it does.
An event that reached the host just after the buffer was sent to the audio driver, and one received just before sending the next one will have the exact same timestamp from the VSTi point of view.
This is only when playing live, as the idea was to output that note as soon as possible.
What I'm looking for is a host that will send each event relative to the moment it was received by the host.
So that an event, received at the beginning of the buffer time will be played at the beginning of the next buffer, and an event that was received at the end of the current buffer, will play at the end of the next buffer.
All these hosts will play ANY event at the beginning of the next buffer, believe me or not.
Now I don't know if it's called jitter, I call it quantizing, as it's exactly what it does.
-
- KVRAF
- 3948 posts since 8 Sep, 2003 from germany
Don't want to make too many guesses as I have no idea what could be causing this, but did you already think about if this isn't an issue with
a) the used ASIO driver
b) your VST Monitoring plugin (plugin itself, or position in the signal chain) ?
a) the used ASIO driver
b) your VST Monitoring plugin (plugin itself, or position in the signal chain) ?
-
- KVRian
- Topic Starter
- 1239 posts since 17 Jul, 2003
You guys are amazing, just can't believe that all these years you played with quantized live MIDI and didn't notice anything ?
BTW., identical story with vst host automation, it's NOT sample accurate. Changing the audio buffer will change the way a plug responds to automation (curve, ramp).
BTW., identical story with vst host automation, it's NOT sample accurate. Changing the audio buffer will change the way a plug responds to automation (curve, ramp).
-
- KVRAF
- 3948 posts since 8 Sep, 2003 from germany
someone move this to offtpic before it's too late 
-
- KVRian
- Topic Starter
- 1239 posts since 17 Jul, 2003
You can try that yourself:
Set your ASIO buffer to 2048
In your sequencer, create 2 notes 10 msec apart., which is a little less than 1/128 at 120 bpm.
http://homepage.hispeed.ch/mbncp/downlo ... midi-1.gif
Now repeat the parts and alternate them in 2 tracks:
http://homepage.hispeed.ch/mbncp/downlo ... midi-2.gif
The first track (blue parts) is normal playback from the host to the VSTi.
The second sends the events to a virtual MIDI port, and the third one gets the live MIDI and sends it to the same VSTi. Note that a virtual MIDI port (yoke, maple, loopbe,..) has nearly 0 latency, at least smaller than 1 sample at 44.1 kHz, so it doesn't influence the test.
I recorded the output with VoxengoRecorder and this is the result:
http://homepage.hispeed.ch/mbncp/downlo ... midi-3.gif (enlarge for better viewing)
And the wav file (5 mb !!)
http://homepage.hispeed.ch/mbncp/download/live-midi.wav
You can see and hear (I hope) that the blue parts are always the same, at 10 msec interval. While the live MIDI, either didn't make it in the same buffer call (part 2 and 4) which makes the interval larger than 10 msec (1 buffer size), or made it in the same call (part 6,8,10,12) and play exactly at the same time.
This was made using SX3, but you will get identical results in any host, except the one I'm looking for
Set your ASIO buffer to 2048
In your sequencer, create 2 notes 10 msec apart., which is a little less than 1/128 at 120 bpm.
http://homepage.hispeed.ch/mbncp/downlo ... midi-1.gif
Now repeat the parts and alternate them in 2 tracks:
http://homepage.hispeed.ch/mbncp/downlo ... midi-2.gif
The first track (blue parts) is normal playback from the host to the VSTi.
The second sends the events to a virtual MIDI port, and the third one gets the live MIDI and sends it to the same VSTi. Note that a virtual MIDI port (yoke, maple, loopbe,..) has nearly 0 latency, at least smaller than 1 sample at 44.1 kHz, so it doesn't influence the test.
I recorded the output with VoxengoRecorder and this is the result:
http://homepage.hispeed.ch/mbncp/downlo ... midi-3.gif (enlarge for better viewing)
And the wav file (5 mb !!)
http://homepage.hispeed.ch/mbncp/download/live-midi.wav
You can see and hear (I hope) that the blue parts are always the same, at 10 msec interval. While the live MIDI, either didn't make it in the same buffer call (part 2 and 4) which makes the interval larger than 10 msec (1 buffer size), or made it in the same call (part 6,8,10,12) and play exactly at the same time.
This was made using SX3, but you will get identical results in any host, except the one I'm looking for
-
- KVRist
- 95 posts since 22 Aug, 2001 from US
I'm surprised more people don't complain...this is one of my issues playing my drum controller or Yamaha AG also. I've found hosting eXT VSTi inside Phrazor gives me a live setup with satisfying results,...so checkout Phrazor (still may be $29 pre-order)mbncp wrote:You guys are amazing, just can't believe that all these years you played with quantized live MIDI and didn't notice anything ?![]()
BTW., identical story with vst host automation, it's NOT sample accurate. Changing the audio buffer will change the way a plug responds to automation (curve, ramp).
-
- KVRAF
- 4229 posts since 9 Apr, 2003 from Right here, in front of my computer...
Plenty of people played electronic keyboards for years without complaining, although many of those key scanning mechanisms and slow processors would give you horrendous note latency...mbncp wrote:You guys are amazing, just can't believe that all these years you played with quantized live MIDI and didn't notice anything ?![]()
And yes, you are referring to output buffer jitter, as I mentioned, and it's only an issue on live playing as far as I'm aware - when playing sequences back, the DAW can correctly output buffers for the required audio and everything should be sample accurate. It's only on live playing, where the DAW can only react *after* a note has been played (ie, it can't read your mind!), that this issue can show up.
Let's put it into perspective though, we're usually talking of something like (without getting technical) a fraction of an output buffer, so it's below the typically latency exhibited by any DAW anyway. So if you can happily play live at the latencies you currently enjoy, then the output buffer issue is usually less, and in the worse case, the same as the typical system latency.
In other words, not that noticeable to most.
-
- KVRian
- Topic Starter
- 1239 posts since 17 Jul, 2003
Pretty amazing indeed. Actually I would prefer a constant 10 msec latency, than a 5 msec jitter. When you are at a certain distance from your guitar amp (not the virtual one), you have some latency too (it's about 3 msec for each meter I think), and this isn't really a problem as it is constant.MotorsKill23 wrote:I'm surprised more people don't complain...this is one of my issues playing my drum controller or Yamaha AG also. I've found hosting eXT VSTi inside Phrazor gives me a live setup with satisfying results,...so checkout Phrazor (still may be $29 pre-order)mbncp wrote:You guys are amazing, just can't believe that all these years you played with quantized live MIDI and didn't notice anything ?![]()
BTW., identical story with vst host automation, it's NOT sample accurate. Changing the audio buffer will change the way a plug responds to automation (curve, ramp).
I will check Phrazor, but I just noticed that the free or donation VstHost http://www.hermannseib.com/english/vsthost.htm, doesn't quantize live input. I will give it a try.
An easy way to check if a host is quantizing live MIDI using this small VSTSPY plug:
http://homepage.hispeed.ch/mbncp/download/VstSpy.zip
You will need a monitor window (dbmon.exe, dbwin32.exe,..)
MIDI events will display like this:
1092 12492109 01 22 90 076 077 000 000000 000 000000
Fields are: GetCurrentThreadId, timeGetTime, event #, deltaFrames, status (hex), data1, data2, noteOffVelocity, noteLength, detune, noteOffset.
- KVRAF
- 16793 posts since 8 Mar, 2005 from Utrecht, Holland
Yes, there are other complaints, but these are rare.
http://www.kvraudio.com/forum/viewtopic.php?t=68804
http://www.kvraudio.com/forum/viewtopic.php?t=103998
I just explained in another thread that you have to live with the max. throughput of about 1000 midi note-on messages per second when transferring data over a real hardware midi connection. Just the way things are I'm afraid.
http://www.kvraudio.com/forum/viewtopic.php?t=68804
http://www.kvraudio.com/forum/viewtopic.php?t=103998
I just explained in another thread that you have to live with the max. throughput of about 1000 midi note-on messages per second when transferring data over a real hardware midi connection. Just the way things are I'm afraid.
We are the KVR collective. Resistance is futile. You will be assimilated. 
My MusicCalc is served over https!!
My MusicCalc is served over https!!
-
- KVRian
- Topic Starter
- 1239 posts since 17 Jul, 2003
Sorry, but I don't fully agree with youBertKoor wrote:Yes, there are other complaints, but these are rare.
http://www.kvraudio.com/forum/viewtopic.php?t=68804
http://www.kvraudio.com/forum/viewtopic.php?t=103998
I just explained in another thread that you have to live with the max. throughput of 1300 midi note-on messages per second when transferring data over a real hardware midi connection. Just the way things are I'm afraid.
I know that we already have jitter from the MIDI controller, then from the MIDI interface, but there is no reason that a host ads more.
If Hermann with his VStHost was able to sync live input why would an apps like Cubase, Sonar, Ext,.. not being able to do so.
Now that we have a canDoSendVstMidiEventFlagIsRealtime in VST2.4, hopefully SX4 and other major hosts won't quantize live MIDI anymore.
Again this is not only a problem when playing live, but if you want to use your host from a MIDI only sequencer with a large buffer (lot's of fx, synth,..), you will get some funny "quantizing".
- KVRian
- 936 posts since 29 May, 2002 from UK
No offence mbncp, but you're not even considering the possibility that your particular hardware setup is causing (or making worse) the problem. You say it happens with all the sequencers you've tried on your system, then it IS possible that the system itself is glitchy. Perhaps a lot more glitchy than most with regards to timing.
It's a well known fact that some motherboard - usb midi controller keyboard combinations etc behave more erraticaly than others. If you list the interfaces, midi controller, soundcard, mobo type etc etc, that might help give a clearer picture
*edit* I too experienced some problems with the latest SX3, that is until i switched on the use system timestamp mode, and this killed off the jitter issues for me completely, and I have a good ear for timing.
It's a well known fact that some motherboard - usb midi controller keyboard combinations etc behave more erraticaly than others. If you list the interfaces, midi controller, soundcard, mobo type etc etc, that might help give a clearer picture
*edit* I too experienced some problems with the latest SX3, that is until i switched on the use system timestamp mode, and this killed off the jitter issues for me completely, and I have a good ear for timing.
-
- KVRian
- Topic Starter
- 1239 posts since 17 Jul, 2003
No offence Arksun, but you didn't get it 
This is a matter of facts and has nothing to do with hardware or anything.
A host will send a packed of MIDI events, just before processing the audio buffer. These events have a timestamp related to the start of the next audio buffer.
Now, almost all host will fill that value with a nice zero whenever they get a live MIDI event. I don't know exactly why, maybe because no one complains and it's easier to do so.
That means that a host which receives 10 events at an interval of 1 msec will send these events with a timestamp of zero, though they record them correctly. If some events arrive to late, they will be sent in the next call, also filled with a timestamp of zero. That means, if you have a buffer of 10 msec, all your events get quantized to these 10 msec. And this has nothing to do with hardware, Ignoretimestamp, or anything, it's just the way it works.
Ask Jorgen, Charly, Tobybear, Ron or Babya, they will all tell you the same thing (sorry for the ones I forgot to mention).
Only exception (so far), VSTHOST from Hermann, though it has a little bug, after changing the MIDI port all events are back to zero. Neverless, it works, I sent the MIDI track (virtual driver) to VstHost and recorded the output:
http://homepage.hispeed.ch/mbncp/downlo ... st-rec.wav
Off course this time all events are played live, and though there are a few minor timing errors, it's almost perfect, and again with a buffer of 2048 samples.
Well done Hermann
This is a matter of facts and has nothing to do with hardware or anything.
A host will send a packed of MIDI events, just before processing the audio buffer. These events have a timestamp related to the start of the next audio buffer.
Now, almost all host will fill that value with a nice zero whenever they get a live MIDI event. I don't know exactly why, maybe because no one complains and it's easier to do so.
That means that a host which receives 10 events at an interval of 1 msec will send these events with a timestamp of zero, though they record them correctly. If some events arrive to late, they will be sent in the next call, also filled with a timestamp of zero. That means, if you have a buffer of 10 msec, all your events get quantized to these 10 msec. And this has nothing to do with hardware, Ignoretimestamp, or anything, it's just the way it works.
Ask Jorgen, Charly, Tobybear, Ron or Babya, they will all tell you the same thing (sorry for the ones I forgot to mention).
Only exception (so far), VSTHOST from Hermann, though it has a little bug, after changing the MIDI port all events are back to zero. Neverless, it works, I sent the MIDI track (virtual driver) to VstHost and recorded the output:
http://homepage.hispeed.ch/mbncp/downlo ... st-rec.wav
Off course this time all events are played live, and though there are a few minor timing errors, it's almost perfect, and again with a buffer of 2048 samples.
Well done Hermann
- KVRian
- 936 posts since 29 May, 2002 from UK
My point is that your hardware setup DOES also play a part in timing, you're ONLY looking at it from that code perspective. I'm looking at it from the real world actual use what i'm hearing with my ears point of view 
I'm not saying this is a hardware issue only, what I am saying is that that too plays a part as to how bad the problem is percieved and, I suspect in your case the two combined make it too noticeable and a problem.
I'm sorry the drifts are so bad with your setup, on mine, using midex8 with native directsound and system timestamp on it sounds solid now.
I'm not saying this is a hardware issue only, what I am saying is that that too plays a part as to how bad the problem is percieved and, I suspect in your case the two combined make it too noticeable and a problem.
I'm sorry the drifts are so bad with your setup, on mine, using midex8 with native directsound and system timestamp on it sounds solid now.
-
- KVRAF
- 4229 posts since 9 Apr, 2003 from Right here, in front of my computer...
