***************************************************************************
***********							***********
***********							***********
***********   Description des diffrents formats SoundTracker	***********
***********							***********
***********	Format MegaTracker par Axel Follet et Simplet	***********
***********			Version 1.1			***********
***********							***********
***********							***********
***********		Par Simplet / FATAL DESIGN		***********
***********							***********
***************************************************************************


Structure du Header d'un fichier MGT :
--------------------------------------

			RsReset

MGT_Chunk		rs.b	3	* "MGT"
MGT_Version		rs.b	1	* $11, $xy pour Version x.y
MGT_Copyright		rs.b	4	* "MCS"
MGT_Nb_Voices		rs.w	1	* Nombre de Voies
MGT_Nb_Musics		rs.w	1	* Nombre de Musiques
MGT_Nb_Orders		rs.w	1	* Nombre de Positions
MGT_Nb_Patterns		rs.w	1	* Nombre de Patterns
MGT_Nb_Tracks		rs.w	1	* Nombre de Pistes sauves (sans la 0)
MGT_Nb_Samples		rs.w	1	* Nombre de Samples
MGT_Attributes		rs.w	1	* Inutilis pour l'instant
MGT_Reserved		rs.l	1	* Rserv pour le futur

MGT_Musics		rs.l	1	* Adresse des Musics
MGT_Sequences		rs.l	1	* Adresse des Sequences
MGT_Samples_Infos	rs.l	1	* Adresse des Infos Samples
MGT_Patterns		rs.l	1	* Adresse des Patterns
MGT_Tracks_Ptr		rs.l	1	* Adresse des Pointeurs de Piste
MGT_Samples_Data	rs.l	1	* Adresse des Donnes Samples
MGT_Samples_Length	rs.l	1	* Longueur Totale des Samples
MGT_Tracks_Length	rs.l	1	* Longueur des Tracks Dpackes

* Les diffrentes sections peuvent tre n'importe o dans le fichier sauf
* les pistes packes et les samples qui se trouvent obligatoirement dans
* cet ordre  la fin du fichier...

Structure d'une Music :
-----------------------

			RsReset

Music_Name		rs.b	32	* Nom de la Musique
Music_Sequence		rs.l	1	* Adresse de la Sequence
Music_Length		rs.w	1	* Longueur de la Sequence
Music_Restart		rs.w	1	* Position de Rebouclage
Music_Initial_Tempo	rs.b	1	* Tempo initial
Music_Initial_Speed	rs.b	1	* Vitesse initiale
Music_Initial_Global	rs.w	1	* Volume Global de Fade-Out initial
Music_Initial_Master_L	rs.b	1	* Volumes Master Gauche et Droit
Music_Initial_Master_R	rs.b	1	* de 0  255, Volume Normal = 32
Music_Initial_Stereos	rs.w	Nb_Voices
* Positions stro pour chacune des voies (en nombre Nb_Voices)
* 2 octets, Volumes Gauche et Droit, de 0  255 chacun
* Pour un volume normal, la somme Gauche+Droit fait 255 ou 256.

Structure d'infos sample et de header d'instrument MGS :
--------------------------------------------------------

			RsReset

Sample_Name		rs.b	32	* 32 caractres

Sample_Start		rs.l	1	* Adresse dbut du Sample
Sample_Length		rs.l	1	* Taille du sample en units
Sample_Loop_Start	rs.l	1	* Offset dbut Boucle en units
Sample_Loop_Length	rs.l	1	* Taille de la Boucle en units
Sample_Buffer_Length	rs.l	1	* Taille Minimale du Buffer en units
Sample_End_Length	rs.l	1	* Taille de la fin du sample aprs le buffer

Sample_Base		rs.l	1	* Frquence de Replay pour le DO-4
Sample_Volume		rs.w	1	* Volume par dfaut de 0  1024
Sample_Panoramic	rs.b	2	* Volumes Gauche et Droit de 0  255
					* par dfaut, 0 si y'en a pas
Sample_Attributes	rs.b	1	* bits 0 et 1 : Loop Mode -->
					*  0 = Loop Off,  1 = Forward Loop
					*  2 = Ping-Pong Loop, 3 rserv

Sample_Fine_Tune	rs.b	1	* de 0  15  =  0  7 et -8  -1

			rs.b	1	* Inutilis
Sample_Drum_Note	rs.b	1	* Informations stockes
Sample_Drum_Volume	rs.b	1	* par le Tracker
Sample_Drum_Command	rs.b	1	* pour le mode
Sample_Drum_Parameter	rs.w	1	* Drum Edit

Sample_Midi_Note	rs.l	1	* Note au format MIDI
Sample_Reserved		rs.l	1	* 4 octets Rservs

Sample_Size		rs.b	0	* 80 octets

Table des Sequences :
---------------------

			RsReset

Sequences		rs.w	Nb_Orders
* Numros de Pattern sur un word pour chaque Position des Squences

Structure d'un Pattern :
------------------------

			RsReset

Pattern_Length		rs.w	1		* Nombre de Lignes du Pattern
Pattern_Tracks		rs.w	Nb_Voices	* Numro de chaque Piste
						* pour chaque voie
Table des Adresses de Piste :
-----------------------------

			RsReset

Tracks_Adresses		rs.l	Nb_Tracks	* Adresses des Pistes

Structure d'une Piste (Track) :
-------------------------------

			RsReset

Track_Length		rs.w	1	* Nombre de Lignes de la Piste
Track_Data		rs.w	1	* Infos Note Packes

Structure d'une Info Note Packe :
----------------------------------

   Octet de Commande :	bit 2  1 pour indiquer Note
			bit 3  1 pour indiquer No de Sample
			bit 4  1 pour indiquer Volume
			bit 5  1 pour indiquer Effet
			bit 6  1 pour indiquer Paramtre 1
			bit 7  1 pour indiquer Paramtre 2

			bits 0 et 1 : 0  3
			Donne le nombre de lignes vides avant de coder
			la ligne indique par les bits 2  7.

   Suivent les octets de donnes suivant les bits 2  7

Structure d'une Info Note dpacke :
------------------------------------

*** Les effets prvus mais non-encore implments sont prcds de ***

   Octet 0 : Numro de la Note  jouer
		0 = No New Note		Ne joue pas de nouvelle note
		1 = Note Cut 		Coupe le sample
		Sinon :
		12 + Numro de note de 0  11  +  12 * Octave
		Il y a 8 octaves : de 0  7, les mmes que dans les S3M
		les octaves 3,4,5 sont les octaves Amiga 1,2,3

   Octet 1 : Numro de Sample = de 1  255, 0 = pas de changement

   Octet 2 : Colonne de Volume identique au format XM
		0 (--) = Pas de changement

		10  50 (00  40) = Nouveau Volume chelle Amiga,
				    ensuite multipli par 16.

		60  6F (<0  <F) = Volume Slide Down
		70  7F (>0  >F) = Volume Slide Up
		80  8F (-0  -F) = Fine Volume Slide Down
		90  9F (+0  +F) = Fine Volume Slide Up
		A0  AF (S0  SF) = Set Vibrato Speed
		B0  BF (V0  VF) = Vibrato
		C0  CF (P0  PF) = Set Panoramic Pos
		D0  DF (L0  LF) = Panning Slide Left
		E0  EF (R0  RF) = Panning Slide Right
		F0  FF (T0  TF) = Tone Portamento

   Octet 3 : Numro d'effet

   Octets 4 et 5 : Paramtres de l'effet


Les Effets drivs du Protracker (2.2a) :
-----------------------------------------

   Les octets de paramtre sont nots XYZT
   Le Volume est Linaire et varie de 0  1024,
   16 fois plus prcis que pour les modules Amiga
   => Volumes Amiga dcals d'un chiffre hexadcimal vers la gauche.
   Les Priodes pour les portamentos ou le vibrato sont les mmes que sur
   Amiga, mais 256 fois plus prcises
   => Periodes Amiga dcales de deux chiffres hexadcimaux vers la gauche.


 Numro		Nom			Description

   0	Rien ou Arpeggio	Changement rapide entre 3 notes
				Note normale, Note + X et Note + Y

				Si $ZT diffrent de 0, alors l'arpgge
				est effectu sur 5 Notes :
				Note Normale, + X, + Y, + Z et + T

   1	Portamento Up		Augmente la Hauteur de la Note
				en diminuant sa priode de $XYZT  chaque
				'tick' de chaque ligne

   2	Portamento Down		Diminue la Hauteur de la Note
				en augmentant sa priode de $XYZT  chaque
				'tick' de chaque ligne

   3	Tone Portamento		'Liaison' entre deux Notes, Rapproche la
				priode actuelle de la priode de la Note
				dsire en l'augmentant ou la diminuant de
				$XYZT  chaque Ligne (vitesse)

   4	Vibrato			Fait osciller la priode ( chaque 'tick')
					X est la vitesse
					YZT est l'amplitude

   5	Tone Portamento		Conserve l'effet de Tone Portamento
	+ Volume Slide		et effectue un Volume Slide (Effet No A)

   6	Vibrato			Conserve l'effet de Vibrato
	+ Volume Slide		et effectue un Volume Slide (Effet No A)

   7	Tremolo			Vibrato sur le Volume, mme fonctionnement

   8	Set Fine Panoramic Pos	$XY Fixe la balance de la voie :
				$00 Gauche..$80 Milieu..$ff Droite

   9	Sample Offset		Augmente le point de dpart du sample
				de $XYZT0 octets.

   A	Volume Slide		Augmente le Volume de $XY ou
				le diminue de $ZT  chaque 'tick' de chaque
				ligne et $XY est prioritaire

   B	Position Jump		Saute  la position numro $XYZT
				de la squence des patterns.

   C	Volume Change		Fixe le Volume Courant  $XYZT

   D	Pattern Break		Passe  la position suivante dans la
				squence et commence le pattern  la ligne
				$XYZT, attention, ce n'est plus un codage
				BCD (dcimal) mais Hexadcimal !!

   F	Set Speed/Tempo		Speed = $XY de 1  255	  0 = pas de
				Tempo = $ZT de 16  255	  changement


   Les Effets Etendus EX se retrouvent de $10  $1f

   10	Set Filter		Ignor, pour l'instant, car il est
				prvu de rajouter des effets sur le son
				type filtre, equalizer, pitch bending...

   11	Fine Portamento Up	Idem Portamento Up, sauf que la
				priode n'est diminue de $XYZT qu'une
				seule fois par ligne (au 1er 'tick')

   12	Fine Portamento Down	Idem Portamento Down, sauf que la
				priode n'est augmente de $XYZT qu'une
				seule fois par ligne (au 1er 'tick')

   13	Set Glissando Control	Y : 1 = On,  0 = Off
				A utiliser avec le Tone Portamento
				Si Off, on a un Tone Portamento normal
				sinon le glissement entre les deux
				priodes se fait demi-ton par demi-ton

   14	Set Vibrato Waveform	Y Fixe le type de courbe utilise pour
				le Vibrato :
				0:	Sinusode (par dfaut)
				1:	Ramp Down
				2:	Onde Carre
			       *3:	Alatoire (l'un des 3 autres)

				+4:	pour ne pas rinitialiser
				la courbe  chaque nouvelle note

   15	Set Fine Tune		$Y Fixe le Fine Tune du Sample :
				de 0  $f  <=> de 0  7 et -8  -1
				huitimes de demi-ton

   16	Pattern Loop		$XYZT vaut 0 pour fixer le dbut de la
				boucle. Sinon, c'est le nombre de fois
				 rpter jusqu' cette position.

   17	Set Tremolo Waveform	Fixe le type de courbe utilise pour
				le Tremolo. Idem commande $14

   18	Set Panoramic Position	$Y Fixe la balance de la voie :
				$0 Gauche...7/8 Milieu...$f Droite

   19	Note Retrig		Rejoue la note plusieurs fois entre
	+ Volume Slide		deux lignes. $XY est le nombre de
				'ticks' au bout desquels on rejoue
				la note.
	Avec un Speed de 6, si on indique 3, la note ne sera rejoue
	qu'une seule fois donc 2 fois en tout (6/3).
	Avec un Speed de 9, si on indique 2, la note sera rejoue
	3 fois de plus donc 4 fois en tout (9/2=4.5)

	En plus, $T permet de spcifiee le type de modification de
	volume  appliquer  chaque fois que le sample est rejou :
	0: rien				8: rien
	1: -$10				9: +$10
	2: -$20				A: +$20
	3: -$40				B: +$40
	4: -$80				C: +$80
	5: -$100			D: +$100
	6: 2/3 du volume prcdent	E: 3/2 fois le volume prcdent
	7: 1/3 du volume prcdent	F: 2 fois le volume prcdent


   1A	Fine Volume Slide Up	Augmente le volume de $XYZT au 1er
				'tick' de la ligne seulement.

   1B	Fine Volume Slide Down	Diminue le volume de $XYZT au 1er
				'tick' de la ligne seulement.

   1C	Note Cut		Coupe la note (Volume 0) au bout de
				$XY 'ticks' dans la ligne. Cela permet
				de faire des notes extrmement courtes.

   1D	Note Delay		Ne joue la note qu'au bout de $XY 'ticks'

   1E	Pattern Delay		Passe au pattern suivant au bout de $XY
				lignes.

***1F	Invert Loop		Vitesse en $Y

Les Effets Oktalyzer Amiga :
----------------------------

   20	Arpeggio 3		Note - X, Note normale, Note + Y

   21	Arpeggio 4		Note normale, Note + Y,
				Note normale, Note - X

   22	Arpeggio 5		Note + Y, Note + Y, Note normale

   23	Note Slide		Augmente le Numro de la Note (compt en
				demi-tons) de $XY ou le Diminue de $ZT
				 chaque 'tick', $XY est prioritaire

   24	Fine Note Slide		Mme chose mais seulement une fois par
				Ligne (au premier 'tick')

Les Effets S3M :
----------------

   25	Tremor			Joue la note pendant $XY 'ticks'
				et la coupe pendant $ZT etc..

Les Effets MegaTracker :
------------------------

   30	Set Master Mix Volume	Fixe le Volume Maitre de Mixage :
				$XY pour le canal Gauche
				$ZT pour le canal Droit

   31	Set Global Volume	Fixe le Volume Global de Fade-Out 
				$XYZT de 0  1024.

   32	Global Volume Slide	Augmente le Volume Global de $XY ou
				le diminue de $ZT  chaque 'tick' de chaque
				ligne et $XY est prioritaire

   33	Fine Global Vol Slide	Augmente le Volume Global de $XY ou
				le diminue de $ZT au 1er 'tick' de la ligne
				seulement et $XY est prioritaire

   34	Set Stereo		Fixe la panoramique de la voie :
				Volume Gauche  $XY
				et Volume Droit  $ZT.

   35	Stereo Slide		Augmente le Volume Gauche de $XY
				et le Volume Droit de $ZT  chaque
				'tick' de chaque ligne.

   36	Fine Stereo Slide	Augmente le Volume Gauche de $XY
				et le Volume Droit de $ZT au
				1er 'tick' de la ligne seulement.

   37	Set Base		Fixe la frquence de Replay du DO-4 
				$XYZT Hz. Intervalle 1500  50066 Hz.

   38	Release Sample		Joue la fin du Sample aprs la Boucle.

***39	Inverse Sample		Joue le sample  l'envers.
