Puisque je me creuse la tête pour reprendre une procédure très pratique d'un vieux basic, en attendant que la lumière vienne, je vais exposer le problème que j'ai constaté:
Pour cela il faut télécharger le programme "icone à glisière"
lorsque l'on déplace le curseur sur l'icone, il n'y a pas de problème. Arrivant sur père Noël, il fait sa petite musique, et après ça continu normalement dans les 2 sens.
Si par contre, on déplace le curseur par des clics sur les boutons, lors du contact avec le Père Noël, la musique ne va pas jusqu'au bout, et MIDI_OFF n'est pas exécuté
Avec ON_CHANGE il n'y a pas d'instruction qui le bloc comme CLIK_OFF, même en détournant ON_CHANGE sur une adresse sans effet avant MIDI_ON, et rétablissant ON_CHANGE après MIDI_OFF, j'ai rien pus faire. le curseur se déplace sans contrôle.
Lorsque MIDI_OFF n'est pas exécuté, rien ne permet de le savoir. Si on se dit "je vais mettre MIDI_OFF ensuite pour forcer cette l'instruction" , il y a erreur si cela finalement a été fait.
Si l'instruction midi_off na pas été exécuté, au prochain MIDI_ON, il y a erreur parce que MIDI_ON est ouvert.
Pourquoi ces instructions ne sont-elles pas transparentes, et puisse être réécrite sans que cela puissent être un problème.
Il y a toujours la possibilité de mettre MIDI_ON en début de programme, et MIDI_OFF avant de quitter, mais si ces instructions existent, je suppose qu'il y a une raison. La musique, le dessin n'a pas été malheureusement dans mon éducation et j'y connais pas grand chose, mais je pense qu'il y a ici un problème.
De plus je pense qu'il serait bon d'avoir une instruction du genre CHANGE_OFF . Je n'ai pas fait l'essai, mais je pense que MIDI et wait ne doivent pas faire bon ménage avec, puisse comme MIDI_PLAY est une attente comme WAIT.
Maintenant, me rappelant que sur un autre basic, on pouvait avoir le choix entre synchrone qui comme ici bloque l'ordinateur, et async qui joue en continuant le programme.
Tout ce que je viens d'écrire, ne me parait pas très clair. J'espère que vous arriverez à comprendre.
je remets la partie du code qui nous intéresse (celui-ci n'est pas facile à trouver)
- Code:
-
midi_on:restore:for a%=1 to 6: read n%:read d%: midi_play n%,d%*2:next a%:midi_off :' temps /2
data 67,4 , 72,4 , 72,4 , 72,4 , 74,4 , 72,3