pdclip

pdclip — Réalise un écrêtage linéaire sur un signal audio ou un phaseur.

Description

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.

Syntaxe

aout pdclip ain, kWidth, kCenter [, ibipolar [, ifullscale]]

Initialisation

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.

Exécution

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.

Voir aussi

pdhalf, pdhalfy, limit, clip, distort1

Exemples

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

Exemple 678. 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>


Crédits

Auteur : Anthony Kozar
Janvier 2008

Nouveau dans la version 5.08 de Csound.