Suivez-nous sur X

|
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
ALL
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
A propos d'Obligement
|
|
David Brunet
|
|
|
|
Programmation : Blitz Basic - lecteur de module de musique (2e partie)
(Article écrit par Mathieu Chènebit et extrait d'Amiga News - septembre 1996)
|
|
Ce mois-ci, nous allons améliorer notre source du mois dernier et nous allons donc
obtenir un petit lecteur digne de ce nom.
Si vous avez feuilleté le chapitre R-21 de votre manuel concernant le son, vous avez sans doute constaté que le Blitz Basic
est relativement pauvre du point de vue de la gestion des modules au format Protracker. Mais ne désespérez pas: la solution
existe ! Il s'agit d'une des bibliothèques de commandes additionnelles fournies avec le Blitz Basic 2.1. Nous utiliserons
la xbonesciatracker.library qui comblera tous les manques du Blitz Basic. Tout d'abord, l'instruction "LoadModule" est
remplacée par "LoadTrackerModule".
Jusque-là, rien de bien important sauf que la syntaxe ne sera pas la même (c'est une fonction et non pas une instruction):
"LoadTrackerModule" retournera vrai (-1) si le module a été chargé et faux (0) dans le cas contraire. Cela évitera au système
de planter et vous permettra de bien contrôler les erreurs dans votre programme (NB : le source que vous avez plus bas ne prend
pas du tout en compte les erreurs par manque de place. C'est donc à vous d'ajouter divers tests afin de rendre SmallPlayer
plus utilisable). Notez d'ailleurs que la plupart des commandes de cette bibliothèque sont des fonctions. En regardant le
source, vous allez pouvoir découvrir une flopée de nouvelles fonctions très utiles pour l'écriture de notre petit lecteur.
Je regrette de ne pas avoir la place pour vous expliquer toutes les commandes ; reportez-vous à la documentation fournie
(en anglais, dans le tiroir développeur/userlibsdocs/).
De même, avec une autre bibliothèque externe du Blitz Basic, vous allez pouvoir remplacer les vieilles boîtes de requêtes moches
ASL par des boîtes de requêtes Reqtools tout beaux tout neufs ! Pour cela, vous avez besoin de la reqtools.library installée
dans le répertoire Libs: de votre partition système et de la NeilsReqtoolsLib côté Blitz. Vous pourrez faire très aisément une
boîte de requêtes à bouton ("RTEZRequest") pour mettre dans votre "À propos" ou encore une boîte de requêtes de chargement de
module ("RTEZLoadFile"). Si vous voulez améliorer SmallPlayer, rajoutez par exemple des requêtes au moment de quitter...
A vous de jouer !
Une autre grande nouveauté dans le source de ce mois (décidément) est l'apparition de gadgets. Dans la première version, il
fallait ouvrir un menu pour charger ou jouer quelque chose. Dorénavant, ce n'est plus la peine : en cliquant sur un bouton,
vous aurez les mêmes actions qu'en allant dans le menu. Pour créer des gadgets, dessinez une brosse et chargez-la avec
l'instruction "LoadShape".
Ensuite, utilisez l'instruction "ShapeGadget" qui placera votre shape dans la fenêtre et lui attribuera un numéro d'objet gadget.
Ensuite, les événements relatifs aux gadgets seront analysés avec divers tests grâce à l'instruction "GadgetHit". Pour éviter
de recopier deux fois le code (accès par les menus et par les boutons), on aura recours à une utilisation intensive des "Gosub...
Return".
Enfin, et ce sera tout pour cette fois, nous allons aborder un tout petit peu les gadgets gadtools. Nous allons avoir besoin d'eux
pour un gadget où on lira le volume ("GTNumber" - gadget numérique ne pouvant qu'être lu, l'utilisateur ne peut en aucun cas
le modifier) et un autre où on lira le nom du module ("GTText" - gadget texte ne pouvant qu'être lu). L'utilisation des gadtools
est un peu tordue et surtout très mal documentée : il faut déclarer vos gadgets et seulement ensuite rattacher la GTList à
votre fenêtre préalablement ouverte grâce à la commande "AttachGTList".
Voilà, je pense et j'espère que vous aurez appris pas mal de choses dans cet article. Je suis désolé de ne pas pouvoir m'étendre
mais la place est limitée. On continuera le mois prochain par une étude plus approfondie des gadgets gadtools et des bibliothèques
externes, et peut-être étudierons-nous la locale.library. Si vous avez des suggestions, envoyez-moi des courriers électroniques
ou écrivez au journal qui transmettra.
WBStartup:NoCli
Bouton$="DH1:Data/Blitz/Boutons/" ; remplacez ce chemin par celui dans lequel vous "stockez" vos boutons
Propos$="SmallPlayer version 1.0"+Chr$(10) ; Chr$(10) équivaut à un retour chariot
Propos$+"Copyrights 1996 Amiga News"
vol=64
MenuTitle 0,0,"Projet"
MenuItem 0,0,0,0,"charger"
MenuItem 0,0,0,1,"Jouer"
MenuItem 0,0,0,2,"Stop !"
MenuItem 0,0,0,3,"À propos..."
MenuItem 0,0,0,4,"Quitter"
LoadShape 1,Bouton$+"ButtonCharge"; remplacez les noms par ceux de vos boutons
ShapeGadget 0,1,1,0,1,1
LoadShape 2,Bouton$+"ButtonPlay" ; et adaptez les coordonnées à la taille de vos boutons
ShapeGadget 0,55,1,0,2,2
LoadShape 3,Bouton$+"ButtonStop" ; NB: mes boutons font 18 pixels de large
ShapeGadget 0,20,1,0,3,3
LoadShape 4,Bouton$+"Buttonrwd"
ShapeGadget 0,37,1,0,4,4
LoadShape 5,Bouton$+"Buttonfwd"
ShapeGadget 0,91,1,0,5,5
LoadShape 6,Bouton$+"Buttonpause"
ShapeGadget 0,73,1,0,6,6
LoadShape 7,Bouton$+"buttonVolUp"
ShapeGadget 0,109,1,0,7,7
LoadShape 8,Bouton$+"buttonVolDown"
ShapeGadget 0,152,1,0,8,8
LoadShape 9,Bouton$+"buttonpropos"
ShapeGadget 0,171,1,0,9,9
FindScreen 0
Window 0,50,50,199,43,$2+$4+$8+$400+$1000,"SmallPlayer",1,2,0
SetMenu 0
GTNumber 0,0,122,-10,25,13,"",0,vol ; on initialise nos GTGadgets
GTText 0,1,-2,4,186,13,"",0,mus$
AttachGTList 0,0 ; on rattache la GTList à la fenêtre
Repeat
ev.l=WaitEvent ; type long obligatoire
If ev=$100
If MenuHit=0 AND ItemHit=0
Gosub Charger ; on renvoie aux étiquettes plus bas
EndIf
If MenuHit=0 AND ItemHit=1
Gosub Jouer
EndIf
If MenuHit=0 AND ItemHit=2
Gosub Arreter
EndIf
If MenuHit=0 AND ItemHit=3
Gosub Propos
EndIf
If MenuHit=0 AND ItemHit=4
ev=$200
EndIf
EndIf
If ev=$20
If GadgetHit=1
Gosub Charger
EndIf
If GadgetHit=2
Gosub Jouer
EndIf
If GadgetHit=3
Gosub Arreter
EndIf
If GadgetHit=4
Gosub Arriere
EndIf
If GadgetHit=5
Gosub Avant
EndIf
If GadgetHit=6
Gosub Pause
EndIf
If GadgetHit=7
Gosub VolumeHaut
EndIf
If GadgetHit=8
Gosub VolumeBas
EndIf
If GadgetHit=9
Gosub Propos
EndIf
EndIf
Until ev=$200
StopTracker
FreeTrackerModule 0
Free Window 0
End
.Charger
nom$=RTEZLoadFile("Charger un module",chemin$) ; le nouveau requester reqtools
If nom$<>""
succes=LoadTrackerModule(0,nom$) ; la nouvelle commande pour les modules
mus$=GetModuleName$(0)
GTSetString 0,1,mus$ ; on initialise le gadget GTText
EndIf
Return
.Jouer
If succes=-1
succes2=StartTracker(0)
EndIf
Return
.Arreter
StopTracker
FreeTrackerModule 0
GTSetString 0,1,""
Return
.Propos
succes3=RTEZRequest("À propos",Propos$,"_Okay!!",2,0,4)
Return
.Arriere
position_rwd=GetModulePosition
ModulePositionJump(position_rwd-2)
Return
.Avant
position_fwd=GetModulePosition
ModulePositionJump(position_fwd+1)
Return
.Pause
PauseModule
Return
.VolumeHaut
vol+1
If vol>=64 Then vol=64 ; le volume d'un module va de 0 à 64
TrackerVolume vol
GTSetInteger 0,0,vol
Return
.VolumeBas
vol-1
If vol<=0 Then vol=0 ; idem
TrackerVolume vol
GTSetInteger 0,0,vol
Return
|
|