pdclip — Réalise un écrêtage linéaire sur un signal audio ou un phaseur.
L'opcode pdclip permet d'écrêter un pourcentage de l'intervalle d'entrée et de l'amplifier à pleine échelle. C'est la même chose que de multiplier le signal et de limiter l'ambitus du résultat, mais pdclip permet de décider quelle partie de l'ambitus du signal doit être distordue plutot que de donner le facteur d'échelle, et il a un paramètre de décalage pour un écrêtage assymétrique de l'intervalle d'amplitude du signal. pdclip est aussi utile pour redistribuer les valeurs de phaseurs pour la synthèse par distorsion de phase.
ibipolar -- un paramètre facultatif spécifiant le mode unipolaire (0) ou bipolaire (1). Par défaut, mode unipolaire.
ifullscale -- paramètre facultatif spécifiant l'intervalle des valeurs d'entrée et de sortie. Le maximum sera ifullscale. Le minimum dépend du mode d'opération : zéro pour le mode unipolaire ou -ifullscale pour le mode bipolaire. Vaut 1.0 par défaut. Il faut donner à ce paramètre la valeur maximale attendue en entrée.
ain -- le signal d'entrée à écrêter.
aout -- le signal de sortie.
kWidth -- le pourcentage de l'ambitus du signal qui est écrêté (compris entre 0 et 1).
kCenter -- un décalage pour déplacer la fenêtre du signal non écrêté vers le haut ou vers le bas dans l'intervalle (essentiellement une composante continue). Les valeurs doivent être dans l'intervalle [-1, 1], la valeur zéro représentant l'absence de décalage (que le mode utilisé soit unipolaire ou bipolaire).
L'opcode pdclip effectue un écrêtage linéaire sur le signal ain. kWidth spécifie le pourcentage de l'amplitude du signal qui est écrêtée. Le reste de l'intervalle d'entrée est appliqué linéairement de zéro à ifullscale dans le mode unipolaire et de -ifullscale à ifullscale dans le mode bipolaire. Lorsque kCenter vaut zéro, les mêmes quantités des parties haute et basse du signal sont écrêtées. Une valeur négative décale la région non écrêtée vers le bas de l'intervalle d'entrée et une valeur positive la décale vers le haut. ibipolar doit valoir 1 pour le mode bipolaire et 0 pour le mode unipolaire. Le mode par défaut est unipolaire (ibipolar = 0). ifullscale fixe l'amplitude maximale des signaux d'entrée et de sortie (1.0 par défaut).
Cela revient à effectuer une distorsion non-linéaire de l'entrée avec la fonction de transfert suivante (normalisée à ifullscale=1.0 en mode bipolaire) :
1| _______ axe des x en entrée, axe des y en sortie
| /
| / la largeur de la région écrêtée est 2*kWidth
-1 |/ 1 la largeur de la région non écrêtée est 2*(1 - kWidth)
-------------------- kCenter décale le région non écrêtée vers
/| la gauche ou la droite (jusqu'à kWidth)
/ |
/ |
------ |-1
On peut utiliser le mode bipolaire pour une distorsion linéaire directe d'un signal audio. Alternativement, le mode unipolaire est utile pour modifier la sortie d'un phaseur avant de l'utiliser pour indexer une table de fonction, ce qui en fait effectivement une technique de distorsion de phase.
Voici un exemple de l'opcode pdclip. Il utilise le fichier pdclip.csd.
Exemple 746. Exemple de l'opcode pdclip.
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 ; Audio out Audio in -odac -iadc ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o abs.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; test instrument for pdclip opcode instr 3 idur = p3 iamp = p4 ifreq = p5 ifn = p6 kenv linseg 0, .05, 1.0, idur - .1, 1.0, .05, 0 aosc oscil 1.0, ifreq, ifn kmod expseg 0.00001, idur, 1.0 aout pdclip aosc, kmod, 0.0, 1.0 out kenv*aout*iamp endin </CsInstruments> <CsScore> f1 0 16385 10 1 f2 0 16385 10 1 .5 .3333 .25 .5 ; pdclipped sine wave i3 0 3 15000 440 1 i3 + 3 15000 330 1 i3 + 3 15000 220 1 s ; pdclipped composite wave i3 0 3 15000 440 2 i3 + 3 15000 330 2 i3 + 3 15000 220 2 e </CsScore> </CsoundSynthesizer>