Message personnel à l'attention de GT : merci de passer au topic suivant

RYGAR (./31) :
Du coté de ce qui manque je dirais la musique mais là c'est en bonne voie, j'ai mes fichiers musicaux tous près et il me reste juste à apprendre comment et ou les insérer dans mon code pour qu'ils soient joués en même temps que les parties.
Bon, désolé pour le retard.
Comment inclure une musique ABC dans son programme ?
Tu as besoin de mettre plusieurs éléments dans ton source :
Au niveau des déclarations (par exemple, juste après #include <stdlib.h>), il te faut déclarer les fonctions du module abcmusic que tu vas utiliser :
/* Routines defined in abcmusic.obj */
extern void silence();
extern void abcmusic();
extern void update_music();
Ensuite, tu déclares tes chaines musicales. Karri dans ses exemples, déclare une chaine de caractères qu'il alimente en assembleur :
Tu as le droit à 4 voies, chaque chaine de caractères sera donc une voie.
extern char abcmusic0[]; // déclaration C voie 0
extern char abcmusic1[]; // déclaration C voie 1
extern char abcmusic2[]; // déclaration C voie 2
extern char abcmusic3[]; // déclaration C voie 3
#asm
xref _abcmusic0
xref _abcmusic1
xref _abcmusic2
xref _abcmusic3
_abcmusic0 ;Bass
dc.b "O5X7I0V52T8R40H2K2"
dc.b " zzezzdzzezdeE4 zzezzdzzezdBG4 zzez zdzz ezde E4 zzez zdzz ~d2z~d2z~d2"
dc.b "|:zzezzdzzezdeE4 zzezzdzzezdBG4 zzez zdzz ezde E4 zzez zdzz ~d2z~d2z~d2"
dc.b " zzezzdzzezdeE4 zzezzdzzezdBG4 zzez zdzz ezde E4 zzez zdzz ~d2z~d2z~d2"
dc.b " zzdeEE3EzEE4z zzdeEE3G2zG2zA2 zzdeEE3EzEE4z zzdeEE3d2zd2z~d2"
dc.b " zzdeEE3EzEE4z zzdeEE3G2zG2zA2 zzdeEE3EzEE4z zzdeEE3d2zd2z~d2:"
dc.b 0
_abcmusic1 ;Drums
;***dc.b "O3X26I0V38T8R127H2K2"
dc.b "O3X54I0V32T8R127H4K4"
dc.b " zzO3ezee2 e O3E3E O3e4 zzO3E2 O3e O3E3 O3E3E O3e4 zzO3E2 O3e O3E3 O3E3E O3e4 zzO3E2 O3e O3E3 O3E2zE2z e2"
dc.b "|:zzO3ezee2 e O3E3E O3e4 zzO3E2 O3e O3E3 O3E3E O3e4 zzO3E2 O3e O3E3 O3E3E O3e4 zzO3E2 O3e O3E3 O3E2zE2z e2"
dc.b " zzO3E2 O3e O3E3 O3E3E O3e4 zzO3E2 O3e O3E3 O3E3E O3e4 zzO3E2 O3e O3E3 O3E3E O3e4 zzO3E2 O3e O3E3 O3E2zE2z e2"
dc.b " zzO3E2 O3e O3E3 E4e4E4e4E4e4E4e4E4e4E4e4E4e4 E4e4E4e4E4e4E4e4E4e4E4e4E4e4E4e4:"
dc.b 0
_abcmusic2 ;verse Synth & Chorus Lead Synth
dc.b "O2X10I0V10T8R60H6K1"
;dc.b " O1zzEz O2E O1E O1zzEz O2E O1Ezz O1zzEz O2E O1E O1zzEz O2E O1Ezz"
dc.b " O1zzBzzBzzBzzB4z zzBzzBzzBzzB4z zzBzzBzzBzzB4z O1zz=fzz=fzzezze4z"
dc.b "|: V10 O1zzBzzBzzBzzB4z zzBzzBzzBzzB4z zzBzzBzzBzzB4z O1zz=fzz=fzzezze4z"
dc.b " O1zzBzzBzzBzzB4z zzBzzBzzBzzB4z zzBzzBzzBzzB4z O1zz=fzz=fzzezze4z"
dc.b " V18 O2V16A2B2B2A2B2B2A2B2A2B2B2A2B2B4zz A2B2B2A2B2B2A2B2 d3d3=c2A3B3zz"
dc.b " O2V16A2B2B2B2 A2B2BBz BA2B2B2A2B4z4 A2B2B2BBA2BB3 B2 d2d2=c2A2B3z4z:"
dc.b 0
_abcmusic3 ;Guitar
dc.b "O3X7I0V15T8R80H8K1"
dc.b "z4z4z4z4 z4z4z4z4 z4z4z4z4 z4z4z4z4"
dc.b "|:K8O3 eeddeedd ezdzK1g4 K8 eeddeedd ezdzK1B4 K8 eeddeedd ezdzK1g4 K8 eeddeedd K1=c3=c3=c2"
dc.b " K8 eeddeedd ezdzK1g4 K8 eeddeedd ezdzK1B4 K8 eeddeedd ezdzK1g4 K8 eeddeedd K1=c3=c3=c2"
dc.b " K1O2 zz=G3=G3=G4z4z2 A3A3d3d3=c2 zz=G3=G3=G4z4z2 A3A3d3d3=c2"
dc.b " zz=G3=G3=G4z4z2 A3A3d3d3=c2 zz=G3=G3=G4z4z2 A3A3d3d3=c2:"
dc.b 0
#endasm
Là, par exemple, c'est une des musiques de Space Dance fait par Sampo
Voilà, ça, c'était pour la partie déclarative du programme, donc à insérer là ou tu déclares tes sprites, tes variables globales...
Ensuite, il faut initialiser le tout et lancer la musique. Si tu veux que ça démarre dès le début, pas de soucis, tu mets ce code dans ta procédure main() :
InstallIRQ(2,VBL); // va installer l'interruption 2 qui appelera la sous-routine VBL()
EnableIRQ(2); // déclare l'interruption 2 comme active
silence(); // fait le silence pour s'assurer que le système sonore est nickel
abcmusic(0,abcmusic0); // joue la musique abcmusique0 sur la voie 0
abcmusic(1,abcmusic1);
abcmusic(2,abcmusic2);
abcmusic(3,abcmusic3);
Le principe de ABCMusic, c'est qu'il faut rafraichir le système soi-même (en gros, lire les notes les unes après les autres et les jouer), donc une fois ta musique démarrée, si tu ne fais un update_music() fréquemment, tu auras juste un son continu de la première note. C'est pourquoi on a installer l'interruption 2 qui débranche sur une sous-routine VBL.
Pour celà, tu auras bien pris soin de mettre quelque part dans ton source le petit bout de code suivant :
VBL() interrupt
{
update_music();
}
Comme ça, à chaque interruption, ABC se réactualise et joue la musique...
Voilà, c'est tout.
En fait, le plus dur (*), c'est de composer sa musique, de la transcrire en notation anglaise, de trouver les paramètres d'instruments adéquats pour que ça sonne bien.
Pour le dernier point, je crois que Cooper et Damdam avaient fait un super boulot, pour le second, ce n'est pas forcément si complexe, pour le premier, ça demande un peu de talent

(*) en fait, le plus dur pour de vrai, c'est découter le tout sous Handy #beurk#
GT, tu peux relire
