Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
542 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  lecture midi et controle du volume

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

lecture midi et controle du volume

n°686879
souliane
Posté le 29-03-2004 à 22:19:50  profilanswer
 

Bonjour,
 
Je réalise un petit jeu en java et je voudrais lui faire jouer un midi en fond sonore. Jusque là tout va bien, j'ai suivi ce qui est écrit dans
 
http://javaalmanac.com/egs/javax.sound.midi/Load.html.
 
Probleme : j'aimerai pouvoir modifier le volume sonore, car ca hurle. Toujours sur le meme site :
 
http://javaalmanac.com/egs/javax.s [...] olume.html
 
Mais là ca ne marche pas. D'apres leur exemple, j'ai mis gain à 0, 1, 0.5 et je ne percois aucune difference de volume sonore... M'y suis-je mal pris, ou bien y'a t'il autre chose à faire ?
 
Voici mon bout de code pour lire le fichier :
 
 
try {
  Sequence sequence = MidiSystem.getSequence(new File("midi/dn3d.mid" ));
  Sequencer sequencer = MidiSystem.getSequencer();
  sequencer.open();
  sequencer.setSequence(sequence);
  sequencer.start();
} catch (Exception e) {}
 
//    ok !
 
 
 
 
et celui censé modifier le volume :
 
  if (sequencer instanceof Synthesizer) {
    Synthesizer synthesizer = (Synthesizer)sequencer;
    MidiChannel[] channels = synthesizer.getChannels();
    double gain = 0.1D;
    for (int i=0; i<channels.length; i++)
      channels[i].controlChange(7, (int)(gain * 127.0));
  }
 
 
Je l'ai mis à l'intérieur du try, et j'ai essayé un peu partout, avant open, avant setSequence, avant Start... ca ne fait rien.

mood
Publicité
Posté le 29-03-2004 à 22:19:50  profilanswer
 

n°686906
pascal_
Posté le 29-03-2004 à 22:48:22  profilanswer
 

il rentre dans ton if au moins ?

n°687671
souliane
Posté le 30-03-2004 à 18:00:05  profilanswer
 

Je comprend pas trop ta question, c'est pas tres claire... Tu voulais savoir si le if rentrait dans le try ?

n°688283
minimoke
beep beep
Posté le 31-03-2004 à 12:26:54  profilanswer
 

Hein c quoi ce bordel explique un peu.
tu programme toujour comme un porc.

n°1117838
dmalik
Posté le 13-06-2005 à 09:07:44  profilanswer
 

j'ai le meme pb que toi
Je pense que c'est dû à java 1.5 qui diiférencie le sequencer et le synthesizer.
Je cherche...
As-tu trouvé quelque chose ?

n°1118205
souliane
Posté le 13-06-2005 à 12:33:50  profilanswer
 

Euhh y'a un an je crois que java 1.5 n'était même pas encore sorti :)
 
Si oui en tout cas je bossais avec 1.4.2. Je n'ai pas réussi à régler le problème, désolé :(

n°1123656
dmalik
Posté le 17-06-2005 à 20:40:46  profilanswer
 

J'ai trouvé la solution ! Dans la documentation deAndrew Davison :
http://fivedots.coe.psu.ac.th/~ad/jg/ch05/ch5.pdf
 
et dans son FadeMidi.java ( code source )
http://fivedots.coe.psu.ac.th/~ad/jg/ch05/index.html
private void initSequencer()
  /* Set up the MIDI sequencer, the sequencer's meta-event
     listener, and its synthesizer. */
  {
    try {
      sequencer = obtainSequencer();
 
      if (sequencer == null) {
        System.out.println("Cannot get a sequencer" );
        System.exit(0);
      }
 
      sequencer.open();
      sequencer.addMetaEventListener(this);
 
      // maybe the sequencer is not the same as the synthesizer
      // so link sequencer --> synth (this is required in J2SE 1.5)
      if (!(sequencer instanceof Synthesizer)) {
        System.out.println("Linking the MIDI sequencer and synthesizer" );
        synthesizer = MidiSystem.getSynthesizer();
        synthesizer.open();  // new
        Receiver synthReceiver = synthesizer.getReceiver();
        Transmitter seqTransmitter = sequencer.getTransmitter();
        seqTransmitter.setReceiver(synthReceiver);
      }
      else
        synthesizer = (Synthesizer) sequencer;
    }
    catch (MidiUnavailableException e){
      System.out.println("No sequencer available" );
      System.exit(0);
    }
  } // end of initSequencer()
 
 
 private Sequencer obtainSequencer()
  /* This method handles a bug in J2SE 1.5.0 which retrieves
     the sequencer with getSequencer() but does not allow
     its volume to be changed. */
  {
    // return MidiSystem.getSequencer();
    // okay in J2SE 1.4.2, but not in J2SE 1.5.0
 
    MidiDevice.Info[] mdi = MidiSystem.getMidiDeviceInfo();
    int seqPosn = -1;
    for(int i=0; i < mdi.length; i++) {
      System.out.println(mdi[i].getName());
      // if (mdi[i].getName().contains("Sequencer" )) {
      if (mdi[i].getName().indexOf("Sequencer" ) != -1) {
        seqPosn = i;    // found the Sequencer
        System.out.println("  Found Sequencer" );
      }
    }
 
    try {
      if (seqPosn != -1)
        return (Sequencer) MidiSystem.getMidiDevice( mdi[seqPosn] );
      else
        return null;
    }
    catch(MidiUnavailableException e)
    { return null; }
  }  // end of obtainSequencer()
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  lecture midi et controle du volume

 

Sujets relatifs
Lecture du clavier non bloquantpb de lecture dansun fichier
lecture de fichier un peu complexeProblème de lecture de fichier avec java
CONTROLE DE SAISIEPetit problème étrange sur lecture de fichier
[C#/XML]Lecture de fichier XML à l'aide d'un XML schema ?Gestionnaire de signaux + contrôle des fils
C++ + PHP + MYSQL « Upload MP3 et lecture dans playlistbesoin d'aide: lecture de fichier
Plus de sujets relatifs à : lecture midi et controle du volume


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR