pvcross

pvcross — Applique les amplitudes d'un fichier d'analyse par vocodeur de phase aux données d'un second fichier.

Description

pvcross applique les amplitudes d'un fichier d'analyse par vocodeur de phase aux données d'un second fichier et réalise ensuite la resynthèse. Les données proviennent, comme décrit ci-dessus, d'une unité pvbufread appelée auparavant. Les deux arguments d'amplitude de taux-k sont utilisés pour pondérer les amplitudes de chaque fichier séparément avant qu'elles ne soient additionnées et utilisées dans la resynthèse (voir ci-dessous les explications plus détaillées). Les fréquences du premier fichier ne sont pas utilisées du tout dans le processus. Cette unité permet simplement de réaliser une synthèse croisée par l'application des amplitudes du spectre d'un signal aux fréquences d'un second signal. A la différence de pvinterp, pvcross permet l'utilisation du paramètre ispecwp comme dans pvoc et dans vpvoc.

Syntaxe

ares pvcross ktimpnt, kfmod, ifile, kampscale1, kampscale2 [, ispecwp]

Initialisation

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

ispecwp (facultatif, 0 par défaut) -- s'il est différent de zéro, l'opcode tente de préserver l'enveloppe spectrale tandis que le contenu fréquentiel est modifié par kfmod. La valeur par défaut est zéro.

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.

kampscale1, kampscale2 -- utilisés pour mettre à l'échelle les amplitudes stockées dans chaque trame du fichier d'analyse par vocodeur de phase. kampscale1 met à l'échelle les amplitudes des données du fichier lu par un pvbufread appelé précédemment. kampscale2 met à l'échelle les amplitudes du fichier nommé par ifile.

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.

Exemples

Ci-dessous un example de l'utilisation de pvbufread avec pvcross. Dans cet exemple les amplitudes utilisées dans la resynthèse changent graduellement de celles d'un hautbois à celles d'une clarinette. Les fréquences, naturellement, restent celles de la clarinette durant tout le processus car pvcross n'utilise pas les données de fréquence du fichier lu par pvbufread.

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
kcross  expon     0.001, p3, 1
        pvbufread ktime1, "oboe.pvoc"
apv     pvcross   ktime2, 1, "clar.pvoc", 1-kcross, kcross

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

Exemple 645. Exemple de l'opcode pvcross.

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 pvcross.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

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

instr 1
; analyze "beats.wav", "flute.aiff" and "mary.wav" with PVANAL first
ktime1 line 0, p3, 2			; used as index in the "beats.pvx" file
ktime2 line 0, p3, 2.6			; used as index in the "flute.pvx" or "mary.pvx"	
       pvbufread ktime1, "beats.pvx"	;take only amplitude from "beats.pvx"
if p4 = 0 then
asig   pvcross	ktime2, 1, "flute.pvx", 1, 0 ;and keep freqs of "flute.aiff"
asig   = asig*.8			;scale output
else
asig   pvcross	ktime2, 1, "mary.pvx", 1, 0 ;and keep freqs of "mary.wav"
asig   = asig*.4			;scale output
endif
       outs asig, asig

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

e
</CsScore>
</CsoundSynthesizer>


Voir aussi

pvbufread, pvinterp, pvread, tableseg, tablexseg

Crédits

Auteur : Richard Karpen
Seattle, Wash
1997

Nouveau dans la version 3.44