pdhalfy

pdhalfy — Distorsion d'un phaseur pour lire deux parties inégales d'une table avec la même vitesse.

Description

L'opcode pdhalfy est une variation sur la méthode de distorsion de phase de l'opcode pdhalf. Il est utile pour distordre un phaseur afin de lire deux parties inégales d'une table dans le même nombre d'échantillons.

Syntaxe

aout pdhalfy ain, kShapeAmount [, 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 à distordre.

aout -- le signal de sortie.

kShapeAmount -- la quantité de distorsion appliquée à l'entrée. Doit être comprise entre -1 et +1. Zéro signifie pas de distorsion.

Fonction de transfert créée par pdhalfy avec un kShapeAmount négatif.

Fonction de transfert créée par pdhalfy avec un kShapeAmount négatif.

L'opcode pdhalfy calcule une fonction de transfert composée de deux segments de droite (voir le graphique). Ces segments se touchent en un "point pivot" qui se trouve toujours sur le même axe vertictal. (En mode unipolaire, l'axe est x = 0.5, et en mode bipolaire c'est l'axe des y). Ainsi, pdhalfy est une variation de l'opcode pdhalf qui place le point pivot du motif de distorsion de phase sur un axe vertical au lieu d'un axe horizontal.

Le paramètre kShapeAmount indique l'endroit de l'axe vertical où se trouve ce point. Lorsque kShapeAmount vaut zéro, le point pivot est au milieu de l'intervalle de sortie, si bien que la fonction de transfert est une droite, ce qui ne provoque aucun changement dans le signal d'entrée. Si kShapeAmount varie de 0 à -1, le point pivot se déplace vers le bas du graphique. S'il varie de 0 à 1, le point pivot se déplace vers le haut, produisant un motif inversé.

Si l'entrée de pdhalfy est un phaseur et que la sortie est utilisée pour indexer une table, celle-ci sera divisée en deux parties de différentes tailles, chaque partie étant lue pendant la moitié de la période de l'oscillateur. Les valeurs de kShapeAmount inférieures à zéro provoqueront une lecture de moins de la moitié de la table pendant la moitié de la première période d'oscillation. Le reste de la table sera lu pendant la seconde moitié de la période. L'inverse est vrai pour les valeurs de kShapeAmount supérieures à zéro. Noter que la fréquence du phaseur reste inchangée. Ainsi, cette méthode de distorsion de phase ne peut produire que des partiels harmoniques. Elle ne peut pas produire de bandes latérales inharmoniques comme le fait la modulation de fréquence. pdhalfy tend à avoir une qualité de distorsion plus douce que celle de pdhalf.

pdhalfy peut fonctionner en modes unipolaire ou bipolaire. Le mode unipolaire est approprié pour les signaux comme les phaseurs qui varient entre zéro et une valeur maximale (fixée par ifullscale). Le mode bipolaire est approprié pour les signaux qui varient de part et d'autre de zéro d'environ la même quantité comme la plupart des signaux audio. L'application directe de pdhalfy à un tel signal audio produit une sorte de distorsion non linéaire grossière mais ajustable.

Voici un exemple typique de l'utilisation de pdhalfy

    aphase    phasor     ifreq
    apd       pdhalfy    aphase, kamount
    aout      tablei     apd, 1, 1

Exemples

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

Exemple 748. Exemple de l'opcode pdhalfy.

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     ;;;realtime audio out
;-iadc    ;;;uncomment -iadc if realtime audio input is needed too
; For Non-realtime ouput leave only the line below:
; -o pdhalfy.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

sr = 44100
ksmps = 32
nchnls = 2
0dbfs  = 1

instr 5

    idur        = p3
    iamp        = p4
    ifreq       = p5
    iamtinit    = p6      ; initial amount of phase distortion
    iatt        = p7      ; attack time
    isuslvl     = p8      ; sustain amplitude
    idistdec    = p9      ; time for distortion amount to reach zero
    itable      = p10
    
    idec        =  idistdec - iatt
    irel        =  .05
    isus        =  idur - (idistdec + irel)
    
    aenv        linseg      0, iatt, 1.0, idec, isuslvl, isus, isuslvl, irel, 0, 0, 0
    kamount     linseg      -iamtinit, idistdec, 0.0, idur-idistdec, 0.0
    aosc        phasor      ifreq
    apd         pdhalfy     aosc, kamount
    aout        tablei      apd, itable, 1
    
                outs        aenv*aout*iamp, aenv*aout*iamp       
endin

</CsInstruments>
<CsScore>
f1 0 16385 10 1                 ; sine
f3 0 16385  9 1 1 270           ; inverted cosine

; descending "just blues" scale

; pdhalfy with cosine table
t 0 100
i5 0 .333 .6    512     1.0   .02  0.5  .12   3
i. + .    .     448     <
i. + .    .     384     <
i. + .    .     358.4   <
i. + .    .     341.33  <
i. + .    .     298.67  <
i. + 2    .     256     0.5
s

; pdhalfy with sine table
t 0 100
i5 0 .333 .6    512     1.0   .001 0.1  .07   1
i. + .    .     448     <
i. + .    .     384     <
i. + .    .     358.4   <
i. + .    .     341.33  <
i. + .    .     298.67  <
i. + 2    .     256     0.5
e
</CsScore>
</CsoundSynthesizer>


Voir aussi

pdhalf, pdclip

On peut trouver plus d'information au sujet de la synthèse par distorsion de phase sur Wikipedia à http://en.wikipedia.org/wiki/Phase_distortion_synthesis

Crédits

Auteur : Anthony Kozar
Janvier 2008

Nouveau dans la version 5.08 de Csound.