pdhalf

pdhalf — Distorsion d'un phaseur pour lire les deux moitiés d'une table à des vitesses différentes.

Description

L'opcode pdhalf est conçu pour simuler la méthode "classique" de synthèse par distorsion de phase des synthétiseurs CZ de Casio, du milieu des années 1980. Cette technique lit la première et la seconde moitié d'une table de fonction à différentes vitesses de façon à déformer la forme d'onde. Par exemple, pdhalf peut transformer progressivement une onde sinus en une approximation de dent de scie.

Syntaxe

aout pdhalf 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 pdhalf avec un kShapeAmount négatif.

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

L'opcode pdhalf 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 horizontal. (En mode unipolaire, l'axe est y = 0.5, et en mode bipolaire c'est l'axe des x). Le paramètre kShapeAmount indique l'endroit de l'axe horizontal où se trouve ce point. Lorsque kShapeAmount vaut zéro, le point pivot est au milieu de l'intervalle d'entrée, 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 la gauche du graphique, produisant un motif de distorsion de phase similaire à la "dent de scie" du CZ de Casio. S'il varie de 0 à 1, le point pivot se déplace vers la droite, produisant un motif inversé.

Si l'entrée de pdhalf est un phaseur et que la sortie est utilisée pour indexer une table, les valeurs de kShapeAmount inférieures à zéro provoquent une lecture plus rapide de la première moitié de la table que de la seconde moitié. L'inverse est vrai pour les valeurs de kShapeAmount supérieures à zéro. Les vitesses de lecture sont calculées de façon à ce 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.

pdhalf 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 pdhalf à un tel signal audio produit une sorte de distorsion non linéaire grossière mais ajustable.

Voici un exemple typique de l'utilisation de pdhalf

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

Exemples

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

Exemple 679. Exemple de l'opcode pdhalf.

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 pdhalf.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

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

instr 4

    idur        = p3
    iamp        = p4
    ifreq       = p5
    itable      = p6
    
    aenv        linseg      0, .001, 1.0, idur - .051, 1.0, .05, 0
    aosc        phasor      ifreq
    kamount     linseg      0.0, 0.02, -0.99, 0.05, -0.9, idur-0.06, 0.0
    apd         pdhalf      aosc, kamount
    aout        tablei      apd, itable, 1
    
                outs         aenv*aout*iamp, aenv*aout*iamp     
endin

</CsInstruments>
<CsScore>
f1 0 16385 10 1
f2 0 16385 10 1 .5 .3333 .25 .5
f3 0 16385  9 1 1 270           ; inverted cosine

; descending "just blues" scale

; pdhalf with cosine table
; (imitates the CZ-101 "sawtooth waveform")
t 0 100
i4 0 3   .6     512     3
i. + .    .     448
i. + .    .     384
i. + .    .     358.4
i. + .    .     341.33
i. + .    .     298.67
i. + 5    .     256
s
; pdhalf with a sine table
t 0 120
i4 0 3   .6     512     1
i. + .    .     448
i. + .    .     384
i. + .    .     358.4
i. + .    .     341.33
i. + .    .     298.67
i. + 5    .     256
s
; pdhalf with a sawtooth-like table
t 0 150
i4 0 3   .6     512     2
i. + .    .     448
i. + .    .     384
i. + .    .     358.4
i. + .    .     341.33
i. + .    .     298.67
i. + 5    .     256
e
</CsScore>
</CsoundSynthesizer>


Voir aussi

pdhalfy, 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.