pdhalfy — Distorsion d'un phaseur pour lire deux parties inégales d'une table avec la même vitesse.
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.
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 à 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.
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
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>
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