Revenir au sommaire Tutoriaux

Le Pitch des Samples de Modules, par:
Plouf
(plouf@win.be ou theplouf@yahoo.com)
     
Habituellement le niveau de documentation se résume à quelques formules dans les fichiers décrivant le format des mods et autres s3m. Même si ces formules sont complètes, elles sont souvent inutilisables pour ceux qui ne savent pas comment les exploiter.
.
Bah je va vous expliquer :)
.
1) Quelques rappels sur la mathématique du son
Une note (do,ré,mi...) ainsi qu'un octave définit un son bien précis. Un son dans le sens de la fréquence de ce son. Plus la fréquence est haute, plus le son est aïgu, et plus elle est basse, plus le son est grave. La fréquence, dans le problème informatique qui nous occupe, est le nombre d'octets joués par seconde. Plus on envoie rapidement les octets d'un sample à la carte son, et plus le son sera aïgu.
Pour une fréquence donnée, correspondant à une note et un octave précis, on passe à l'octave suivant en multipliant cette fréquence par deux. Invérsement, quand on divise la fréquence par deux, on passe à l'octave inférieur.
Dans un même octave, la fréquence de deux notes consécutives sont dans un rapport constant. On a donc que Freq(1)/Freq(0)=Freq(2)/Freq(1)=Freq(3)/Freq(2) etc...
Où Do est représenté par 0, les chiffres suivants représentant les notes suivantes. Sur un octave, il y a douzes notes (Avec les dièses).
Si on réfléchit un peu, on comprend vite que ce fameux rapport vaut racine douzième de deux=2^(1/12)
La période vaut, pardon pour les puristes et autres mathématiciens ou physiciens, l'inverse de la fréquence.
.
Per=1/Freq
.
Et la fréquence peut finalement se calculer comme suit : Freq=BaseFreq*2^(Note/12+Octave) où BaseFreq est la fréquence à partir de laquelle on commence à compter les notes et les octaves.
.
2) Dans le mod
Dans le fichier mod, on ne vous donne pas la fréquence, mais bien la période de la note à jouer. Pour connaitre sa fréquence, il faudrait utiliser cette simple formule :
Freq=1/Periode octets par seconde.
.
Evidemment ça serait trop simple (et puis on aurait des fréquence minuscules, on voit bien que ça ne colle pas).
.
En réalité, ça n'est pas la période, mais bien le rapport multiplié par 428 entre la période de la note dont on parle et la période de la note "centrale", à savoir C-2 (Première note, seconde octave, selon l'ordre des notes C C# D D# E F F# G G# A A# B)
.
Et nous savons (c'est ainsi, c'est décidé) que la fréquence de cette note est de 8363 octets par seconde.
Ce qui nous donne au final :
Freq=8363/(Per/428)=3579364/Per=7158728/(2*Per)
.
La dernière forme est la forme sous laquelle on trouve souvent cette formule. Cela vient du fait que le chiffre 7158728 est la fréquence de je ne sais plus quel bidule sur l'amiga (l'ordi natal du mod) qu'on utilisait pour jouer les mods. (La valeur exacte étant 7159090.5)
Une dernière forme (celle utilisée par PMP) est 8363*1712/(4*Per)=14317456/(4*Per) car elle permet également de gérer les autres formats tels les .XM.
Note : pour le .s3m, cette valeur 8363 n'est plus constante et est renseignée dans le sample lui-même. Cette valeur est appelée C2Spd comme "C-2 Speed" ce qui veut bien dire ce que ça veut dire.
.
3) La gestion des effets
Tous les effets qui modifient le pitch du sample (Arpeggio, Pitchup, PortaNote, Vibrato etc...) midifient la période et non pas la fréquence. C'est en effet plus comode puisque c'est justement la période que nous donne le fichier .mod. Cela nous évite des calculs inutiles. Par exemple, le pitch up diminue (bah oui, si on diminue la période, on augmente la fréquence) la période de X tous les ticks, où X est la valeur précisée dans la commande de l'effet.
.
L'arpeggio, bien qu'il modifie la période, réagit, lui, en terme de demi-note (une demi-note pour le musicien correspond à une note pour nous, donc à 1/12 d'octave). Si il nous demande de diminuer la fréquence d'une demi note (half-tone), il faut multiplier la période par 2^(1/12).
.
4) La linear frequency table
Ce que nous venons de voir s'appelle l'amiga frequency table, et pour cause, elle utilise directement une constante issue de l'amiga.
.
Dans les .xm et les .it, on utilise également une autre méthode de calcul : ressortons notre belle formule :
Freq=BaseFreq*2^(Note/12+Octave)
.
Si on donne la fréquence de base du sample, ainsi que la note et l'octave que l'on désire jouer, on peut directement en conclure la fréquence.
Evidemment, cela pose un problème car tous les effets ne modifient que la période, qu'il ne faut pas calculer ici! C'est pourquoi il faut tout d'abord calculer la période, éventuellement la modifier pour les effets. Or ici, très curieusement, la formule documentée pour calculer la période en fonction de la note et de l'octave est linaire (d'où son nom), et est pour le XM :
Per=64*(120-Data) avec Data=Note+Octave*12,
Octave allant de 0 à 9 et Note de 1 à 12.
.
La fréquence se calcul alors par
Freq=8363*2^((4608-Per)/768)
et c'est pas moi qui le dit, c'est les gars qu'on fait le .XM. Si on tente de redémontrer la formule, on se rend compte que ça colle presque, il y a un espèce de facteur 16 parasite qui doit provenir d'un facteur 4 omniprésent dans tous les effets (il faut en effet multiplier par 4 tous les paramètres modifiant le pitch du sample)
.
Ceci est un grand mystère, mais ça n'est ni le premier ni le dernier dans le monde fantastique des mods :)

Revenir au sommaire Tutoriaux

Hit-Parade