Pré-requis
- Avoir saisi le principe du B-Format [https://en.wikipedia.org/wiki/Ambisonics#First-order_Ambisonics_and_B-Format]
- Avoir son impulse response préférée en B-Format. Il y en a de nombreuses sur le site http://www.openairlib.net
- A la question "Mais pouquoi se faire chier avec l'ambiphonie ?" répondre : "Pasque'on peut" ou "La stéréo c'est has been"
Ici nous utiliserons l'IR "stalbans_a_wxyz.wav" qui est disponible à cette adresse : http://www.openairlib.net/auralizationdb/content/lady-chapel-st-albans-cathedral
Le .conf est disponible ici
Concept
Les plugins de spatialisation ambisoniques habituels permettent le déplacement dans l'espace autour de l'auditeur, mais sans la notion de profondeur.
Le plugin "Spatializer" compris dans Non-Mixer permet l'envoi du son encodé en ambiphonie vers une reverb ambiphonique, qui permet de simuler la distance qui sépare la source sonore de l'auditeur. Une fois inseré dans la piste audio (monophonique) de Non-mixer, celle-ci gagne huit sorties :
- 3 "out", pour arriver aux quatres (WXYZ) d'une piste ambisonique de 1er ordre
- 4 "Early reverb", pour les canaux WXYZ de la reverb, destinés aux premières reflections de l'impulse response. Ces reflections déterminent la "taille de la pièce" et la position de la source dans celle-ci.
- 1 "Late reverb", qui est un envoi constant pour la reverb diffuse.
La configuration de Jconvolver se fera donc en deux sections, early reflection et tail (ou late) reverb, ce qui permet de traiter indépendamment les deux parties de la reverb.
Pour illuster, voici une session basique. En guise d'entrée, un signal mono arrivant de Non-timeline est routée vers la tranche "Cello" de Non-Mixer. Y est inséré post-fader le plugin Spatializer. Ses sorties directes (Out 1, 2, 3 et 4, soit WXYZ) sont routés vers la tranche "Master". Les sorties Reverb arrivent dans Jconvolver.
Pour cet exemple, le décodeur ambiphonique Amdec est lancé avec le preset "Square" et sort donc sur quatre sorties physiques.
La configuration de Jconvolver
Voici donc notre impulse response en B-format :
En zoomant nous voyons donc l'impulse originale, les premières reflections (early reflections), puis la reverb diffuse (tail ou late reverb).
Dans notre fichier de config, après avoir renseigné le dossier dans lequel est notre IR (champ /cd
), nous passons au champ /convolver/new
pour lequel nous indiquons 5 entrées, 4 sorties, une partition de 512 échantillons, et une taille maximum de convolution de 200000 échantillons.
La taille de la partition dépendra de la taille de l'IR, et la taille maximum de convolution devra être plus grande que la taille de l'IR, sous peine de couper la queue de reverb.
C'est ensuite la configuration des entrées/sorties. Comme nous l'avons vu, il nous faut 5 entrées :
----- Numéro de l'entrée / Nom de l'entrée /input/name 1 In.Tail /input/name 2 In.W /input/name 3 In.X /input/name 4 In.Y /input/name 5 In.Z
Et 4 sorties :
/output/name 1 Out.W /output/name 2 Out.X /output/name 3 Out.Y /output/name 4 Out.Z
Cette configuration ne devrait pas changer, quel que soit l'IR utilisée.
Les champs /impulse/read
sont divisés en deux parties, les early reflections et la reverb diffuse, et sont constitués comme suit :
Partie Early reflections :
# in out gain delay offset length chan file # --------------------------------------------------------------------- /impulse/read 2 1 0.5 192 461 344 1 stalbans_a_wxyz.wav /impulse/read 3 2 0.5 192 461 344 2 stalbans_a_wxyz.wav /impulse/read 4 3 0.5 192 461 344 3 stalbans_a_wxyz.wav /impulse/read 5 4 0.5 192 461 344 4 stalbans_a_wxyz.wav
L'entrée 2 (In.W) sera traitée avec le canal 1 (W) de l'impulse, puis sortira sur la sortie 1 de Jconvolver (Out.W).
Puisqu'on ne s'occupe là que des early reflections, l'offset correspond au début de la première reflection, en nombre d'échantillons depuis le debut du fichier.
Le delay correspond au nombre d'echantillons entre le début du son direct de l'impulse et la première reflection.
Le length correspond quant à lui à la longueur des early reflections, c'est donc le nombre d'echantillons séparant le début de la première reflection et le début de la reverb diffuse.
Le champs gain est a modifier en cas d'IR non normalisée, ou si l'on veut équilibrer la réponse spaciale.
Partie late reverb :
# in out gain delay offset length chan file # --------------------------------------------------------------------- /impulse/read 1 1 0.5 506 805 0 1 stalbans_a_wxyz.wav /impulse/read 1 2 0.5 506 805 0 2 stalbans_a_wxyz.wav /impulse/read 1 3 0.5 506 805 0 3 stalbans_a_wxyz.wav /impulse/read 1 4 0.5 506 805 0 4 stalbans_a_wxyz.wav
Ici l'entrée 1 (tail reverb) sera traitée avec les canaux W, X, Y et Z et sortira sur chacune de ces sorties.
L'offset correspond à l'offset plus le length de la partie early reflection.
Le delay correspond au delay plus le length de la partie early reflection également.
Dans les deux parties, on modifiera les champs file et channel si l'on utilise de multiples fichiers d'IR stereo, ou mono.
Il ne nous reste plus qu'à sauvegarder le fichier et lancer jconvolver dans un terminal :
$jconvolver '/chemin/vers/votre/fichier.conf'
ou via Nsm-Proxy :
Executable : jconvolver
Argument : '/chemin/vers/votre/fichier.conf'
Remarques
- L'unité de temps dans la config étant l'échantillon, tout resampling de l'impulse response demande modification de la configuration.
- Certaines fois, Jconvolver réagit mal au silence, en chargant le CPU pour rien. L'idéal est donc qu'il ait toujours un peu de son à se mettre sous la dent.