Pratiquement tous les effets sont supportés à présent:
- 0xy Arpeggio OUI
- 1xx Portamento Up OUI
- 2xx Portamento Down OUI
- 4xy Vibrato OUI
- 5xy Volume Slide + Tone Portamento OUI
- 6xy Volume Slide + Vibrato OUI
- 7xy Tremolo OUI
- 8xx Set Panning IGNORE (n'a pas de sens en mono)
- 9xx Sample Offset OUI
- A0x Volume Slide Down OUI
- Ax0 Volume Slide Up OUI
- Bxx Position Jump OUI
- Cxx Set Volume OUI
- Dxx Pattern Break OUI
- E00 Filter on IGNORE (n'a pas de sens vue la fréquence où l'on joue.. Pourrait éventuellement allumer la LED caps lock?)
- E01 Filter off IGNORE (n'a pas de sens vue la fréquence où l'on joue.. Pourrait éventuellement éteindre la LED caps lock?)
- E1x Fine Portamento Up OUI
- E2x Fine Portamento Down OUI
- E3x Glissando Control OUI
- E4x Set Vibrato Waveform OUI
- E5x Set Finetune OUI
- E60 Pattern Loop Start OUI
- E6x Pattern Loop OUI
- E7x Tremolo Waveform OUI
- E8x Set Panning IGNORE (n'a pas de sens en mono)
- E9x Retrigger OUI
- EAx Fine Volume Slide Up OUI
- EBx Fine Volume Slide Down OUI
- ECx Note Cut OUI
- EDx Note Delay OUI
- EEx Pattern Delay OUI
- EFx Invert Loop NON
(et ne le sera probablement jammais tant je ne comprends pas l'intéret: un sample et son opposé (+v devient -v) sonnent pareil, auf qu'ici on peut inverser qu'une partie des octets de l'intrument. Comprends pas
on joue avec la phase ou quoi? )
Le truc pour toutes ces effects est qu'il sont trompeurs. Le format est mal conçu. Si au lieu de décrire le morceau au niveau ROW, on le décrit au niveaux FRAME (1 ROW = n FRAMES (n = 6 souvent), une FRAME = 1vbl = 20ms fixe), alors tout est beaucoup plus simple et toute cette plétore de commandes se réduisent à seulement 3 par canal:
- démarrer un intrument
- changer le volume
- changer la fréquence
auquels s'ajoute le plus important
- attendre 20ms et jouer le sons pendant ce temp là
C'est simple vu comme ca.
Après on peut enrichir avec des truc pour rendre ces commandes compactes et façilement décodables, mais ce n'est que du détail. Tout le boulot de traduction du MOD niveau ROW à notre format niveau FRAME est fait par le programme LUA mod2mp.lua. C'est lui qui se tape les subtilité (comprendre complications) du format PROTRACKER. Le player lui en reste à ces 3+1 instructions.
Cette dernière commande et celle sur laquelle j'ai écrit le premier message de ce fil car c'est là dedans que se joue la "magie". Elle fait tourner 4 compteurs (un par voix) 24 bit au format 16+8 bits. Les 16bits de la partie entière sont l'adressse de l'échantillon pour ce canal et les 8 derniers sont la partie fractionnaire de la fréquence ("pour jouer juste"). Puis les échantillons sont cherchés en mémoire à partir de la partie entière des compteur, modulés en volume, et additionnés pour sortir la valeur finale au DAC. Cela se fait en 200µs (ce qui fait 50ms par voix) et donc pour faire 20ms il suffit de boucler exactement 100fois. Voilà toute l'idée. Ca marche relativement bien car à 200µs par sortie sur le DAC on atteint 5khz ce qui est plus la qualité audio de la parole dans la téléphonie mobile. Evidemment si on pouvait réduire la durée de la boucle, on augmenterait la fréquence de sortie et par là même la qualité, mais j'ai peu d'espoirs de ce coté (1mhz c'est pas rapide quand on y pense).