Obligement - L'Amiga au maximum

Mercredi 20 septembre 2017 - 07:45  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Hit Parade
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

 · Actualité (récente)
 · Actualité (archive)
 · Comparatifs
 · Dossiers
 · Entrevues
 · Matériel (tests)
 · Matériel (bidouilles)
 · Points de vue
 · En pratique
 · Programmation
 · Reportages
 · Tests de jeux
 · Tests de logiciels
 · Tests de compilations
 · Articles divers

 · Articles in english
 · Articles in other languages


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Moteurs de recherche
 · Pages de liens
 · Constructeurs matériels
 · Matériel
 · Autres sites de matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Développeurs logiciels
 · Logiciels
 · Développeurs de jeux
 · Jeux
 · Autres sites de jeux
 · Scène démo
 · Divers
 · Informatique générale


Jeux Amiga

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


Trucs et astuces

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


Glossaire

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


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


Contact

David Brunet

Courriel

 


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 "A 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,"A 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("A 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


[Retour en haut] / [Retour aux articles]