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 800. 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  -m0  ;;;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

; by Menno Knevel 2021

gilen1 filelen "flutec3.wav"    ; get length of soundfiles
gilen2  filelen "flute.aiff"    ; these files are all
gilen3  filelen "wave.wav"      ; around 2.7 seconds...

; analyze sound files and output results to pvoc-ex files
ires1 system_i 1,{{ pvanal flutec3.wav flutec3.pvx }}   ; use default settings
ires2 system_i 1,{{ pvanal flute.aiff flute.pvx }} 
ires3 system_i 1,{{ pvanal wave.wav wave.pvx }}  

instr 1 ; untreated signals
asig    diskin2   p4 , 1
print gilen1
print gilen2
print gilen3
prints  "\n---***YOU NOW HEAR THE UNTREATED SOUND SAMPLES***---\n"
    outs    asig, asig
endin

instr 2

prints  "\n---***YOU NOW HEAR THE RESULT OF THE ANALYZED FILES:***---\n"
ktime1 line 0, p3, gilen1		    ; timepointer in "flutec3.pvx" file
kcross expon     0.001, p3, 1
pvbufread ktime1, "flutec3.pvx"	    ;take only amplitude from "flute3c.pvx"
    
if p4 = 0 then
    ktime2 line 0, p3, gilen2		; timepointer in "flute.pvx"
    kfreq line .5, p3, 2			; frequency rise
    asig   pvcross	ktime2, kfreq, "flute.pvx", 1-kcross, kcross, p5 ;p5 = preserve spectral envelope
    prints  "--** preserve spectral envelope = %d **--\n", p5
else
    ktime2 line 0, p3, gilen3		; timepointer in "wave.pvx"
    kfreq line .5, p3, 2			; frequency rise
    asig   pvcross	ktime2, kfreq, "wave.pvx", 1-kcross, kcross, p5  ;p5 = preserve spectral envelope
    prints  "--** preserve spectral envelope = %d **--\n", p5
endif
    outs asig, asig

endin
</CsInstruments>
<CsScore>
s                       
i1 0 2.76   "flutec3.wav"   ; this is the file to cross with
i1 3 2.62   "flute.aiff"    ; this one, or..
i1 6 2      "wave.wav"      ; this one

s;       sample  formant    ; all slowed down to have a good listen   
i2 0 10     0       0       ; cross flutec3 with the flute, do not preserve formants
i2 10 10    1       0       ; cross flutec3 with wave, do not preserve formants
s;       sample   formant
i2 0 10     0       1       ; cross flutec3 with the flute & preserve formants
i2 10 10    1       1       ; cross flutec3 with wave & preserve formants
e
</CsScore>
</CsoundSynthesizer>


Voir aussi

pvbufread, pvinterp, pvread, tableseg, tablexseg

Crédits

Auteur : Richard Karpen
Seattle, Wash
1997

Nouveau dans la version 3.44