hrtfmove

hrtfmove — Génère un signal audio 3D binaural pour casque par magnitude interpolée et phase tronquée.

Description

Cet opcode prend un signal source et le spatialise dans les trois dimensions entourant l'auditeur en réalisant le produit de convolution de la source et de filtres basés sur une fonction de transfert stockée en relation avec la tête (HRTF).

Syntaxe

aleft, aright hrtfmove asrc, kAz, kElev, ifilel, ifiler [, imode, ifade, isr]

Initialisation

ifilel -- fichier des données spectrales HRTF de gauche.

ifiler -- fichier des données spectrales HRTF de droite.

[Note] Note

Des fichiers de données spectrales (basés sur la base de donnée HTRF du MIT) sont disponibles dans trois taux d'échantillonnage : 44.1, 48 et 96 kHz et sont nommés en conséquense. Le sr d'entrée et de traitement doit concorder avec celui du fichier de données. Les fichiers doivent se trouver dans le répertoire courant ou le SADIR (voir Variables d'Environnement).

[Note] Note

Les fichiers de données HRTF à utiliser avec hrtfmove, hrtfmove2, hrtfstat, hrtfearly et hrtfreverb ont été mis à jour pour les versions 5.15 et ultérieures de Csound (le code a été mis à jour et il est plus efficace). Les anciens fichiers de données sont maintenant obsolètes.

imode -- facultatif, 0, par défaut, pour une phase tronquée, 1 pour une phase minimale.

ifade -- facultatif, nombre de tampons de traitement pour le fondu-enchaîné du changement de phase (8 par défaut). L'intervalle autorisé est 1-24. Une faible valeur est recommandée pour les sources complexes (4 ou moins : une valeur plus élevée peut rendre audible le fondu-enchaîné), une valeur plus élevée pour les sources à bande étroite (8 ou plus : une valeur plus faible peut rendre audible l'incohérence due aux changements de phase par le filtre). N'a aucun effet sur le traitement de la phase minimale.

[Note] Note

Les fondus peuvent parfois se chevaucher (si des trajectoires artificiellement rapides/complexes sont demandées). Dans ce cas, un avertissement est imprimé. Utiliser un fondu-enchaîné plus court ou changer légèrement la trajectoire pour ne pas risquer l'apparition d'incohérences.

isr - facultatif, 44.1 kHz par défaut : valeurs autorisées : 44100, 48000 et 96000.

kAz -- valeur d'azimut en degrés. Les valeurs positives représentent les positions sur la droite, les valeurs négatives les positions sur la gauche.

kElev -- valeur d'élévation en degrés. Les valeurs positives représentent les positions au-dessus de l'horizontale, les valeurs négatives les positions sous l'horizontale (min -40).

Les trajectoires sans artefact définies par l'utilisateur sont rendues possibles par un algorithme basé sur l'interpolation de magnitude spectrale et la troncature de phase. Des fondus-enchaînés sont implémentés pour minimiser/éliminer d'éventuelles incohérences causées par la mise à jour des valeurs de phase. Ces fondus-enchaînés sont réalisés sur des tampons de traitement convolutif dont le nombre peut être défini par l'utilisateur. Les sources complexes peuvent ne nécessiter un fondu-enchaîné que sur un tampon ; les sources à bande étroite peuvent en nécessiter plusieurs. L'opcode offre aussi un traitement basé sur la phase minimale, une méthode plus traditionnelle et complexe. Dans ce mode, les filtres hrtf utilisés sont réduits à des représentation de phase minimale et l'interpolation utilise ensuite la relation entre la magnitude de phase minimale et les spectres de phase. Le délai interaural, qui est inhérent au procédé de phase tronquée, est réintroduit dans le procédé de phase minimale au moyen de lignes à retard variables.

Exemples

Voici un exemple de l'opcode hrtfmove. Il utilise le fichier hrtfmove.csd.

Exemple 441. Exemple de l'opcode hrtfmove.

<CsoundSynthesizer>
<CsOptions>
; Select flags here
; realtime audio out 
 -o dac 
; For Non-realtime ouput leave only the line below:
 ;-o hrtf.wav
</CsOptions>
<CsInstruments>

sr = 44100
kr = 4410
ksmps = 10
nchnls = 2

gasrc init 0

instr 1		;a plucked string

  kamp = p4
  kcps = cpspch(p5)
  icps = cpspch(p5)

  a1 pluck kamp, kcps, icps, 0, 1

  gasrc = a1

endin

instr 10	;uses output from instr1 as source

 kaz	linseg 0, p3, 720		;2 full rotations

 aleft,aright hrtfmove gasrc, kaz,0, "hrtf-44100-left.dat","hrtf-44100-right.dat"

 outs	aleft, aright
  
endin

</CsInstruments>
<CsScore>

; Play Instrument 1: a simple arpeggio
i1 0 .2 15000 8.00 
i1 + .2 15000 8.04
i1 + .2 15000 8.07
i1 + .2 15000 8.11
i1 + .2 15000 9.02
i1 + 1.5 15000 8.11
i1 + 1.5 15000 8.07
i1 + 1.5 15000 8.04
i1 + 1.5 15000 8.00
i1 + 1.5 15000 7.09
i1 + 1.5 15000 8.00

; Play Instrument 10 for 10 seconds.
i10 0 10

</CsScore>
</CsoundSynthesizer>

Voir aussi

hrtfmove2, hrtfstat, hrtfer.

Plus d'information sur cet opcode : http://www.csoundjournal.com/issue9/newHRTFOpcodes.html, écrit par Brian Carty.

Crédits

Auteur : Brian Carty
Maynooth
2008