Précédent   Forum des professionnels en informatique > Java > Général Java > Langage
Langage Forum d'entraide sur le langage Java et autres langages pour la JVM : syntaxe, POO, conventions, API standard. Avant de poster -> FAQ Java
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/01/2012, 16h56   #1
Invité de passage
 
Homme Steven Miranda
Étudiant
Inscription : mars 2011
Messages : 12
Détails du profil
Informations personnelles :
Nom : Homme Steven Miranda
Âge : 21
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mars 2011
Messages : 12
Points : 2
Points : 2
Envoyer un message via MSN à StevenLaCigale
Par défaut Un Audioclip bien capricieux

Bonjour/Bonsoir,

Je développe actuellement un RPG en Java à partir de zéro. Voulant l'agrémenter de quelques musiques, j'ai crée une classe qui charge à l'appel de son constructeur tous les sons à jouer, puis utilise par la suite une fonction play(String s) qui jouera le son désigné par son nom (play ou loop selon le son voulu) ainsi qu'une fonction stop(String s) qui stoppera le son.

J'utilise donc play() et stop() relativement souvent : en entrant en combat, en me soignant à la taverne, en gagnant un combat, en montant de niveau etc..., mais à un moment donné, lorsque que la musique devrait être changée, plus rien. L'audioclip précédemment joué est bien stoppé, mais celui qui devrait être joué ne l'est plus.

Est ce que ma façon de gérer les Audioclip (les avoir chargés au lancement de mon programme, puis les arrêter/jouer quand je veux) est mauvaise ?

Le code de ma classe Sound :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
 
package sounds;
 
import java.applet.Applet;
import java.applet.AudioClip;
import java.net.MalformedURLException;
import java.net.URL;
 
public class Sound
{
    private AudioClip balade;
    private AudioClip battle;
    private AudioClip intro;
    private AudioClip town;
    private AudioClip change;
    private AudioClip defeat;
    private AudioClip inn;
    private AudioClip victory;
    private AudioClip validate;
    private AudioClip levelup;
    private long depart;
    private long time;
    private long time2;
 
    public Sound()
    {
        try
        {
            depart = time = System.currentTimeMillis();
            intro = Applet.newAudioClip(new URL("file:sound/music/intro.mid"));
            time2 = System.currentTimeMillis();
            System.out.println((new StringBuilder("intro : ")).append(time2 - time).append("ms").toString());
            time = System.currentTimeMillis();
            town = Applet.newAudioClip(new URL("file:sound/music/town.mid"));
            time2 = System.currentTimeMillis();
            System.out.println((new StringBuilder("town : ")).append(time2 - time).append("ms").toString());
            time = System.currentTimeMillis();
            balade = Applet.newAudioClip(new URL("file:sound/music/balade.mid"));
            time2 = System.currentTimeMillis();
            System.out.println((new StringBuilder("balade : ")).append(time2 - time).append("ms").toString());
            time = System.currentTimeMillis();
            battle = Applet.newAudioClip(new URL("file:sound/music/battle.mid"));
            time2 = System.currentTimeMillis();
            System.out.println((new StringBuilder("battle : ")).append(time2 - time).append("ms").toString());
            time = System.currentTimeMillis();
            change = Applet.newAudioClip(new URL("file:sound/sounds/cursor.wav"));
            time2 = System.currentTimeMillis();
            System.out.println((new StringBuilder("cursor : ")).append(time2 - time).append("ms").toString());
            time = System.currentTimeMillis();
            defeat = Applet.newAudioClip(new URL("file:sound/sounds/defeat.mid"));
            time2 = System.currentTimeMillis();
            System.out.println((new StringBuilder("defeat : ")).append(time2 - time).append("ms").toString());
            time = System.currentTimeMillis();
            inn = Applet.newAudioClip(new URL("file:sound/sounds/inn.mid"));
            time2 = System.currentTimeMillis();
            System.out.println((new StringBuilder("inn : ")).append(time2 - time).append("ms").toString());
            time = System.currentTimeMillis();
            levelup = Applet.newAudioClip(new URL("file:sound/sounds/levelup.mid"));
            time2 = System.currentTimeMillis();
            System.out.println((new StringBuilder("levelup : ")).append(time2 - time).append("ms").toString());
            time = System.currentTimeMillis();
            validate = Applet.newAudioClip(new URL("file:sound/sounds/validate.wav"));
            time2 = System.currentTimeMillis();
            System.out.println((new StringBuilder("validate : ")).append(time2 - time).append("ms").toString());
            time = System.currentTimeMillis();
            victory = Applet.newAudioClip(new URL("file:sound/sounds/victory.mid"));
            time2 = System.currentTimeMillis();
            System.out.println((new StringBuilder("victory : ")).append(time2 - time).append("ms").toString());
            System.out.println((new StringBuilder("\n\nTotal : ")).append(time2 - depart).append("ms").toString());
        }
        catch(MalformedURLException exception)
        {
            exception.printStackTrace();
        }
    }
 
    public void play(String s) {
    	System.out.println("Playing "+s+"...");
        if(s.equals("intro"))
            intro.loop();
        else
        if(s.equals("town"))
            town.loop();
        else
        if(s.equals("balade"))
            balade.loop();
        else
        if(s.equals("battle"))
            battle.loop();
        else
        if(s.equals("change"))
            change.play();
        else
        if(s.equals("defeat"))
            defeat.play();
        else
        if(s.equals("inn"))
            inn.play();
        else
        if(s.equals("levelup"))
            levelup.play();
        else
        if(s.equals("validate"))
            validate.play();
        else
        if(s.equals("victory"))
            victory.play();
    }
 
    public void stop(String s) {
    	System.out.println("Stopping "+s+"...");
        if(s.equals("intro"))
            intro.stop();
        else
        if(s.equals("town"))
            town.stop();
        else
        if(s.equals("balade"))
            balade.stop();
        else
        if(s.equals("battle"))
            battle.stop();
        else
        if(s.equals("change"))
            change.stop();
        else
        if(s.equals("defeat"))
            defeat.stop();
        else
        if(s.equals("inn"))
            inn.stop();
        else
        if(s.equals("levelup"))
            levelup.stop();
        else
        if(s.equals("validate"))
            validate.stop();
        else
        if(s.equals("victory"))
            victory.stop();
    }
}
Un exemple d'utilisation dans une autre classe :

Code :
1
2
3
 
    sound.stop("intro");
    sound.play("town");

Merci d'avance de prêter attention à mon problème, qui me mène la vie dure.
StevenLaCigale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 07h11   #2
Modérateur
 
Avatar de tchize_
 
Homme
Responsable de service informatique
Inscription : avril 2007
Messages : 16 198
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : Belgique

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Service public

Informations forums :
Inscription : avril 2007
Messages : 16 198
Points : 25 344
Points : 25 344
Envoyer un message via MSN à tchize_ Envoyer un message via Skype™ à tchize_
Est-ce que tous les appels ont bien lieu à partir d'un seul Thread?
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et
"Votre génitrice tute des pédoncules au pandémonium" (le conjurateur, 1973)
tchize_ est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 12h47   #3
Invité de passage
 
Homme Steven Miranda
Étudiant
Inscription : mars 2011
Messages : 12
Détails du profil
Informations personnelles :
Nom : Homme Steven Miranda
Âge : 21
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mars 2011
Messages : 12
Points : 2
Points : 2
Envoyer un message via MSN à StevenLaCigale
Ta question en soulève d'autres dans mon esprit. En fait, au niveau graphique, j'ai une classe Fenetre qui, avec plusieurs fonctions, fait un setContentPane(l) puis un setVisible(true) pour "switcher" entre toutes mes classes graphiques héritées de JPanel et qui ont toutes leur méthode paint(Graphics g) propre. Du coup, quelques appels aux sons (pas tous) sont faits depuis des objets qui sont amenés à être "construits" plusieurs fois, mais à chaque fois que cela est fait, on passe en paramètre du constructeur l'objet Sound qui a initialisé tous les sons (je ne sais pas si je suis très clair).

En fait, je réussis à lancer une bonne 20aine de combats, à aller à la taverne plusieurs fois, à modifier mes équipements, à acheter/vendre des objets et ça fonctionne. Et quand ça ne fonctionne pas, tout s'arrête, du simple son joué une fois aux musiques jouées en boucle, à une exception près : le son joué quand on monte de niveau, qui n'avait jamais été joué jusque là.

ça me donne l'impression qu'à partir d'un moment, les AudioClip ont été "trop joués" et qu'ils font grève sans raison.
StevenLaCigale est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h53.


 
 
 
 
Partenaires

Hébergement Web