Modulation de phase avec rétroactionSources et résultat sonore : Dans cet exemple, un oscillateur se module lui-même en phase par une boucle de rétroaction. On remarquera que la fréquence fondamentale de l'oscillateur n'est pas affectée par la modulation, ce qui permet de garder une stabilité de la hauteur de la note jouée. L'indice de modulation des dernières notes de l'exemple est exagéré, ce qui ajoute du bruit au timbre. ![]() L'orchestre Csoundsr = 44100 kr = 4410 ksmps = 10 nchnls = 1 opcode fdbkPM, a, kk setksmps 1 kcps, kmod xin asig0 init 0 aphi phasor kcps ;in Phase Modulation, modulation index is independant from modulator frequency aphi = frac(aphi + kmod*asig0) asig tablei aphi, 1, 1, 0, 1 asig0 = asig xout asig endop instr 3 idur = p3 iamp = p4 icarcps = cpspch(p5) indxmul = p6 / 6.2831853 ;p6/(2*pi) kndx adsr 0.4, 0.5, 0.1, 0.05 kmod = kndx * indxmul asig fdbkPM icarcps, kmod kenv adsr 0.1, 0.2, 0.8, 0.2 out iamp * kenv * asig endin Pour que la boucle de rétroaction fonctionne, il faut que le taux de contrôle soit le même que le taux d'échantillonnage (ksmps = 1). C'est pourquoi l'algorithme est implémenté dans un opérateur défini par l'utilisateur (UDO) appelé fdbkPM. Cet opérateur prend deux paramètres de taux k, la fréquence de l'oscillateur et l'indice de modulation, et retourne un signal audio. L'instruction setksmps 1 fixe l'égalité entre le taux de contrôle et le taux d'échantillonage à l'intérieur de l'opérateur. La a-variable asig0 sert de tampon pour le délai d'un échantillon de la boucle de rétroaction. |