GEN33

GEN33 — Génère des formes d'onde complexes en mélangeant des sinus.

Description

Ces routines génèrent des formes d'onde complexes en mélangeant des sinus, comme GEN09, mais les paramètres des partiels sont spécifiés dans une table déjà existante, ce qui permet de calculer n'importe quel nombre de partiels dans l'orchestre.

La différence entre GEN33 et GEN34 est que GEN33 utilise la TFR inverse pour générer la sortie, alors que GEN34 est basé sur l'algorithme utilisé dans les opcode oscils. GEN33 ne permet que des partiels entiers, et ne supporte pas les tailles de table égales à une puissance-de-deux plus 1, mais peut être significativement plus rapide avec un grand nombre de partiels. D'un autre côté, avec GEN34, il est possible d'utiliser des numéros de partiel non entiers et un point de garde, et cette routine peut être plus rapide s'il n'y a qu'un petit nombre de partiels (noter que GEN34 est aussi plusieurs fois plus rapide que GEN09, bien que ce dernier soit plus précis).

Syntaxe

f # date taille 33 src nh ech [fmode]

Initialisation

taille -- nombre de points dans la table. Doit être une puissance de deux et au moins 4.

src -- numéro de la table source. Cette table contient les paramètres de chaque partiel dans le format suivant :

ampa, pna, phsa, ampb, pnb, phsb, ...

les paramètres sont :

  • ampa, ampb, etc. : amplitude relative des partiels. L'amplitude actuelle dépend de la valeur de ech, ou de la normalisation (si celle-ci est active).

  • pna, pnb, etc. : numéro de partiel, ou fréquence, en fonction de fmode (voir ci-dessous) ; zéro et des valeurs négatives sont autorisés, cependant, si la valeur absolue du numéro de partiel dépasse (taille / 2), le partiel ne sera pas rendu. Avec GEN33, le numéro de partiel est arrondi à l'entier le plus proche.

  • phsa, phsb, etc. : phase initiale, dans l'intervalle de 0 à 1.

La longueur de la table (sans compter le point de garde) devrait être d'au moins 3 * nh. Si la table est trop courte, le nombre de partiels (nh) est réduit à (longueur de la table) / 3, arrondi vers zéro.

nh -- nombre de partiels. Zéro ou des valeurs négatives sont autorisés, et donnent une table vide (silence). Le nombre effectif peut être diminué si la table source (src) est trop courte, ou si certains partiels ont une fréquence trop haute.

ech -- échelle d'amplitude.

fmode (facultatif, défaut = 0) -- une valeur non nulle indique que les fréquences sont en Hz au lieu de numéros de partiel dans la table source. Le taux d'échantillonage est supposé être fmode si celui-ci est positif, ou -(sr * fmode) si une valeur négative est spécifiée.

Exemples

; partiels 1, 4, 7, 10, 13, 16, etc. avec une fréquence de base de 400 Hz

ibsfrq  =  400
; nombre de partiels estimé
inumh   =  int(1.5 + sr * 0.5 / (3 * ibsfrq))
; longueur de la table source
isrcln  =  int(0.5 + exp(log(2) * int(1.01 + log(inumh * 3) / log(2))))
; crée une table source vide
itmp    ftgen 1, 0, isrcln, -2, 0
ifpos   =  0
ifrq    =  ibsfrq
inumh   =  0
l1:
        tableiw ibsfrq / ifrq, ifpos, 1         ; amplitude
        tableiw ifrq, ifpos + 1, 1              ; fréquence
        tableiw 0, ifpos + 2, 1                 ; phase
ifpos   =  ifpos + 3
ifrq    =  ifrq + ibsfrq * 3
inumh   =  inumh + 1
        if (ifrq < (sr * 0.5)) igoto l1

; stocke la sortie dans la ftable 2 (taille = 262144)

itmp    ftgen 2, 0, 262144, -33, 1, inumh, 1, -1

Voir aussi

GEN09, GEN34

Crédits

Programmeur : Istvan Varga
Mars 2002

Nouveau dans la version 4.19