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 :) |