pvadd — Lit un fichier pvoc et utilise ses données pour réaliser une synthèse additive.
pvadd lit un fichier pvoc et utilise ses données pour réaliser une synthèse additive au moyen d'un ensemble interne d'oscillateurs avec interpolation. L'utilisateur fournit la table d'onde (habituellement une période d'une onde sinusoïdale), et il peut choisir quels bins de l'analyse seront utilisés lors de la resynthèse.
ares pvadd ktimpnt, kfmod, ifilcod, ifn, ibins [, ibinoffset] \
[, ibinincr] [, iextractmode] [, ifreqlim] [, igatefn]
ifilcod -- entier ou chaîne de caractères dénotant un fichier de contrôle dérivé de l'analyse d'un signal audio par pvanal. Un entier dénote le suffixe d'un fichier pvoc.m ; une chaîne de caractères (entre guillemets) donne un nom de fichier, optionnellement un nom de chemin complet. Si ce n'est pas un nom de chemin complet, le fichier est d'abord cherché dans le répertoire courant, ensuite dans celui donné par la variable d'environnement SADIR (si elle est définie). Les fichiers de contrôle pvoc contiennent des données organisées pour la resynthèse par TFR. L'utilisation de la mémoire dépend de la taille des fichiers impliqués, qui sont lus et maintenus entièrement dans la mémoire durant les calculs, mais sont partagés par les appels multiples (voir aussi lpread).
ifn -- numéro de la table d'une fonction mémorisée contenant une onde sinusoïdale.
ibins -- nombre de bins utilisés dans la resynthèse (chaque bin compte pour un oscillateur dans la resynthèse).
ibinoffset (facultatif) -- est le premier bin utilisé (c'est une option et vaut 0 par défaut).
ibinincr (facultatif) -- fixe un incrément par lequel pvadd compte ibins composants à partir de ibinoffset pour la resynthèse (voir ci-dessous pour une explication plus détaillée).
iextractmode (facultatif) -- détermine s'il faut effectuer l'extraction spectrale et, dans ce cas, quels composants ayant des variations de fréquence sous ifreqlim ou au-dessus de ifreqlim seront écartés. Si iextractmode vaut 1, pvadd ne synthétise que les composants pour lesquels la différence de fréquence entre les trames d'analyse est plus grande que ifreqlim. Si iextractmode vaut 2, pvadd ne synthétise que les composants pour lesquels la différence de fréquence entre trames est plus petite que ifreqlim. iextractmode et ifreqlim valent 0 par défaut, ce qui provoque une simple resynthèse. Voir les exemples ci-dessous.
igatefn (facultatif) -- le numéro d'une fonction stockée à appliquer aux amplitudes des bins de l'analyse avant la resynthèse. Si igatefn est supérieur à 0, les amplitudes de chaque bin seront modifiées par igatefn par un procédé simple de correspondance. D'abord, les amplitudes de tous les bins dans toutes les trames de l'ensemble du fichier d'analyse sont comparées pour déterminer la valeur de l'amplitude maximale. Cette valeur est ensuite utilisée pour créer des amplitudes normalisées comme indices dans la fonction stockée igatefn. L'amplitude maximale correspond au dernier point dans la fonction. Une amplitude nulle correspond au premier point dans la fonction. Les valeurs entre 0 et 1 sont mises en correspondance avec les points tout au long de la table de fonction. Ceci est illustré dans les exemples ci-dessous.
ktime line 0, p3, p3 asig pvadd ktime, 1, « oboe.pvoc », 1, 100, 2
Ci-dessus, ibins vaut 100 et ibinoffset vaut 2. Avec ces réglages, la resynthèse contiendra 100 composants commençant avec le bin n°2 (les bins sont comptés à partir de 0). Donc, la resynthèse sera réalisée avec les bins 2 à 101 inclus. Il est généralement avisé de commencer avec le bin 1 ou 2, car le bin 0, et souvent le bin 1, contiennent des données inutiles voire inefficaces pour la création d'une resynthèse propre.
ktime line 0, p3, p3 asig pvadd ktime, 1, « oboe.pvoc », 1, 100, 2, 2
L'exemple ci-dessus est le même que le précédent avec l'addition de la valeur 2 utilisée pour l'argument facultatif ibinincr. Le résultat comprend toujours 100 composants dans la resynthèse, mais pvadd compte les bins par 2 au lieu de 1. Il utilise ainsi les bins 2, 4, 6, 8, 10, et ainsi de suite. Avec ibins=10, ibinoffset=10 et ibinincr=10, pvadd utiliserait les bins 10, 20, 30, 40, jusqu'à 100 inclus.
Ci-dessous, un exemple utilisant l'extraction spectrale. Dans cet exemple, iextractmode vaut 1 et ifreqlim vaut 9. Ainsi, pvadd ne synthétise que les bins pour lesquels la moyenne de la déviation en fréquence prise sur 6 trames est supérieure à 9.
ktime line 0, p3, p3 asig pvadd ktime, 1, « oboe.pvoc », 1, 100, 2, 2, 1, 9
Si iextractmode avait eu pour valeur 2 dans l'exemple ci-dessus, seuls les bins avec une déviation en fréquence moyenne inférieure à 9 auraient été synthétisés. Avec de bons réglages, cette technique peut être utilisée pour séparer les parties à hauteur définie du spectre des parties bruiteuses. En pratique, cela dépend beaucoup du type de son, de la qualité de l'enregistrement et de la numérisation, et aussi de la taille de la fenêtre d'analyse et de l'incrément de trame.
L'exemple suivant utilise le mappage d'amplitude. Le dernier 2 dans la liste d'arguments indique f2 dans la partition.
asig pvadd ktime, 1, « oboe.pvoc », 1, 100, 2, 2, 0, 0, 2
En supposant que la partition contienne :
f2 0 512 7 0 256 1 256 1
Les bins dont l'amplitude est supérieure ou égale à 50% du maximum resteront inchangés, tandis que ceux dont l'amplitude est inférieure à 50% du maximum seront atténués. Dans ce cas, plus l'amplitude est faible et plus l'atténuation sera forte. Mais supposons que la partition contienne :
f2 0 512 5 1 512 .001
Dans ce cas, les amplitudes les plus faibles resteront inchangées tandis que les plus fortes seront atténuées, « inversant » le son en termes de spectre d'amplitude ! Les fonctions peuvent être arbitrairement compliquées. Il faut simplement se souvenir que les valeurs d'amplitude de l'analyse normalisées sont elles-mêmes les indices dans la fonction.
Finalement, on peut utiliser de concert l'extraction spectrale et le mappage d'amplitude. L'exemple ci-dessous ne synthétise que les composants ayant une déviation en fréquence de moins de 5 Hz par trame et il pondère les amplitudes selon la table f2.
asig pvadd ktime, 1, « oboe.pvoc », 1, 100, 1, 1, 2, 5, 2
REMARQUES UTILES | |
---|---|
En utilisant plusieurs unités pvadd ensemble, il est possible de faire un fondu entre différentes parties de la resynthèse, ce qui crée des effets de « filtrage » variés. L'auteur utilise pvadd pour synthétiser un bin à la fois afin de contrôler séparément chaque composant de la resynthèse. Si une combinaison de ibins, ibinoffset et ibinincr crée une situation où pvadd doit utiliser un numéro de bin supérieur au nombre de bins dans l'analyse, il n'utilisera que l'ensemble des bins disponibles, sans protester. Ainsi, pour utiliser tous les bins, il suffit de donner une grande valeur à ibins (par exemple 2000). Il faut s'attendre dans tous les cas à augmenter les amplitudes d'un facteur compris entre 10 et 100. |
Voici un exemple complet de l'opcode pvadd. Il utilise le fichier pvadd.csd
Exemple 798. Exemple de l'opcode pvadd.
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 --limiter=.95 ;;;realtime audio out, with limiter protection ;-iadc ;;;uncomment -iadc if realtime audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o pvadd.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 0dbfs = 1 nchnls = 2 ; by Menno Knevel 2021 gilen filelen "fox.wav" ; get length of impulse soundfile ; analyze sound file and output result to pvoc-ex file ires system_i 1,{{ pvanal fox.wav fox1.pvx }} ; default settings instr 1 ; untreated signal asig diskin2 "fox.wav", 1 prints "\n---***YOU NOW HEAR THE UNTREATED SOUND SAMPLE***---\n" outs asig, asig endin instr 2 prints "\n---***YOU NOW HEAR THE RESULT OF THIS ANALYZED FILE:***---\n" ibins = p4 igatefn = p5 ktime line 0, p3, p3 asig pvadd ktime, 1, "fox1.pvx", 1, ibins, 0, 1, 0, 0, igatefn outs asig*.7, asig*.7 endin </CsInstruments> <CsScore> f 1 0 16384 10 1 ; sine wave f 2 0 512 7 1 512 1 ; 3 different tables for scaling of the gate f 3 0 512 5 1 256 .001 f 4 0 512 7 0 256 1 256 1 i1 0 2.76 ; original sample s ; bins table i2 0 2.76 300 2 ; lots of bins & table 2 scales amplitudes (= no change) i2 3 2.76 300 3 ; table 3 scales amplitudes i2 6 2.76 300 4 ; table 4 scales amplitudes s ; bins table i2 0 2.76 30 2 ; a few bins & table 2 scales amplitudes (= no change) i2 3 2.76 30 3 ; table 3 scales amplitudes i2 6 2.76 30 4 ; table 4 scales amplitudes e </CsScore> </CsoundSynthesizer>