pvinterp

pvinterp — Interpole entre les amplitudes et les fréquences de deux fichiers d'analyse par vocodeur de phase.

Description

pvinterp interpole entre les amplitudes et les fréquences, bin par bin, de deux fichiers d'analyse par vocodeur de phase (l'un provenant d'une unité pvbufread appelée précedemment et l'autre étant spécifié dans la liste d'arguments), permettant des transitions définies par l'utilisateur entre les sons analysés. Il permet aussi une mise à l'échelle de l'ensemble des amplitudes et des fréquences de chaque fichier séparement avant le calcul des valeurs interpolées et leur envoi aux routines de resynthèse. L'argument kfmod dans pvinterp exécute sa mise à l'échelle des valeurs de fréquence sur le résultat de la mise à l'échelle individuelle suivie de l'interpolation si bien que cela agit comme une valeur de mise à l'échelle globale des nouvelles composantes de fréquence.

Syntaxe

ares pvinterp ktimpnt, kfmod, ifile, kfreqscale1, kfreqscale2, \
      kampscale1, kampscale2, kfreqinterp, kampinterp

Initialisation

ifile -- le numéro pvoc (n dans pvoc.n) ou le nom entre guillements du fichier d'analyse créé avec pvanal. (Voir pvoc.)

Exécution

ktimpnt -- l'écoulement du temps, en secondes, dans ce fichier. ktimpnt doit toujours être positif, mais il peut avancer ou reculer dans le temps, être stationnaire ou discontinu, comme pointeur dans le fichier d'analyse.

kfmod -- un facteur de transposition au taux de contrôle : la valeur 1 n'implique pas de transposition, 1.5 transpose vers l'aigu d'un quinte juste et 0.5 d'une octave vers le grave.

kfreqscale1, kfreqscale2, kampscale1, kampscale2 -- utilisés dans pvinterp pour mettre à l'échelle les fréquences et les amplitudes stockées dans chaque trame du fichier d'analyse par vocodeur de phase. kfreqscale1 et kampscale1 mettent à l'échelle les fréquences et les amplitudes des données du fichier lu par le pvbufread appelé précedemment (ces données sont passées en interne à l'unité pvinterp). kfreqscale2 et kampscale2 mettent à l'échelle les fréquences et les amplitudes des données du fichier nommé par ifile dans la liste d'arguments de pvinterp et lu par l'unité pvinterp.

Il est possible d'ajuster ces valeurs au moyen de ces arguments avant l'application de l'interpolation. Par exemple, si file1 est beaucoup plus fort que file2, on peut vouloir diminuer les amplitudes de file1 ou augmenter celles de file2 avant l'interpolation. De même on peut ajuster les fréquences de chacun pour les rapprocher les unes des autres (ou bien les opposer, bien sûr !) avant d'effectuer l'interpolation.

kfreqinterp, kampinterp -- utilisés dans pvinterp, déterminent la distance d'interpolation entre les valeurs d'un fichier de vocodeur de phase et les valeurs d'un second fichier. Lorsque kfreqinterp vaut 1, les valeurs de fréquence sont toutes celles du premier fichier (lu par le pvbufread), mises ensuite à l'échelle par l'argument kfreqscale1. Lorsque kfreqinterp est nul, les valeurs de fréquence sont toutes celles du second fichier (lu par l'unité pvinterp elle-même), mises ensuite à l'échelle par kfreqscale2. Lorsque kfreqinterp se trouve entre 0 et 1, les valeurs de fréquence sont calculées, bin par bin, comme le pourcentage entre chaque paire de fréquences (autrement dit, kfreqinterp=0.5 met les valeurs de fréquence à mi-chemin entre les valeurs de l'ensemble des données du premier fichier et celles de l'ensemble des données du second fichier).

kampinterp travaille de la même manière sur les amplitudes des deux fichiers. Comme ces arguments sont de taux-k, les pourcentages peuvent changer dans le temps ce qui permet toutes sortes de transitions entre les sons.

Exemples

L'exemple ci-dessous montre une utilisation de pvbufread avec pvinterp pour interpoler entre le son d'un hautbois et celui d'une clarinette. La valeur de kinterp retournée par l'opcode linseg est utilisée pour définir le déroulement temporel de la transition entre les deux sons. Les interpolations des fréquences et des amplitudes sont contrôlées par le même facteur dans cet exemple, mais il peut être intéressant de ne pas les synchroniser de cette manière pour obtenir d'autres effets. Cet exemple commence par un son de clarinette qui se transforme en hautbois et revient ensuite à la clarinette. kfreqscale2 vaut 1.065 car dans ce cas le hautbois est plus haut d'un demi-ton que la clarinette et cela les met approximativement à la même hauteur. kampscale2 vaut 0.75 car la clarinette analysée était un peu plus forte que le hautbois analysé. Les réglages de ces deux paramètres donnent une transition assez douce dans ce cas, mais de tels ajustements ne sont en aucun cas nécessaires ou même préconisés.

ktime1  line      0, p3, 3.5 ; used as index in the "oboe.pvoc" file
ktime2  line      0, p3, 4.5 ; used as index in the  "clar.pvoc" file
kinterp linseg    1, p3*0.15, 1, p3*0.35, 0, p3*0.25, 0, p3*0.15, 1, p3*0.1, 1
        pvbufread ktime1, "oboe.pvoc"
apv     pvinterp  ktime2,1,"clar.pvoc", 1, 1.065, 1, 0.75, 1-kinterp, 1-kinterp

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

Exemple 646. Exemple de l'opcode pvinterp.

Voir les sections Audio en Temps Réel et Options de la Ligne de Commande pour plus d'information sur l'utilisation des options de la ligne de commande.

<CsoundSynthesizer>
<CsOptions>
; Select audio/midi flags here according to platform
-odac   ;;;realtime audio out
;-iadc    ;;;uncomment -iadc if realtime audio input is needed too
; For Non-realtime ouput leave only the line below:
; -o pvinterp.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

sr = 44100 
ksmps = 32 
0dbfs  = 1 
nchnls = 2

instr 1
; analyze "fox.wav" and "flute.aiff" with PVANAL first
ktime1 line 0, p3, 2.8		 ; used as index in the "fox.pvx" file
ktime2 line 0, p3, 3		 ; used as index in the "flute.pvx" file
kinterp line 1, p3, 0
	pvbufread ktime1, "fox.pvx"
asig	pvinterp ktime2,1,"flute.pvx",.9, 3, .6, 1, kinterp,1-kinterp
        outs asig, asig

endin
</CsInstruments>
<CsScore>
i 1 0 3
i 1 + 10

e
</CsScore>
</CsoundSynthesizer>


Voir aussi

pvbufread, pvcross, pvread, tableseg, tablexseg

Crédits

Auteur : Richard Karpen
Seattle, Wash
1997