|
||||||||||||||||||||||||||||||||||||||||||||
|
Dans cet article, je vais parler des outils disponibles dans CanDo pour manipuler les fichiers icônes et lire les fichiers musicaux. J'ai écrit un programme nommé YeOldeSongPlayer qui utilise ces outils. Il permet de sélectionner des fichiers musicaux (Sound/Noise/ProTracker, Oktalizer et MED) et de les placer dans une liste. Les fichiers musicaux peuvent être lus, et la liste des fichiers peut être sauvegardée et chargée. Ce programme fonctionne sur le Workbench. Son interface est illustrée à la figure 1. Une impression du programme est présentée dans le listing 1. ![]() Figure 1 - Interface pour YeOleSongPlayer L'interface de YeOldeSongPlayer consiste en une carte nommée "SongPlayer" contenant un objet de type boîte à liste nommé "SongList", un objet de type minuterie nommé "WaitForSongEnd" et cinq boutons de texte nommés Select, Load, Save, Play et Next. La boîte de liste est utilisée pour afficher la liste des fichiers musicaux sélectionnés. Lorsqu'un fichier musical est sélectionné dans la zone de liste, il commence à être lu. Le bouton "Select" est utilisé pour afficher la requête standard de fichiers Amiga (partie d'asl.library). Plusieurs fichiers peuvent être sélectionnés en maintenant la touche "Shift" enfoncée tout en cliquant sur les noms de fichiers. En cliquant sur le bouton "OK" dans la requête, les noms de fichiers sélectionnés sont insérés dans la boîte de liste SongList. Le bouton "Save" permet de sauvegarder la liste actuelle des fichiers musicaux sur le disque. Le nom du fichier est obtenu par le biais de la requête de fichiers. YeOldeSongPlayer est inhabituel en ce sens que la liste est sauvegardée en tant que partie d'un fichier d'icône utilisant les types d'outils des fichiers icônes. Seul un fichier d'icône est enregistré. Par exemple, la liste peut être enregistrée dans un fichier icône nommé "MySongList.info". Il n'y aura pas de fichier "MySongList" associé, comme c'est le cas normalement. Bien sûr, cela peut être déroutant pour certains utilisateurs et n'est pas recommandé. Cependant, je l'utilise ici pour illustrer les puissants outils disponibles dans CanDo pour la manipulation des fichiers icônes. L'outil par défaut pour les fichiers icônes est défini comme SYS:YeOldeSongPlayer. N'oubliez pas que lors de la conception d'un programme dans CanDo, le fichier deck sur le disque est un fichier projet CanDo. Pour convertir ce fichier de projet en fichier d'outil, il faut utiliser l'utilitaire TheBinder ou TheMultiBinder, inclus dans CanDo, pour convertir le fichier de projet en programme autonome, ou en fichier d'outil. Ce programme lié doit se trouver dans le répertoire principal du disque système pour que l'outil par défaut des fichiers icônes soit correct. Il est également possible de modifier l'outil par défaut dans le deck YeOldeSongPlayer. Puisque les fichiers icônes de liste de musique ont un outil par défaut, ils peuvent être double-cliqués pour lancer YeOldeSongPlayer qui insérera la liste de fichiers de musique associée au fichier icône dans la boîte de liste. Il est également possible de sélectionner simultanément plusieurs fichiers icônes de liste de musique en maintenant la touche "Shift" enfoncée tout en sélectionnant les icônes. En double-cliquant sur la dernière icône sélectionnée ou en double-cliquant sur l'icône de l'outil YeOldeSongPlayer après avoir sélectionné la dernière icône, YeOldeSongPlayer sera exécuté. Chaque liste de fichiers musicaux de toutes les icônes sélectionnées sera ajoutée à son tour à la boîte de liste. Cela permet de regrouper les noms de fichiers musicaux selon certains critères et de les combiner facilement par la suite. Le bouton "Load" est utilisé pour charger une liste de fichiers musicaux enregistrée avec le bouton "Save". Une requête de fichiers est utilisée pour obtenir le nom du fichier. Seuls les fichiers dont l'extension est ".info" sont affichés, car toutes les listes sont enregistrées sous forme de fichiers icônes. Le bouton "Play" lance la lecture du premier fichier musical de la liste. L'objet temporisateur "WaitForSongEnd" vérifie toutes les secondes si la musique est toujours en cours de lecture. Lorsque la musique se termine, la musique suivante de la liste commence. Ce processus se poursuit jusqu'à ce que la dernière musique de la liste soit terminée. À ce stade, la lecture s'arrête. Elle peut être relancée en appuyant à nouveau sur "Play" ou en sélectionnant un fichier dans la zone de liste. Le bouton "Next" arrête la lecture du fichier musical en cours et commence la lecture du fichier suivant dans la liste. C'est pratique si vous avez inclus dans la liste une musique que vous détestez. Examinons maintenant les scripts CanDo plus en détail. Le script BeforeAttachment Ce script s'exécute lorsque la carte SongPlayer est activée pour la première fois. Il initialise d'abord certaines variables qui seront utilisées plus tard dans le programme, puis définit le répertoire par défaut à SYS: à l'aide de la commande SetCurrentDirectory. Une icône est créée à l'aide de la commande "MakeIcon". Elle comporte quatre paramètres : le nom du tampon mémoire, le type d'icône (Outil ou Projet), le nom du fichier image ou du tampon mémoire de l'icône, le nom du fichier image ou du tampon mémoire de remplacement. L'icône créée est nommée "SongPlayer" (notez que c'est le même nom que la carte) et est une icône de projet. La première image est définie dans un fichier brosse nommé "SongPlayer1", et l'autre image est définie dans un fichier brosse nommé "SongPlayer2". Les deux brosses ont été créées dans Deluxe Paint. Elles sont illustrées à la figure 2. SongPlayer1 sera l'image de l'icône affichée sur l'écran du Workbench lorsqu'elle est désélectionnée. SongPlayer2 est l'icône qui apparaît lorsqu'elle est sélectionnée (voir figure 1). L'outil par défaut de l'icône SongPlayer est défini comme SYS:YeOldeSongPlayer à l'aide de la commande "SetDefaultTool". ![]() Figure 2 - Brosses utiliséespour l'icône de SongPlayer Bien qu'elle ne soit pas utilisée dans YeOldeSongPlayer, si vous avez besoin de savoir si un deck CanDo a été lancé à partir du Workbench ou du CLI, la variable système "StartedFromWorkbench" peut être testée. Si elle est égale à "TRUE" (VRAI), le programme a été lancé depuis le Workbench, sinon il a été lancé depuis le CLI. Si un programme est lancé à partir du CLI, la chaîne de la ligne de commande sera renvoyée dans une variable système appelée "TheCommandLine". Après avoir inséré les noms de fichiers icônes dans le document FileList, le curseur est déplacé vers le haut du document. Chaque fichier icône, à son tour, est chargé dans un tampon mémoire nommé "Temp" à l'aide de la commande "LoadIcon". La liste des types d'outils du fichier icône, qui contient les noms des fichiers musicaux (voir le bouton "Save" ci-dessous), est insérée dans le document "Songs" à l'aide de la commande "InsertToolTypeList". Ainsi, si plusieurs noms de fichiers musicaux ont été regroupés et sauvegardés dans des fichiers icônes séparés, les groupes peuvent être combinés très facilement en sélectionnant tous les fichiers d'icônes avant d'exécuter YeOldeSongPlayer. Alternativement, le programme peut être exécuté à partir du CLI avec plusieurs paramètres comme suit :
Cela a le même effet que de sélectionner les icônes Songs1, Songs2 et Songs3 sur le Workbench en utilisant la touche "Shift", puis de double-cliquer sur l'icône YeOldeSongPlayer. Pour fermer le script BeforeAttachment, le document de travail actuel est défini sur Songs car c'est le seul document qui sera utilisé dans le reste du programme. Le bouton Select Ce bouton est utilisé pour sélectionner plusieurs fichiers musicaux à ajouter à la zone de liste. Lorsqu'il est pressé, son script OnRelease exécute plusieurs commandes. Tout d'abord, la commande "SetFileRequestMode" est utilisée pour définir le mode de sélection multiple et pour spécifier que les fichiers icônes doivent être rejetés. Ensuite, la commande "SetFileRequestPattern" est utilisée pour définir un motif de "#?" ou tous les fichiers. Cette information est utilisée par la fonction "AskForFileName". Lorsque la requête de fichiers standard apparaît, elle affiche tous les fichiers sans icône et permet de sélectionner plusieurs fichiers en appuyant sur la touche "Shift" (voir figure 3). Le répertoire et le nom de fichier actuels sont transmis à la requête via la variable "File". Lorsque le bouton "Select" est pressé pour la première fois, File est égal à NULL (défini dans BeforeAttachment). Par conséquent, le répertoire par défaut SYS: (également défini dans BeforeAttachment) sera utilisé. ![]() Figure 3 - Requête de fichiers avec plusieurs fichiers sélectionnés Les boutons "Load" et "Save" Ces boutons sont utilisés pour charger et sauvegarder une liste de fichiers musicaux. Leurs scripts OnRelease sont très similaires. Dans chacun d'eux, les modes de requête de fichiers appropriés sont définis, et le modèle de fichier est défini sur "#?.info". Ainsi, la requête de fichiers n'affiche que les fichiers icônes. "REGULARMODE" fait apparaître la liste des fichiers dans la requête de façon normale ; "SAVEFILEMODE" fait apparaître la liste de façon inverse, donnant à l'utilisateur un retour visuel qu'un fichier est sur le point d'être sauvegardé plutôt que chargé. La variable "SongsFile" est utilisée comme chemin d'accès et nom de fichier actuel pour la requête. Lorsque le bouton "Laod" ou "Save" est pressé pour la première fois, cette variable sera égale à NULL (définie dans BeforeAttachment). Par conséquent, le répertoire par défaut SYS: (également défini dans BeforeAttachment) sera utilisé. Le nom de fichier sélectionné est affecté à la variable "NewSongsFile" si le bouton "OK" est pressé, un NULL est affecté à NewSongsFile si le bouton "Cancel" est pressé. Si NewSongsFile n'est pas égal à NULL, sa valeur est vérifiée pour voir si le nom de fichier qu'il contient a une extension ".info". Plusieurs fonctions de chaîne de caractères sont utilisées pour cette détermination : NumberOfChars, FindChars et LowerCase. Dans le cas du bouton "Load", si le fichier sélectionné est effectivement un fichier icône (avec une extension ".info"), plusieurs choses se produisent. La musique en cours de lecture est mise en pause, la variable "PlayFlag" prend la valeur "FALSE" (FAUX), l'extension ".info" est supprimée du nom de fichier dans NewSongsFile (à l'aide de la fonction chaîne GetChars) et le résultat est affecté à la variable SongsFile, le fichier icône est chargé dans le tampon temporaire (la commande LoadIcon ajoute automatiquement ".info" au nom de fichier), le document Songs est effacé et les types d'outils de l'icône dans le tampon temporaire sont insérés dans le document. Pour que tout cela fonctionne correctement, le fichier icône sélectionné doit avoir été enregistré à l'aide du bouton "Save". Sinon, une liste erronée ou aucune liste n'apparaîtra dans la zone de liste. Dans le cas du bouton "Save", si le nom du fichier sélectionné a une extension ".info", celle-ci est supprimée car la commande "SaveIcon", comme LoadIcon, ajoute automatiquement cette extension. La commande "SetToolTypeList" déplace le texte du document Songs vers la liste des types d'outils de l'icône SongPlayer (créée dans BeforeAttachment). Enfin, la commande "SaveIcon" enregistre l'icône du lecteur de musiques avec le nom de fichier sélectionné (variable SongsFile). Les boutons Play et Next, la boîte de liste SongList et le temporisateur WaitForSongEnd ourrait être utilisé pour tout type de collection vidéo. Ces quatre objets sont très similaires dans la mesure où ils dépendent tous de la routine globale PlayNextSong. Lorsque vous appuyez sur le bouton "Play", le curseur est déplacé vers le haut du document Songs et PlayNextSong est exécuté. Lorsque vous appuyez sur le bouton "Next", le curseur est déplacé vers la ligne suivante dans le document Songs et PlayNextSong est exécuté. Lorsque l'utilisateur clique dans la zone de liste SongList, le curseur se déplace automatiquement sur la ligne sélectionnée. Par conséquent, il est seulement nécessaire d'exécuter PlayNextSong. L'objet "WaitForSongEnd" est un minuteur d'intervalle qui, lorsqu'il est actif, exécute son script Occurred toutes les secondes. Ce script vérifie la valeur actuelle de la variable système "CurrentSongName". Cette variable est égale à NULL si aucun fichier musical n'est en cours de lecture, sinon elle sera égale au nom du fichier musical en cours de lecture. Lorsque CurrentSongName vaut NULL, ce qui signifie qu'aucune musique chanson n'est en cours de lecture, et que PlayFlag vaut "TRUE" (VRAI), ce qui signifie qu'une musique est en cours de lecture, le curseur est déplacé d'une ligne vers le bas dans le document Songs et PlayNextSong est exécuté. Ce n'est pas un très bon moyen de déterminer si une musique a cessé de jouer. Malheureusement, il n'existe pas de commande permettant de tester directement la fin de la lecture d'une musique. Une personne de l'assistance technique d'INOVAtronics a déclaré qu'elle prévoyait d'ajouter cette fonctionnalité dans une prochaine version. La routine globale PlayNextSong Cette routine vérifie d'abord si le temporisateur WaitForSongEnd est actuellement actif, ou attaché. Ceci est fait avec la fonction ObjectAttached. S'il est actuellement attaché, il est détaché. Ensuite, la musique en cours de lecture est mise en pause. La fonction "FileType" est utilisée pour déterminer si le fichier représenté par la ligne actuelle dans le document Songs est de type "Music". Si ce n'est pas le cas, le curseur est déplacé vers le bas d'une ligne et le fichier suivant est vérifié. Lorsqu'un fichier de type Music est trouvé, il est lu à l'aide de la commande "PlaySong", PlayFlag prend la valeur "TRUE" (VRAI) et un délai de cinq secondes s'écoule avant de rattacher l'objet temporisateur WaitForSongEnd. Ce délai permet de charger le fichier musical avant de réactiver la minuterie. Cinq secondes devraient être suffisamment longues pour que des fichiers musicaux assez volumineux soient chargés à partir d'un disque dur. Toutefois, ce délai peut devoir être allongé lors du chargement de gros fichiers musicaux à partir d'un lecteur de disquettes. Enfin, lorsque la fin du document Songs est atteinte (TheLine égale NULL), PlayFlag est mis à "FALSE" (FAUX). La période de réflexion Nous y sommes depuis un bon moment. Il est temps d'entrer dans la période de récupération de cet exercice. Soyez conscient que YeOldeSongPlayer est un programme très basique. De nombreuses améliorations pourraient être apportées, comme vérifier le type de fichier avant de l'ajouter à la liste, permettre de modifier l'ordre et le contenu de la liste, permettre de concaténer des listes à partir du programme, etc. Il existe également des commandes disponibles telles que SetSongVolume et SetSongTempo qui pourraient être utilisées en conjonction avec des boutons supplémentaires pour ajuster le volume et le tempo pendant la lecture d'un morceau.
|