Obligement - L'Amiga au maximum

Vendredi 17 mai 2024 - 11:48  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

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

Articles in english


Réseaux sociaux

Suivez-nous sur X




Liste des 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,
ALL


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


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


Contact

David Brunet

Courriel

 


En pratique : CanDo - Utiliser CanDo en tant qu'interface pour Deluxe Music
(Article écrit par Randy Finch et extrait du Randy Finch's Web Site - février 1995)


A partir de la version 2.0 d'AmigaOS, une nouvelle fonctionnalité connue sous le nom de "écrans publics" a été ajoutée. Cette fonctionnalité permet à n'importe quel programme de déclarer son écran privé comme un écran public sur lequel d'autres programmes peuvent créer des fenêtres. Beaucoup de programmes récents pour Amiga, y compris Deluxe Music 2.0 (figure 1), enregistrent leurs écrans comme publics avec le système d'exploitation, permettant ainsi à d'autres programmes d'ouvrir des fenêtres sur eux. Bien sûr, la possibilité d'ouvrir une fenêtre sur l'écran d'un autre programme n'est pas très utile, à moins qu'il n'existe un moyen pour les programmes de communiquer entre eux. C'est là qu'intervient ARexx. C'est le moyen standard pour les programmes de communiquer sur Amiga. Dans cet article, je vais parler d'un programme CanDo 2.51 que j'ai écrit et qui s'appelle RandomNotes. Il utilise la capacité de CanDo à ouvrir des fenêtres sur des écrans publics et ses capacités de communication ARexx. Le programme RandomNotes est présenté dans le listing 1.

CanDo
Figure 1 : L'interface de Deluxe Music

Caractéristiques de RandomNotes

RandomNotes ouvre une fenêtre sur l'écran de Deluxe Music (figure 2) et envoie ensuite des commandes ARexx à Deluxe Music pour créer un air aléatoire basé sur les entrées de l'utilisateur. Cette entrée comprend la sélection d'une armure ("key signature"), d'une signature rythmique ("time signature"), du nombre de mesures dans la musique et de quelques paramètres qui limitent le caractère aléatoire des notes. Lorsque vous appuyez sur le bouton "Generate" (Générer), la mélodie est créée. La musique peut être jouée en appuyant sur le bouton "Play" (Lecture) et arrêtée en appuyant sur le bouton "Stop" (Arrêt). L'armure a une valeur initiale de Do-Majeur et est affichée dans le bouton rollo dans le coin supérieur gauche de la fenêtre de RandomNotes. La clé peut être modifiée en appuyant sur le bouton "rollo". Chaque fois que vous appuyez sur ce bouton, la tonalité change. Il y a 30 armures possibles reconnues par Deluxe Music.

CanDo
Figure 2 : L'interface de Deluxe Music avec la carte RandomNotes

La signature rythmique a une valeur par défaut de 4/4, ce qui signifie qu'il y a quatre temps par mesure (chiffre du haut), une noire recevant un temps (chiffre du bas). Si elle était modifiée en 3/8, il y aurait trois temps par mesure et une croche recevrait un temps. Les battements par mesure et la note recevant un battement peuvent être modifiés en appuyant sur les boutons fléchés appropriés à droite de l'affichage de la signature rythmique. Le nombre supérieur peut varier de 1 à 16 par pas de 1 tandis que le nombre inférieur peut varier de 1 à 64 par multiples de 2 (par exemple 1, 2, 4, 8...).

Le nombre de mesures a une valeur par défaut de quatre mais peut être modifié en cliquant sur le champ de saisie des nombres entiers et en tapant une nouvelle valeur. Cette valeur contrôle le nombre total de mesures dans la musique aléatoire.

Les deux paramètres qui limitent le caractère aléatoire des notes de la musique sont la variation maximale de la durée de la note et la variation maximale de la note. Le premier paramètre contrôle le degré de variation de la durée de la note par rapport à la valeur du temps de base dans la signature rythmique (le chiffre du bas) et a une valeur par défaut de 1. Le second contrôle la variation maximale de la hauteur de la note d'une note à l'autre et a une valeur par défaut de deux. Chacune de ces valeurs peut être modifiée en saisissant un nouveau chiffre dans le champ approprié.

Lorsque vous appuyez sur le bouton "Generate" (Générer), RandomNotes envoie à Deluxe Music les commandes ARexx appropriées pour effacer la musique courante, définir l'armure et la signature rythmique, et insérer les notes générées de façon aléatoire. Une fois la musique générée, elle peut être jouée en appuyant sur le bouton "Play" (Lecture) et arrêtée en appuyant sur le bouton "Stop" (Arrêt).

La carte DMCard

Le deck RandomNotes est composé d'une seule carte nommée "DMCard". Comme indiqué dans la section de définition de la fenêtre de la carte (listing 1), elle s'ouvre sur l'écran public de Deluxe Music (figure 2). Le nom de l'écran public peut être sélectionné dans la requête de l'éditeur de fenêtre (figure 3). Lorsque vous appuyez sur le bouton situé à droite de la case à cocher "Public Screen" (Écran Public), une liste des écrans publics disponibles s'affiche. Bien entendu, Deluxe Music doit être chargé pour que son écran apparaisse dans la liste.

CanDo
Figure 3 : Requête de l'éditeur de fenêtres dans CanDo 2.51

La carte DMCard comporte un script BeforeAttachment et un script AfterAttachment. Le script BeforeAttachment tente d'abord de communiquer avec le port ARexx DMUSIC. Si une erreur se produit, cela signifie que Deluxe Music n'est pas en cours d'exécution. Le script tente ensuite d'exécuter Deluxe Music et continue à chercher le port ARexx DMUSIC. S'il ne le trouve pas, RandomNotes affiche un message et sort. Si le port est trouvé, le script fait une pause de cinq secondes pour laisser le temps à l'écran de Deluxe Music de se mettre en place et d'être enregistré comme public auprès du système d'exploitation. Si RandomNotes attache sa carte avant que l'écran de Deluxe Music soit configuré, il s'ouvrira à la place sur l'écran du Workbench. Le délai de cinq secondes peut devoir être augmenté sur les systèmes plus lents.

Une fois la connexion ARexx établie, une commande ARexx de Deluxe Music, GETATTR, est envoyée à Deluxe Music. Cette commande indique à Deluxe Music que certaines informations sont nécessaires, dans ce cas la largeur de la fenêtre du document (celle avec la partition musicale). Deluxe Music renvoie ensuite les informations demandées à RandomNotes. CanDo enregistre les valeurs de retour d'une commande ARexx dans la variable système MessageReturned. Cette valeur est utilisée dans le cadre d'une autre commande ARexx, SIZEWINDOW. Ici, on demande à Deluxe Music de redimensionner la hauteur de sa fenêtre actuelle (la fenêtre du document ou de la partition) à 280. La largeur reste la même puisque la largeur actuelle obtenue par la commande GETATTR est renvoyée dans la commande SIZEWINDOW. Après le redimensionnement de la fenêtre, il y aura de l'espace en bas de l'écran pour la fenêtre RandomNotes. On peut voir la différence en comparant les figures 1 et 2. Enfin, les 30 éléments du tableau KeyText sont définis. Le texte utilisé pour les éléments du tableau est le même que celui nécessaire dans les commandes ARexx de Deluxe Music, comme vous le verrez plus tard.

Le script AfterAttachment écrit toutes les étiquettes nécessaires sur la carte. Il charge ensuite une brosse nommée "MusicStaff.br" dans un tampon mémoire nommé ClippedBrush. Cette brosse est utilisée par la routine "ShowTime" pour afficher la signature rythmique. Ensuite, les valeurs initiales de la signature rythmique sont attribuées et affichées. Enfin, l'index initial de l'armure est défini et son texte est affiché.

Le bouton de l'armure

Ce bouton est un bouton de zone doté d'une bordure rollo, qui indique qu'une pression sur le bouton modifiera le texte de sélection qu'il contient. Le texte initial du bouton est Do-Majeur, qui est la valeur de KeyText[1]. Chaque fois que le bouton est pressé, son script OnRelease s'exécute. Ce script incrémente simplement la valeur de KeyTextIndex de 1 et exécute la routine globale ShowKey. Un opérateur modulo est utilisé pour s'assurer que la valeur de KeyTextIndex ne dépasse jamais 30, qui est le nombre d'éléments du tableau. La routine ShowKey efface le texte du bouton de défilement et le remplace par le texte de l'élément actuel du tableau KeyText.

Les boutons de la signature rythmique

La signature rythmique est composée de deux nombres : les temps par mesure (en haut) et la note qui reçoit un temps (en bas). Il y a une paire de boutons fléchés gauche et droite à droite de chaque nombre pour ajuster chacun indépendamment. Les boutons permettant de régler le nombre de battements par mesure sont appelés "BeatsLeft" (Battements gauches) et "BeatsRight" (Battements droits). Les boutons permettant de régler la note qui recevra un battement sont appelés "NoteBeatLeft" et "NoteBeatRight". Chaque bouton possède un script d'événement OnClick. L'algorithme de chacun de ces scripts sera exécuté lorsque l'utilisateur cliquera sur les boutons respectifs et continuera à s'exécuter jusqu'à ce que le bouton de la souris soit relâché. Les boutons "BeatsLeft" et "BeatsRight" se contentent de décrémenter et d'incrémenter d'une unité a valeur actuelle de "Beats" (Battements), qui est le chiffre le plus élevé de la signature rythmique, en veillant à ce que sa valeur ne descende jamais en dessous de 1 ou ne dépasse pas 16. Les boutons "NoteBeatLeft" et "NoteBeatRight" décrémentent et incrémentent simplement par des multiples de deux la valeur actuelle de "NoteBeat", qui est le nombre inférieur de la signature rythmique, en veillant à ce que sa valeur ne soit jamais inférieure à 1 ou supérieure à 64.

Le script de chacun des quatre boutons de signature rythmique exécute une routine globale appelée "ShowTime" chaque fois que la variable Beats ou NoteBeat est modifiée. Cette routine réaffiche le pinceau ClippedBrush contenant la petite portée musicale, en écrasant l'affichage actuel. Ensuite, les valeurs de Beats et NoteBeat sont imprimées sur le dessus de la brosse. Un algorithme simple est utilisé pour l'impression de chaque nombre afin qu'il soit centré dans la brosse de la portée musicale, que le nombre ait un ou deux chiffres. Chacun des scripts pour les quatre boutons de signature rythmique comporte également un court délai intégré afin que les chiffres ne changent pas plus vite que le doigt de l'utilisateur ne peut réagir.

Les boutons Generate, Play et Stop

Le script OnRelease du bouton "Generate" (Générer) est un foyer d'activité. Il envoie de nombreux messages à Deluxe Music et contient un grand nombre de formules mathématiques qui génèrent la partition musicale aléatoire. Nous allons le suivre en détail.

Tout d'abord, cinq commandes sont envoyées à Deluxe Music : CLEAR FORCE, LOCKDISPLAY, LOCKGUI, SETKEYSIGNATURE et SETTIMESIGNATURE.
  • La commande CLEAR indique à Deluxe Music d'effacer le document en cours ; l'option FORCE spécifie que l'utilisateur ne doit pas être invité à vérifier cette action.
  • LOCKDISPLAY empêche la fenêtre du document de se mettre à jour chaque fois qu'une nouvelle note est ajoutée à la partition.
  • LOCKGUI empêche l'utilisateur de contrôler directement l'interface de Deluxe Music.
  • Comme vous l'avez probablement deviné, SETKEYSIGNATURE et SETTIMESIGNATURE sont utilisés pour définir l'armure et la signature rythmique de la partition en cours.
Ensuite, le nombre total de battements dans la partition, TotalBeats, est calculé en multipliant le nombre de battements dans une mesure par le nombre de mesures dans la partition. De plus, les limitations spécifiées par l'utilisateur sur la variation de la hauteur d'une note, MNV, et la durée d'une note, MNDV, sont extraites des champs entiers appropriés.

En préparation de la boucle d'insertion de note, trois variables sont initialisées. NumBeats, qui suivra le nombre total de battements dans la partition, est mis à 0. NumBeatsMeasure, qui correspond au nombre total de battements dans chaque mesure, est mise à 0. Enfin, Line, qui correspond à la ligne de la portée musicale où la note suivante sera insérée, est défini à 0. Un numéro de ligne égal à 0 correspond à la ligne centrale de la portée. Les numéros de ligne positifs sont au-dessus de cette ligne et les numéros négatifs sont en dessous de cette ligne.

Il est maintenant temps d'entrer dans la boucle d'insertion de note. Tant que le nombre réel de battements dans la partition est inférieur au nombre total de battements à ajouter à la partition, cette boucle s'exécutera.

La première tâche de la boucle est de déterminer la ligne sur laquelle la note suivante apparaîtra. Pour ce faire, on choisit un entier aléatoire entre -MNV et +MNV et on ajoute cette valeur à "Line" (Ligne). Rappelez-vous que l'utilisateur a spécifié la valeur de MNV et a donc le contrôle sur le nombre de lignes qui peuvent séparer des notes consécutives dans la partition. Une méthode similaire est utilisée pour déterminer la durée de la note suivante. Un nombre entier aléatoire compris entre -MNDV et +MNDV est sélectionné. Ensuite, la valeur de NoteBeat (définie dans la signature rythmique) est multipliée par deux et élevée à la puissance de l'entier aléatoire. La durée sera ainsi augmentée ou diminuée d'un multiple de deux. Une fois le calcul effectué, les fonctions Min et Max sont utilisées pour s'assurer que la nouvelle durée de la note n'est pas inférieure à 1 (une note entière) ou supérieure à 64 (une soixante-quatrième note), soit le minimum et le maximum autorisés par Deluxe Music. Ensuite, la durée de la note actuelle est ajustée, si nécessaire, pour éviter que le nombre de battements dans la mesure actuelle ne dépasse la valeur de Beats, qui a été fixée dans la signature rythmique.

La tâche suivante de la boucle consiste à insérer la note dans la partition de Deluxe Music. Une commande ARexx "INSERTITEM NOTE" est émise avec les informations DURATION et LINE. Ensuite, la commande "NEXT NOTE" indique à Deluxe Music de se préparer à recevoir la note suivante dans la partition.

Après l'insertion de la note, les nombres actuels de battements dans la mesure et dans la partition sont mis à jour. Si la mesure actuelle a été remplie avec le nombre approprié de battements, Deluxe Music reçoit la commande "NEXT MEASURE" afin de préparer une nouvelle mesure pour les notes à venir. Le nombre de battements dans la mesure actuelle, NumBeatsMeasure, est alors remis à 0.

La boucle est ainsi terminée. Comme indiqué, elle continuera à s'exécuter jusqu'à ce que le nombre total de battements de la partition soit atteint. Lorsque la boucle est terminée, cinq autres commandes ARexx sont envoyées à Deluxe Music :
  • UNLOCKGUI permet à l'utilisateur d'interagir directement avec l'interface de Deluxe Music.
  • UNLOCKDISPLAY libère Deluxe Music pour afficher la partition qui a été créée par RandomNotes.
  • WINDOW DOCUMENT ACTIVATE active la fenêtre de la partition.
  • UPDATEDISPLAY provoque l'affichage de la partition.
  • Enfin, POSITION SOF positionne le curseur de Deluxe Music au début de la partition.
Une fois la partition générée, il est temps de l'écouter. En appuyant sur le bouton "Play" (Lecture) de la fenêtre RandomNotes, son script OnRelease s'exécute. Ce script envoie deux commandes à Deluxe Music : WINDOW DOCUMENT ACTIVATE et PLAY. La première commande permet de s'assurer que la fenêtre de la partition est active ; la seconde ordonne à Deluxe Music de jouer la partition. Une fois que la partition a fini de jouer, elle se répète. Pour arrêter la partition, appuyez sur le bouton "Stop" (Arrêt). Une commande STOP sera envoyée à Deluxe Music.

Améliorer les partitions

Puisque RandomNotes ne produit qu'une partition aléatoire limitée par l'utilisateur, la plupart des partitions ne sonneront pas bien. Cependant, comme elles sont si simples à créer, de nombreuses partitions peuvent être créées en peu de temps. Parfois, l'une d'entre elles sonnera assez bien. À ce moment-là, l'utilisateur peut interagir directement avec l'interface de Deluxe Music pour modifier la partition assez bonne et en faire une très bonne, voire une excellente partition, selon les capacités de l'utilisateur. En d'autres termes, RandomNotes doit être considéré comme un générateur d'idées. Il produit une partition qui aide à faire germer une mélodie dans l'esprit du musicien. Le musicien peut ensuite améliorer la partition pour l'adapter à son idée.

Si vous êtes familier avec la théorie musicale, vous pourriez modifier les algorithmes de RandomNotes et créer un programme appelé MozartNotes ou BachNotes, ou même MadonnaNotes. En d'autres termes, le programme pourrait prendre des paramètres définis par l'utilisateur et créer une partition originale qui rappelle les musiques écrites ou interprétées par un artiste musical particulier.


[Retour en haut] / [Retour aux articles]