GRIS-UdeM / SpatGRIS

Sound spatialization tool
GNU General Public License v3.0
59 stars 4 forks source link

Modes de sortie (VBAP, HRTF High, HRTF Low, Stereo), commentaires et questions. #98

Closed led78 closed 6 years ago

led78 commented 6 years ago

J'ai fais quelques tests des modes de sortie avec la pièce sur laquelle je travaille présentement la spatialisation. Voici quelques commentaires...

VBAP: Au repos, le serveur (Jack) indique 12,6% sans être connecté à un séquenceur. Dès que j'ouvre un séquenceur, ça monte à ~19,5%, puis à ~34% lorsque je connecte le tout. Avec une interpolation global à 0.005, quelques plusieurs SpatGRIS avec des spans et 32 sources en entrée dont 2 sont directes, j'obtiens ~ 37,5%. À un autre moment ça descend à 28% - à valider si cette variation est due aux mouvements automatisés ou à autre chose, mais à première vue, ça semble être le cas.

Alors que ça joue, je passe en mode HRTF High...

Le signal reçu dans les écouteurs présente un battement de bruit à 2Hz (deux fois par seconde) par dessus le son spatialisé. Jack ne présente pas un flash rouge aussi régulier, mais son pourcentage varie grandement, entre ~70% et ~90% avec quelques pointes au-dessus. Si j'ignore le battement, je peux percevoir la spatialisation quoi que très grossière. En diminuant le nombre de sources en entrée, la battement devient moins fréquent et moins régulier. Je dois descendre à aussi peu que 20 sources en entrée, pour ne plus entendre de saut de volume. À ce moment-là, Jack indique entre ~50% et ~60%, avec quelques rares pointes à 80% qui occasionnent parfois un saut de volume. À 22 sources en entrée, on a plus de conditions d'écoute raisonnables.

Dès que je passe en mode HRTF Low (avec 32 sources en entrée), le battement cesse et Jack descend à entre ~43% et 53%, selon les sections de l'œuvre - probablement lié aux sources en mouvement, tel que mentionné plus haut. Je n'entend plus de saut de volume et je perçois grossièrement la spatialisation.

Dans les deux cas, le filtrage HRTF me semble assez dur d'écoute. Déjà, comme c'était aussi le cas avec le mode HRTF du Zirkonium, on a une baisse importante du volume général, ce qui fait qu'on doit monter le niveau de sortie des écouteurs (sur l'interface audio). De plus, le filtrage couplé au manque de basses, dans le cas du mode HRTF Low, rend le résultat sonore plutôt agressant pour les oreilles ce qui fait qu'on ne peut pas trop monter le niveau des écouteurs. J'ai un peu le sentiment analogue de fixer une ampoules et mes oreilles se fatiguent rapidement. Certaines sources restent difficiles à percevoir alors que les sources bruiteuses deviennent agressantes. Il faudrait comparer l'écoute du mode HRTF du Zirkonium avec celui du ServerGRIS pour voir s'il serait possible de l'améliorer. Mais, pour l'instant, je trouve les conditions d'écoute assez difficiles. Tout ceci est forcément du aux contraintes typiques de l'écoute HRTF. Peut-être pourrions-nous faire des tests avec différentes banques de réponses impulsionnelles et choisir lesquelles nous semblent à la fois les plus efficaces sur la plan de la spatialisation et les plus potables sur les plans du confort d'écoute? En attendant, est-ce qu'on devrait exclure les modes HRTF du la première version officielle, selon vous?

Le mode stéréo fonctionne comme un charme! On pourrait presque l'utiliser tel quel pour faire une réduction stéréo d'une œuvre spatialisée puisque les mouvements gauche-droit et la position des sources sur le plan horizontal sont très bien restituées.

led78 commented 6 years ago

Test d'enregistrement en mode HRTF; comparaison avec Zirkonium.

Enregistrement du même morceau de musique spatialisée, avec 26 pistes en entrée (13 stéréo) @ 48kHz et 1024 échantillons.

Zirkonium - mode binaural : enregistrement impeccable; la spatialisation quoique grossière fonctionne assez bien; l'effet d'élévation est perceptible; le niveau d'intensité de sortie est relativement faible et nécessite l'application d'un gain. ServerGRIS - mode HRTF High : des sources apparaissent et disparaissent soudainement (non progressivement) selon leur mouvement; des distorsions spectrales surviennent soudainement (non progressivement); tout comme pour le mode binaural du Zirkonium, le niveau d'intensité de sortie est relativement faible et nécessite l'application d'un gain. ServerGRIS - mode HRTF Low : le retrait des plus basses fréquences est perceptible mais tout à fait acceptable; encore une fois, des sources apparaissent et disparaissent soudainement (non progressivement) selon leur mouvement; des distorsions spectrales surviennent soudainement (non progressivement); tout comme pour le mode binaural du Zirkonium, le niveau d'intensité de sortie est relativement faible et nécessite l'application d'un gain.

Les trois enregistrements ont par la suite été normalisé à -0,1 dB True Peak. Puis, j'ai capturé la moyenne spectrale pour chacun des enregistrements.

En comparant ces moyennes entre elles, je constate ceci:

Ces phénomènes sont également confirmés par l'écoute. Je vous laisse tirer vos propres conclusions à partir de ces captures d'écran:

Zirkonium marfa_master_reductionbinaural_spectrumaverage ServerGRIS HRTF High marfa_servergris_hrtf_high_1-2_spectrumaverage ServerGRIS HRTF Low marfa_servergris_hrtf_low_1-2_spectrumaverage

led78 commented 6 years ago

Personnellement, je crois qu'il faudrait certainement améliorer cet aspect du Server avant de passer à autre chose (i.e. SpatGRIS), faute de quoi nous devrions au moins mentionner dans le manuel que les modes HRTF ne sont pas encore au point et que ceux-ci feront l'objet d'une mise à niveau future. Sinon, je pense qu'en attendant le mode Stéréo en très satisfaisant pour travailler de la maison.

belangeo commented 6 years ago

J'ai corrigé un bug dans l'enregistrement HRTF qui n'est peut-être pas relié à cet issue mais ce sera à tester.

Je n'arrive pas à reproduire les problèmes décrits ici. En HRTF_HIGH, avec 32 voix en entrée, jack m'indique ~60% de CPU, aucun xrun et l'enregistrement est impeccable.

La différence principale entre nos deux setups est que je n'ai pas de séquenceur ni de plugins actifs pendant l'enregistrement. Il faudrait faire des tests avec séquenceur ou sans sur une même machine pour voir si le séquenceur taxe le CPU au point de lui faire rater des blocs d'échantillons en écriture.

En ce moment, le ServerGris utilise la même banque de réponses impulsionnelles que le Zirkonium:

http://alumni.media.mit.edu/~kdm/hrtfdoc/hrtfdoc.html

Je suis aussi d'avis qu'on devrait tester d'autres banques de réponses impulsionnelles à des fins de comparaison.

led78 commented 6 years ago

En HRTF_HIGH, avec 32 voix en entrée, jack m'indique ~60% de CPU, aucun xrun et l'enregistrement est impeccable.

Je ne l'avais pas précisé mais, dans mon cas, JackRun se tient à 56% avec 26 pistes en entrée, ce qui est cohérent. Le problème n'est donc pas causé par une surcharge de Jack. De plus, les enregistrements effectués de mon côté (Server en mode HRTF) sont aussi bon. Les problèmes décris ne surviennent qu'à certains moments précis dans la pièce, selon la spatialisation et la matière sonore. Je pourrais peut-être joindre des liens vers des extraits, avec le minutage correspondant aux exemples.

La différence principale entre nos deux setups est que je n'ai pas de séquenceur ni de plugins actifs pendant l'enregistrement. Il faudrait faire des tests avec séquenceur ou sans sur une même machine pour voir si le séquenceur taxe le CPU au point de lui faire rater des blocs d'échantillons en écriture.

On sait déjà que les spans on un effet sur le % de JackRun en mode VBAP, mais ils sont désactivés en mode HRTF n'est-ce pas?

En ce moment, le ServerGris utilise la même banque de réponses impulsionnelles que le Zirkonium:

http://alumni.media.mit.edu/~kdm/hrtfdoc/hrtfdoc.html

J'ai pris un enregistrement binaural fait avec le Zirkonium, il y a de cela quelques temps. Maintenant que tu mentionnes cela, je me demande si cet enregistrement a été modifié par la suite. Pour en avoir le cœur net, je vais le refaire.

led78 commented 6 years ago

Reprise de l'enregistrement binaural avec Zirkonium: 26 pistes en entrée (13 stéréo) @ 48kHz et 1024 échantillons; JackPilot CPU Load durant l'enregistrement = ~65%.

Aucun problème audible à l'écoute, les mouvements sont fluides et la simulation spatiale est acceptable. À noter que l'étendue (span) des sources demeure affichée dans la représentation 3D du Zirkonium.

En effectuant l'analyze de la moyenne spectrale du nouvel enregistrement binaural du Zirkonium (après normalisation à -0.1 dB True Peak), je constate effectivement que l'enregistrement utilisé initialement a probablement été altéré par la suite. Toutefois, on constate que le filtrage demeure sensiblement le même et diffère significativement du ServerGRIS:

Zirkonium (normalisé, sans altération): marfa_master_reductionbinaural_1-2_spectrumaverage Zirkonium (ancienne version, apparemment altérée): marfa_master_reductionbinaural_spectrumaverage ServerGRIS HRTF High: marfa_servergris_hrtf_high_1-2_spectrumaverage ServerGRIS HRTF Low: marfa_servergris_hrtf_low_1-2_spectrumaverage

led78 commented 6 years ago

Je n'arrive pas à reproduire les problèmes décrits ici. En HRTF_HIGH, avec 32 voix en entrée, jack m'indique ~60% de CPU, aucun xrun et l'enregistrement est impeccable.

J'ai d'abord tenté d'effectuer ces tests avec ma dernière pièce qui, elle aussi, comporte 32 voix en entrées, mais dont la session contient toujours quelques plug-ins de traitement, sans succès puisque JackRun sature. Il y a donc une bonne différence possible de la charge sur Jack avec l'utilisation d'un DAW contenant plusieurs plug-ins de traitement.

Un point positif à ce sujet par rapport au Zirkonium c'est que le Server (v0.1.4), même en mode HRTF HIGH, joue pas mal mieux l'audio que le Zirkonium via Jack Pilot; c'est limite mais le son ne coupe presque pas avec le Server. Pour la même pièce avec le Zirkonium, le son coupe constamment et finit par disparaitre pour ne plus jamais revenir.

led78 commented 6 years ago

À titre de référence, voici deux extraits de la pièce enregistrée avec les deux modes HRTF de la version 0.1.4 du ServerGRIS (problématiques), ainsi que le mode binaural du Zirkonium MK2 (non problématique) : https://we.tl/hKb3nf2kAi

À vous de juger.

led78 commented 6 years ago

Rappel d'une récente discussion de corridor: Nous avons discuté de la possibilité de faire sauter la limitation du nombre d'entrée pour les modes HRTF en effectuant un pré-rendu VBAP pour 16HP - donc, de faire une réduction HRTF à partir de ce rendu et non directement à partir de toutes les sources en entrée.

belangeo commented 6 years ago

Après notre discussion, j'ai pensé à quelque chose. Présentement, l'interpolation utilise les quatre réponses impulsionnelles autour de la source pour créer une réponse impulsionnelle « virtuelle » correspondant à la position réelle. Ce qui demande beaucoup de calculs pour localiser une seule source! Si on passe par une réduction VBAP et que l'on binauralise avec des réponses imuplsionnelles fixes (plus besoin d'interpolation), je pense qu'on peut travailler avec un pré-rendu à 32 voix sans problème... À tester.

Je suis présentement en train de travailler l'interpolation HRTF et après plusieurs lectures, le constat est que interpoler des réponses impulsionnelles génère des cancellations de phase très gênantes et extrêmement difficiles à contourner.

Malgré tout, j'ai trouvé la source des sauts brusques dans le filtrage, je vais faire une version 1.0.1 avec le HRTF corrigé dans les prochains jours. Ça ne règle pas, par contre, le problème de cancellation de phase (très évident sur les mouvements verticaux). À long terme, la solution VBAP+HRTF fixe me semble la meilleure solution.

Normandeau commented 6 years ago

Voir l'issue 110, en remplacement de celle-ci.