Analyse du jitter MIDI
- 32 réponses
- 8 participants
- 2 759 vues
- 10 followers
alex.d.
5534
Je poste, donc je suis
Membre depuis 9 ans
Sujet de la discussion Posté le 04/10/2016 à 00:51:29Analyse du jitter MIDI
Comme le sujet du jitter MIDI, en particulier en USB, déchaîne les passions ces jours-ci (entre le thread sur l'interface Alyseum et le sondage sur les interfaces), je me suis dit qu'il était temps d'avoir des faits et pas seulement des on-dit ou des idées préconçues.
J'utilise pour ces tests le MIDI Latency Analyser
https://expressiveelectronicsformusicians.com/our-products/midi-latency-analyser
Deux versions sont possible : l'une avec un câble spécial qui envoie le 5V du MIDI directement dans l'entrée audio permet d'analyser la latence directe du signal MIDI ; l'autre en envoyant le signal MIDI dans un synthé, puis analyse du fichier son obtenu pour évaluer la régularité du pattern. N'ayant pas le câble spécial, c'est cette version que j'ai utilisée. J'ai créé un fichier MIDI, tempo 120, notes à la croche, que je joue dans différents synthés. Si vous voulez faire tourner le test, astuce : le fichier audio doit être mono et obligatoirement en 96k. Ce n'est que du post-processing d'un fichier audio, rien ne tourne en temps-réel, ça tourne très bien dans wine pour les linuxiens (dont je fait partie).
Tous mes tests ont été réalisés sur mon vénérable Core i7 920, sous Debian sid, avec les paquets audio kxstudio, noyau Linux 4.6, séquenceur qtractor 0.7.8. J'utilise pour ce test une interface Miditech Midiface 4x4, qui tourne en USB 1.1 à 12Mb/s connectée à un Nordlead 2, un Moog Minitaur connecté en USB (un synthé qui inclut une connection USB-MIDI, c'est aussi une interface MIDI après tout), et un DSI Prophet 12 en USB. J'ai refait chaque mesure 3 fois pour vérifier la reproductibilité de la chose.
Je n'ai pas encore fait de capture d'écran des graphes de distribution, je donne juste le jitter moyen tel que mesuré par MLA :
-- interface USB Miditech Midiface 4x4, vers le Nordlead 2 : 0.546ms.
-- Prophet 12 USB : 0.901ms
-- Moog Minitaur : 0.608ms
Ces résultats, bien que pas parfaits, semblent quand même plutôt bon par rapport à ce qu'on trouve comme résultats publiés. On remarque également que l'interface MIDI-USB intégrée aux synthés n'est pas meilleure qu'une interface USB-MIDI d'entrée de gamme.
Pour comparaison, j'ai aussi soumis à MLA un enregistrement réalisé avec l'arpégiateur interne des synthés (sans synchro MIDI, entièrement standalone), pour avoir une base de comparaison :
-- arpégiateur du Nordlead 2 : 1.148ms
-- arpégiateur du Prophet 12 : 0.294ms
On remarque que les liaisons USB-MIDI, bien qu'imparfaites, ont un meilleur jitter que l'arpégiateur interne du Nordlead 2. C'est donc plutôt bon. Du coup, je me suis dit que le jitter mesuré pour la Miditech+NL2 venait peut-être plus du NL2 que de l'interface Miditech. Pour la blague, je soumet à l'épreuve mon vieil arrangeur Roland E16 :
-- interface USB Miditech Midiface 4x4, vers Roland E16 : 0.035ms
Non, ce n'est pas une faute de frappe. On est bien un ordre de grandeur meilleur que le meilleur des résultats précédent.
Comme le trafic sur l'interface MIDI est susceptible d'aggraver le jitter, je fais un test en bourrinant l'interface en même temps que je fais la mesure (des accords à 5 notes sur les autres ports en même temps que je réalise la mesure), et là on est à 0.594ms (toujours sur le E16), ce qui reste très très honorable.
Bilan : la Miditech s'en sort excellemment bien. L'USB-MIDI a globalement un jitter meilleur ou du même ordre de grandeur que le jitter du synthé lui-même (par son arpégiateur interne, par exemple). Dans la chaîne, le point faible pour le jitter n'est pas forcément l'USB mais ça peut-être le synthé lui-même (cas du Nordlead).
Je n'ai pas encore eu le temps de tout finir. Ce que je peux encore mesurer : le Streichfett (sur son port USB-MIDI), le Blofeld (USB-MIDI encore), en interface MIDI j'ai encore ma vieille SB Live (oui oui, celle de 1999) qui est débranchée mais encore dans mon PC, il faut juste que je trouve le courage de plonger derrière le rack pour la rebrancher. Ça ferait une bonne référence d'interface MIDI "à l'ancienne" sans USB.
N'hésitez pas à réaliser le test et à poster vos résultats.
J'utilise pour ces tests le MIDI Latency Analyser
https://expressiveelectronicsformusicians.com/our-products/midi-latency-analyser
Deux versions sont possible : l'une avec un câble spécial qui envoie le 5V du MIDI directement dans l'entrée audio permet d'analyser la latence directe du signal MIDI ; l'autre en envoyant le signal MIDI dans un synthé, puis analyse du fichier son obtenu pour évaluer la régularité du pattern. N'ayant pas le câble spécial, c'est cette version que j'ai utilisée. J'ai créé un fichier MIDI, tempo 120, notes à la croche, que je joue dans différents synthés. Si vous voulez faire tourner le test, astuce : le fichier audio doit être mono et obligatoirement en 96k. Ce n'est que du post-processing d'un fichier audio, rien ne tourne en temps-réel, ça tourne très bien dans wine pour les linuxiens (dont je fait partie).
Tous mes tests ont été réalisés sur mon vénérable Core i7 920, sous Debian sid, avec les paquets audio kxstudio, noyau Linux 4.6, séquenceur qtractor 0.7.8. J'utilise pour ce test une interface Miditech Midiface 4x4, qui tourne en USB 1.1 à 12Mb/s connectée à un Nordlead 2, un Moog Minitaur connecté en USB (un synthé qui inclut une connection USB-MIDI, c'est aussi une interface MIDI après tout), et un DSI Prophet 12 en USB. J'ai refait chaque mesure 3 fois pour vérifier la reproductibilité de la chose.
Je n'ai pas encore fait de capture d'écran des graphes de distribution, je donne juste le jitter moyen tel que mesuré par MLA :
-- interface USB Miditech Midiface 4x4, vers le Nordlead 2 : 0.546ms.
-- Prophet 12 USB : 0.901ms
-- Moog Minitaur : 0.608ms
Ces résultats, bien que pas parfaits, semblent quand même plutôt bon par rapport à ce qu'on trouve comme résultats publiés. On remarque également que l'interface MIDI-USB intégrée aux synthés n'est pas meilleure qu'une interface USB-MIDI d'entrée de gamme.
Pour comparaison, j'ai aussi soumis à MLA un enregistrement réalisé avec l'arpégiateur interne des synthés (sans synchro MIDI, entièrement standalone), pour avoir une base de comparaison :
-- arpégiateur du Nordlead 2 : 1.148ms
-- arpégiateur du Prophet 12 : 0.294ms
On remarque que les liaisons USB-MIDI, bien qu'imparfaites, ont un meilleur jitter que l'arpégiateur interne du Nordlead 2. C'est donc plutôt bon. Du coup, je me suis dit que le jitter mesuré pour la Miditech+NL2 venait peut-être plus du NL2 que de l'interface Miditech. Pour la blague, je soumet à l'épreuve mon vieil arrangeur Roland E16 :
-- interface USB Miditech Midiface 4x4, vers Roland E16 : 0.035ms
Non, ce n'est pas une faute de frappe. On est bien un ordre de grandeur meilleur que le meilleur des résultats précédent.
Comme le trafic sur l'interface MIDI est susceptible d'aggraver le jitter, je fais un test en bourrinant l'interface en même temps que je fais la mesure (des accords à 5 notes sur les autres ports en même temps que je réalise la mesure), et là on est à 0.594ms (toujours sur le E16), ce qui reste très très honorable.
Bilan : la Miditech s'en sort excellemment bien. L'USB-MIDI a globalement un jitter meilleur ou du même ordre de grandeur que le jitter du synthé lui-même (par son arpégiateur interne, par exemple). Dans la chaîne, le point faible pour le jitter n'est pas forcément l'USB mais ça peut-être le synthé lui-même (cas du Nordlead).
Je n'ai pas encore eu le temps de tout finir. Ce que je peux encore mesurer : le Streichfett (sur son port USB-MIDI), le Blofeld (USB-MIDI encore), en interface MIDI j'ai encore ma vieille SB Live (oui oui, celle de 1999) qui est débranchée mais encore dans mon PC, il faut juste que je trouve le courage de plonger derrière le rack pour la rebrancher. Ça ferait une bonne référence d'interface MIDI "à l'ancienne" sans USB.
N'hésitez pas à réaliser le test et à poster vos résultats.
Anonyme
213
2 Posté le 04/10/2016 à 10:08:27
Merci pour ce post alex.d car effectivement cela semble être un sujet assez sensible.
La première interrogation serait de savoir à partir de quelle valeur le jitter peut poser des soucis musicalement parlant. La plupart des bars hardwares ont une résolution interne à 96ppqn ( Analog rytm, tempest, spectralis ) cela nous fait pour un bpm à 170 un intervalle de 3,67ms entre chaque tick. Je suppose que la quantisation se fait au tick supérieur, du coup cela nous ferait un jitter max de 3,67ms pour une bar hardware avec un bpm à 170 ? j'ai bon ou pas ?
Pour avoir une référence, l'atari avait quelle valeur de jitter en midi ?
La première interrogation serait de savoir à partir de quelle valeur le jitter peut poser des soucis musicalement parlant. La plupart des bars hardwares ont une résolution interne à 96ppqn ( Analog rytm, tempest, spectralis ) cela nous fait pour un bpm à 170 un intervalle de 3,67ms entre chaque tick. Je suppose que la quantisation se fait au tick supérieur, du coup cela nous ferait un jitter max de 3,67ms pour une bar hardware avec un bpm à 170 ? j'ai bon ou pas ?
Pour avoir une référence, l'atari avait quelle valeur de jitter en midi ?
alex.d.
5534
Je poste, donc je suis
Membre depuis 9 ans
3 Posté le 04/10/2016 à 11:00:12
Pour l'Atari, je ne sais pas. J'ai démarré dans le monde merveilleux du MIDI avec la SoundBlaster Pro en 1991 (je suis un jeunot par rapport à certains ici). Je pense que ce qu'on obtient avec la SB Live doit être assez similaire ; je fais la mesure dès que possible.
Le MIDI sur prise DIN à 31250Hz prend 0.32ms par octet (8 bits de données, un bit de start, un bit de stop), soit 0.64ms pour envoyer une note (deux octets de données en supposant un running status). En clair, si on envoie un accord de trois notes, on a déjà un écart de 1.28ms entre la première et la dernière en supposant qu'interface et synthé sont parfaits.
Sachant cela, la mesure obtenue à 0.035ms semble assez optimale. Elle correspond grosso modo au temps de transmission pour un bit. En d'autres termes, si l'interface MIDI a son horloge en free running, on a au maximum un bit (même pas un octet, un bit) de décalage entre le timestamp de la note et le moment où elle est réellement envoyée sur le fil. Difficile de faire mieux.
À la vitesse du son, c'est 1cm. Pour 1ms, c'est 30cm. Le headbanger aura plus de jitter du fait de son mouvement que par l'interface MIDI.
Je n'ai pas de boîte à rythme hardware, mais la TR808 qui a été abondamment étudiée (qui aurait soi-disant un "groove" qui lui serait propre) aurait un jitter de l'ordre de 2ms.
Le MIDI sur prise DIN à 31250Hz prend 0.32ms par octet (8 bits de données, un bit de start, un bit de stop), soit 0.64ms pour envoyer une note (deux octets de données en supposant un running status). En clair, si on envoie un accord de trois notes, on a déjà un écart de 1.28ms entre la première et la dernière en supposant qu'interface et synthé sont parfaits.
Sachant cela, la mesure obtenue à 0.035ms semble assez optimale. Elle correspond grosso modo au temps de transmission pour un bit. En d'autres termes, si l'interface MIDI a son horloge en free running, on a au maximum un bit (même pas un octet, un bit) de décalage entre le timestamp de la note et le moment où elle est réellement envoyée sur le fil. Difficile de faire mieux.
À la vitesse du son, c'est 1cm. Pour 1ms, c'est 30cm. Le headbanger aura plus de jitter du fait de son mouvement que par l'interface MIDI.
Je n'ai pas de boîte à rythme hardware, mais la TR808 qui a été abondamment étudiée (qui aurait soi-disant un "groove" qui lui serait propre) aurait un jitter de l'ordre de 2ms.
[ Dernière édition du message le 04/10/2016 à 11:02:04 ]
.: Odon Quelconque :.
11103
Drogué·e à l’AFéine
Membre depuis 22 ans
4 Posté le 04/10/2016 à 16:15:40
Flag.
Pour info, le MidiGAL - petit périphérique clone du MIDIPal - permet entre autre de tester la stabilité d'une horloge MIDI (précision et gigue) et le cas échéant de la corriger.
https://midisizer.com/midigal/
Il y a quelques résultats intéressants sur le forum de Mutable Instruments, dont les miens :
https://mutable-instruments.net/forum/discussion/6759/midigal-yet-another-midipal-inspired-project/p1
A mettre en relation avec ce qu'on trouve chez InnerClockSystems, bien que je trouve leur nouveau protocole moins lisible que le précédent :
http://innerclocksystems.com/New%20ICS%20Litmus.html
Evidemment, on parle là de tests de base, sans variation de charge.
Dans ce dernier cas, j'ai vu quelques posts intéressants de Don Solaris sur le forum GS.
Pour info, le MidiGAL - petit périphérique clone du MIDIPal - permet entre autre de tester la stabilité d'une horloge MIDI (précision et gigue) et le cas échéant de la corriger.
https://midisizer.com/midigal/
Il y a quelques résultats intéressants sur le forum de Mutable Instruments, dont les miens :
https://mutable-instruments.net/forum/discussion/6759/midigal-yet-another-midipal-inspired-project/p1
A mettre en relation avec ce qu'on trouve chez InnerClockSystems, bien que je trouve leur nouveau protocole moins lisible que le précédent :
http://innerclocksystems.com/New%20ICS%20Litmus.html
Evidemment, on parle là de tests de base, sans variation de charge.
Dans ce dernier cas, j'ai vu quelques posts intéressants de Don Solaris sur le forum GS.
« What is full of redundancy or formula is predictably boring. What is free of all structure or discipline is randomly boring. In between lies art. » (Wendy Carlos)
alex.d.
5534
Je poste, donc je suis
Membre depuis 9 ans
6 Posté le 04/10/2016 à 17:04:30
Très intéressant ton lien sur le MidiGal. La synchro d'horloge MIDI, c'est un autre aspect du jitter MIDI, mais ça revient au même, puisqu'il s'agit d'ordonnancer des messages MIDI avec une bonne précision et régularité (sauf que c'est du MIDI Clock au lieu de note on/off).
En regardant les résultats sur le forum Mutable, ce qui me frappe, c'est qu'encore une fois, contrairement aux idées reçues, les sources logicielles via une interface USB obtiennent de plutôt bons résultats, alors que les MPC, Analog Rytm et Electribe sont plutôt moins bons.
Le lien sur GS, je connaissais, c'est là que j'ai trouvé MLA que j'ai utilisé pour les mesures
En regardant les résultats sur le forum Mutable, ce qui me frappe, c'est qu'encore une fois, contrairement aux idées reçues, les sources logicielles via une interface USB obtiennent de plutôt bons résultats, alors que les MPC, Analog Rytm et Electribe sont plutôt moins bons.
Le lien sur GS, je connaissais, c'est là que j'ai trouvé MLA que j'ai utilisé pour les mesures
Anonyme
213
7 Posté le 04/10/2016 à 17:13:39
J'ai retrouvé aussi un post super intéressant sur reddit où il parle à la base du fameux groove de la tr 808 et effectivement le jitter mesuré serait sur des doubles croches de 2ms .
https://m.reddit.com/r/synthesizers/comments/2jibow/the_myth_of_the_roland_tr808_groove_a_long_and/
Apparemment un des participants aurait mesuré la jitter du cirklon : 8 samples max de drift soit 0.18 ms !
Un a aussi fait le test de décaler deux beats l'un par rapport à l'autre et arriverait à les distinguer aux environs de 1.2ms, à tester
https://m.reddit.com/r/synthesizers/comments/2jibow/the_myth_of_the_roland_tr808_groove_a_long_and/
Apparemment un des participants aurait mesuré la jitter du cirklon : 8 samples max de drift soit 0.18 ms !
Un a aussi fait le test de décaler deux beats l'un par rapport à l'autre et arriverait à les distinguer aux environs de 1.2ms, à tester
.: Odon Quelconque :.
11103
Drogué·e à l’AFéine
Membre depuis 22 ans
8 Posté le 04/10/2016 à 17:49:31
Citation de alex.d. :
il s'agit d'ordonnancer des messages MIDI avec une bonne précision et régularité (sauf que c'est du MIDI Clock au lieu de note on/off).
En regardant les résultats sur le forum Mutable, ce qui me frappe, c'est qu'encore une fois, contrairement aux idées reçues, les sources logicielles via une interface USB obtiennent de plutôt bons résultats, alors que les MPC, Analog Rytm et Electribe sont plutôt moins bons.
Sauf les séquenceurs Yamaha, qui enfoncent tout le monde à 120BPM.
Par contre, j'ai noté des incongruités en fonction du nombre de BPM : il semble y avoir parfois des sweetspots à certaines fréquences très spécifique (ex : 0.011-0.015% de jitter sur l'electribe2 a précisément 25, 50, 125BPM contre ~1.8% aux autres tempo), qui correspondent peut-être à des valeurs remarquables ou aberrantes lors du calcul de l'horloge sur les machines.
Même si on ne peut pas attendre une précision millimétrique d'un protocole série anémique vieux de 33 ans, on est en droit d'exiger un minimum d'effort dans le développement des matériels/logiciels modernes - à la puissance de calcul démultipliée - pour obtenir la plus grande précision que le MIDI autorise. Les machines de l'époque y arrivaient bien (MPC60) avec leur CPU cacochymes, mais il est vrai qu'elles ne pouvaient pas faire grand chose d'autre en même temps.
Citation de alex.d. :
Le lien sur GS, je connaissais, c'est là que j'ai trouvé MLA que j'ai utilisé pour les mesures
Je me doute. Mais je n'avais pas lu que Don Solaris avait fait des tests en mode single/dual/multitimbral.
Qui prouvent bien que les machines sont aussi souvent à la ramasse en charge (sauf les sampleurs Akai).
Citation de plastisaw :
J'ai retrouvé aussi un post super intéressant sur reddit où il parle à la base du fameux groove de la tr 808 et effectivement le jitter mesuré serait sur des doubles croches de 2ms .
https://m.reddit.com/r/synthesizers/comments/2jibow/the_myth_of_the_roland_tr808_groove_a_long_and/
Intéressant, merci. Le swing de la 808 a été volontairement reproduit par Roland dans la TR-8, puisque le séquenceur de celle-ci dispose de deux modes, un émulant le léger retard sur les temps faibles de l'ancêtre même avec le potard swing à midi (pun intended) tandis que l'autre est plus précis, donc rigide.
https://fr.audiofanzine.com/bar/roland/tr-8/forums/t.564410,tr707,post.8154978.html
« What is full of redundancy or formula is predictably boring. What is free of all structure or discipline is randomly boring. In between lies art. » (Wendy Carlos)
Beatless
13649
Drogué·e à l’AFéine
Membre depuis 20 ans
9 Posté le 04/10/2016 à 21:32:43
Flagounet.
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
alex.d.
5534
Je poste, donc je suis
Membre depuis 9 ans
10 Posté le 05/10/2016 à 00:04:24
Ça y est, j'ai exhumé le fameux câble Y pour le port MIDI de la SB Live. Il s'agit donc d'une SB Live standard de 1999, branchée sur le port PCI, sans autre bus intermédiaire genre USB ou Firewire comme ça se fait maintenant.
J'ai donc réalisé le test toujours sous Linux avec qtractor (on n'est plus tout-à-fait dans les conditions de l'époque pour la partie logicielle), sur le E16 qui semble être celle de mes machines avec le moins de jitter intrinsèque. J'y ajoute les deux synthés avec interface USB que je n'avais pas eu le temps de tester. Voici donc :
-- interface SB Live PCI, vers Roland E16 : 0.039ms
-- Blofeld sur USB : 0.108ms
-- Streichfett sur USB : 0.119ms
On constate donc que le jitter sur une carte PCI de l'époque où on ne suspectait pas l'interface MIDI, et le jitter d'une interface USB Miditech récente est quasiment identique. On pourrait être tenté de dire que le soft multi-tâche de maintenant pénalise la carte PCI qui aurait sinon de meilleure performances, mais ça ne tient pas trop, puisqu'en réalité tout ça est excellent. Comme je l'ai calculé plus haut, ça correspond grosso modo au temps de transmettre un bit sur l'interface MIDI.
Le bilan est un peu déprimant en ce qui concerne la mesure des synthés, puisque les plus mauvais (en jitter !) sont le Nordlead et le Prophet 12, et les meilleurs sont le Roland E16 (clavier arrangeur d'entrée de gamme de 1995), le Blofeld (380€), et le Streichfett (200€). C'est sans doute le signe que le simple et rustique est plus stable que les choses plus sophistiquées (quoique le Blofeld ne soit pas vraiment rustique).
Mais bon, la conclusion est que, sur ces cas testés, le jitter de l'USB-MIDI est parfaitement raisonnable.
J'ai donc réalisé le test toujours sous Linux avec qtractor (on n'est plus tout-à-fait dans les conditions de l'époque pour la partie logicielle), sur le E16 qui semble être celle de mes machines avec le moins de jitter intrinsèque. J'y ajoute les deux synthés avec interface USB que je n'avais pas eu le temps de tester. Voici donc :
-- interface SB Live PCI, vers Roland E16 : 0.039ms
-- Blofeld sur USB : 0.108ms
-- Streichfett sur USB : 0.119ms
On constate donc que le jitter sur une carte PCI de l'époque où on ne suspectait pas l'interface MIDI, et le jitter d'une interface USB Miditech récente est quasiment identique. On pourrait être tenté de dire que le soft multi-tâche de maintenant pénalise la carte PCI qui aurait sinon de meilleure performances, mais ça ne tient pas trop, puisqu'en réalité tout ça est excellent. Comme je l'ai calculé plus haut, ça correspond grosso modo au temps de transmettre un bit sur l'interface MIDI.
Le bilan est un peu déprimant en ce qui concerne la mesure des synthés, puisque les plus mauvais (en jitter !) sont le Nordlead et le Prophet 12, et les meilleurs sont le Roland E16 (clavier arrangeur d'entrée de gamme de 1995), le Blofeld (380€), et le Streichfett (200€). C'est sans doute le signe que le simple et rustique est plus stable que les choses plus sophistiquées (quoique le Blofeld ne soit pas vraiment rustique).
Mais bon, la conclusion est que, sur ces cas testés, le jitter de l'USB-MIDI est parfaitement raisonnable.
- < Liste des sujets
- Charte