|
Voici un petit travail que j'ai effectué et que nous allons décortiquer ensemble. L'objectif, ici, sera de créer les éléments de bases qui permettent de faire un lecteur audio avec toutes les fonctionnalités que l'on rencontre généralement sur une platine. --------------------------------------------------------- --------------------------------------------------------- Avant tout, que doit on avoir sur notre platine pour qu'elle réponde aux exigences de l'utilisateur ? On doit pouvoir mettre en lecture, metre en pause, régler le volume, passer au morceau suivant, retourner sur le morceau précédent, choisir le morceau que l'on désire écouter dans une tracklist. --------------------------------------------------------- Pour cela, il est important de connaitre les notions de bases en lingo pour manipuler le son. Les pistes sons : De
même que les autres média, Pour pouvoir lire un son, il est
important de l'utiliser sur une piste. Ces pistes peuvent être visualisées
dans la fenêtre de scénario, juste au dessus de la ligne
de script. L'avantage des pistes : L'avantage du principe des pistes, c'est que, de même, que pour les autres média sur votre scène, vous pouvez très bien superposer des sons pour enrichir votre ambiance sonore. Par exemple, une piste pourrait servir d'ambiance générale avec une musique en fond, et les autres pistes, elles, serviront de pistes d'effets (voix, bruitages divers...). On a dit deux pistes... On en a pas plus ? J'ai dis vos autres pistes alors que vous pouvez constater, sur votre scénario qu'il n'y a que deux pistes son. En effet, avec l'utilisation du scénario, vous avez accès à deux pistes seulement. Par contre, si vous gérez votre son par le biais du langage Lingo, vous pouvez manipuler jusqu'à 8 pistes simultanément. Vous en conviendrez, ca devient tout de suite plus intéressant, et les perspectives offertes deviennent bien plus avantageuses ;-) . Comment utiliser une piste en Lingo ? Pour
l'utilisation des pistes en lingo, c'est très simple. sprite(numSprite)
sound(NumPiste) sound correspond à la commande siginifiant la piste, et ensuite vous choisissez votre piste en 1 et 8. Celle que vous choisirez sera affiliée pour l'instruction qui suivra. Par exemple la mise en lecture... Mais quelles sont les commandes pour la manipulation du son ? Elles sont nombreuses et pour ce tut, nous allons nous pencher sur les 4 principales. Play()
: Cette commande permet de lancer la lecture du son sur une piste
son choisie. Cette commande peut être utilisée avec différentes
propriétés qui offrent des possibilités de manipulations
très interessantes. Mais je ne m'étendrais pas dessus dans
ce tutorial. J'y reviendrais plus profondément une prochaine fois
;-) IMPORTANT : J'en arrive à une toute petite subtilité qui ne devrez pas poser de problème si l'on comprend bien la distinction des termes : On
appelle la piste 5. Mais l'acteur, lui, comme les autres média,
est un acteur. Pour l'appeler, il est important d'utiliser le mot clé
member afin que Director puisse faire le tri dans tout
ça. Cela signifie quoi ? Que dans la plupart des cas, la syntaxe
restera semblable : stop()
: cette commande permet de couper la lecture d'un son sur une
piste choisie pause()
: Cette
commande interrompt la lecture du son courant dans la piste audio choisie.
Une prochaine commande play() entraînera la reprise de la lecture.
A présent,
nous connaissons les bases pour lancer un son, le couper et le remettre
en route. Mais un lecteur ne se borne pas à un seul morceau génaralement.
Il est important de pouvoir passer à une autre track, voire de
choisir dans une liste. Ce code doit être placé dans un script d'animation (movie script) afin de fonctionner à tout moment de l'animation. __________________________________________________ on startmovie gListe
sera notre liste dans laquelle nous déterminons nos divers sons
présents dans notre distribution. Avec l'instruction suivante : Oui mais euuuuuuuuuh... Si j'ai 200 sons je dois tous les mettre dans ma liste ? C'est pas un peu long tout de même ??? Hum...
Oui... C'est un peu long en effet. C'est pour cela qu'il est intéressant
dans ce cas là, d'utiliser une petite routine qui va rescencer
les acteurs sons qui se trouvent dans votre distribution et les placer
automatiquement (autrement dit, comme un grand ;-) ) dans la liste Pour ce faire, un petit code dans le même script d'animation va vous épargner bien des peines. Je supposerais, au préalable, que vous avez créé une distribution particulière, où vous avez rangé tous vos sons. :-) (on va dire que la distribution s'appelle "son". Comment ca je ne fais pas dans l'originalité ???) __________________________________________________ clearglobals() : à l'entrée de notre animation, toutes nos globales sont purgées pour éviter des bugs dûs aux fait que nos variables contiendraient des valeurs précédemment mises en mémoire gListe=
[ ] : On déclare notre liste qui pour l'instant,
grâce à "[]" est vide if (member(i, "son").type <> #sound) then next repeat : De même, il se pourrait très bien que l'acteur à la position "i" ne soit pas un acteur son. Sur le coup cela ne poserait pas de bug, mais par contre, lorsque l'acteur sera activé, Director va essayer de le lire comme un son. Un bug va alors se produire... if voidP(member(i, "son")) then next repeat : Il se peut tout à fait que dans votre distribution, une des position, dans la castlib soit vide. Sans cette ligne de code, Director essaierait don d'ajouter un acteur qui n'existe pas dans la liste et provoquerait donc une erreur. gListe.append(member(i, "son")) : On ajoute à la fin de notre liste gListe les acteurs se trouvant en position "i" dans la distribution "son". cela signifie que successivement, chacun des sons de notre distribution, en commençant par celui qui se trouve en première position, vont se faufiler dans notre liste ;-)
Pour
cela, nous allons créer un petit script pour notre bouton lecture.
Comme nous avons pu le constater, il suffit de mettre une simple ligne
du type : sound(1).play(member("son1")).
Mais cette simple inscription va poser un probleme. On ne pourra pas passer
à la chanson suivante lorsque "son1" sera terminé.
Qui plus est nous perdrons l'intérêt de notre liste. Donc
il faut procéder autrement. Dans le script qui sera affilié au bouton de lecture : ____________________________________________________ Ici,
nous déclarons une nouvelle variable, la variable sound(1).play(gListe[gListe_position])
: On lance la lecture du morceau se trouvant à
la position Dans
notre exitframe global gListe, gListe_position,glance on exitFrame me end if
gListe_position< gListe.count() then Maintenant, votre son sera lancé lors du clic sur le bouton lecture, mais en plus de cela, les chansons vont se succéder jusqu'à ce que la liste soit épuisée. Mais si je veux passer à la chanson suivante ? Très simple, les bases du code sont déjà mises en place :-). Il va suffire de placer le script suivant sur le bouton correspondant : _____________________________________________________ global gListe, gListe_position,
glance _____________________________________________________ Dans
ce script on vérifie que la lecture est en route avec notre variable
gLance _____________________________________________________ Maintenant, vous pouvez zapper les morceaux qui ne vous conviennent pas. :-) Super ! J'ai tout compris. Mais bon... Si je suis à la chanson 10 et que je veux la 89 ème... Bien évidemment, on ne peut pas se permettre de laisser l'utilisateur perdre l'usage de son doigt à force de cliquer sur sa souris frénétiquement.Il faut donc trouver le moyen de faire une saisie dans notre liste. Pour cela, on va commencer par déterminer les caractères autorisés, ou plutot ceux qui ne doivent pas être utisisés. Créez
un script de comportement que vous poserez sur un acteur "texte"
vide.
____________________________________________________ sprite
(me.spritenum).editable = true
: On rend le sprite editable par l'utilisateur On crée ensuite une variable locale "valeurTemporaire" dans laquelle nous allons mémoriser la saisie de l'utilisateur. Elle va servir de comparatif, en fait, avec ce qui ne doit pas être saisi (caracères facteurs de buggs donc... et oui, si l'on demande le morceau numero "3c" au lieu de 30 par exemple, Director va essayer pourtant de le trouver. La code va alors déraillé...) pcaracteresAutorises = "1234567890" : Nous créons une property qui rescence les seuls caractères qui peuvent être saisis. Maintenant nous avons nos deux éléments de comparaisons... if
pcaracteresAutorises contains valeurTemporaire then Si dans notre acteur texte, certains caractères ne sont pas présents dans la liste de "pcaractèresAutorises", un message d'avertissement apparait alors et coupe le son après avoir réinitialiser le tout.
____________________________________________________ global gListe, gListe_position,
glance on mouseup me Dans
la première condition if valeurTemporaire > gListe.count() then : Si la valeur choisie est plus importante que le nombre de morceaux dans la liste, alors un message apparait et le son est coupé. if valeurTemporaire <= gListe.count() and valeurTemporaire > 0 then : si valeurTemporaire est inférieure au nombre de la liste et est supérieure à 0 alors gListe-position va prendre la valeur de notre variable temporaire(par exemple 25) et déclenché la musique en position ayant la valeur de notre variable valeurTemporaire(le morceau 25 se déclenche alors...) A présent, nous pouvons choisir le morceau que l'on veux dans une saisie...
Nous en resterons là pour l'instant avec ce tutorial. Il serait aisé de créer un bouton de volume par exemple grâce au comportement très efficace proposé par Macromédia dans la bibliothèque de script. De même pour l'affichage du titre de la chanson, il suffit de poser un acteur texte qui prend dynamiquement le nom de notre acteur son. Il serait possible aussi de faire en sorte que l'utilisateur puisse naviguer sur son ordinateur et choisir lui même les morceaux qu'il désire. Pour cela des Xtras comme FileXtra4 ou Buddy API seront nécessaires... Vous
l'aurez compris, cet exercice offre maintenant des perspectives de plus
en plus nombreuses. Nous avons ici la structure de base. Bonne journée, Ecrit par Steve Louis
|
||
Contact : Steve Louis |