IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Une lecture de fichier midi qui consomme trop de mémoire


Sujet :

Java

  1. #1
    Membre actif Avatar de padodanle51
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 389
    Points : 230
    Points
    230
    Par défaut Une lecture de fichier midi qui consomme trop de mémoire
    Bonjour,
    Voilà je dois réaliser un piano virtuel et à chaque fois que j'appuie sur une touche, je lis un fichier midi (correspondant à la note)
    Problème: A chaque fois que je lis, je créai un nouvel objet qui d'après moi devrai être détruit quand je sors de la fonction. Pourtant la mémoire prise par mon prog ne fait que augmenter!
    Merci de bien vouloir m'aider

  2. #2
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Tu peux poster la portion qui t'embêtes?

  3. #3
    Membre actif Avatar de padodanle51
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 389
    Points : 230
    Points
    230
    Par défaut
    Bien sur. Donc voilà la portion qui pose prob:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    switch (arg0.getKeyChar()) 
    {
    	case 'a':
    		lectureMidi pm = new lectureMidi("do.mid");
    		pm.start();
    		break;
    	case 'z':
    		lectureMidi pm1 = new lectureMidi("re.mid");
    		pm1.start();
    		break;
    }
    System.gc();

  4. #4
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    C'est plutôt le code de la classe LectureMidi qu'il va falloir là
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  5. #5
    Membre actif Avatar de padodanle51
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 389
    Points : 230
    Points
    230
    Par défaut
    En effet, désolé. Donc voilà le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Thread cadenceur;
        Sequence fichierSon;
        Sequencer lecteur;
        String cheminFichier;
     
        public lectureMidi(String son) 
        {       
            this.cheminFichier = son;
         }
     
       public void run() 
        {
            try 
            {
                File file = new File(this.cheminFichier);
                this.fichierSon = MidiSystem.getSequence(file);
                this.lecteur = MidiSystem.getSequencer();
                this.lecteur.open();
                this.lecteur.setSequence(fichierSon);
                this.lecteur.start();
                while (this.lecteur.isRunning()) 
                {
                    try
                    {
                        Thread.sleep(10000);
     
                    } catch (InterruptedException e) { }
                }
                this.lecteur.stop();
                this.lecteur.close();	
            } 
            catch (Exception e) 
            {}
        }

  6. #6
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Ca me parait un peu long, attendre 10s. Imaginons un virtuose qui joue 20 notes en 5 secondes, tu auras 20*2 = 40 threads qui tournent au bout de 10s. Un peu énorme pour ce que c'est.

    Sinon, je ne vois pas à quoi sert Thread cadenceur; ni la déclaration de ta classe lectureMidi.
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  7. #7
    Membre actif Avatar de padodanle51
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 389
    Points : 230
    Points
    230
    Par défaut
    En effet le Thread.Sleep était trop long, c'est ce qui faisait que ça ramé. Concernant la place en mémoire, en fait au fur et a mesure, les thread se fermaient, mais les Sequencer restaient en mémoire. La solution:
    utiliser un seul Sequencer que je passe à paramètre à mes Threads.
    Merci pour votre aide
    Bon Week-end

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. creer un XMLNode sans une lecture de fichier XML
    Par bruman dans le forum Flash
    Réponses: 1
    Dernier message: 06/01/2009, 13h37
  2. Besoin d'optimiser une lecture de fichier
    Par BakaOnigiri dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 19/02/2008, 10h12
  3. Lecture de fichier Midi
    Par Chris Redfield dans le forum C++
    Réponses: 4
    Dernier message: 25/08/2006, 11h40
  4. Réponses: 11
    Dernier message: 27/04/2006, 08h56
  5. [VB.NET] Une lecture de fichier difficile...
    Par Abalalojik dans le forum ASP.NET
    Réponses: 29
    Dernier message: 07/01/2005, 14h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo