pvcross — Applique les amplitudes d'un fichier d'analyse par vocodeur de phase aux données d'un second fichier.
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.
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.
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.
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>