Aide java: programmation d'une boite a rythme, sequenceur
Répondre à la discussion
Affichage des résultats 1 à 2 sur 2

Aide java: programmation d'une boite a rythme, sequenceur



  1. #1
    invite2e9996ac

    Aide java: programmation d'une boite a rythme, sequenceur


    ------

    Bonjour,
    mon problème est le suivant: j'ai créé ce petit programme java simulant une boite rythme simple, il fonctionne mais il ne ballait qu'une seule fois les 16 temps avant de s'arrêter.
    Au debug, le programme semble tourner en boucle sur "public void meta" (fin de la sequence), mais l'instruction sequenceur.start(); ne fonctionne pas..

    Help !!

    Code:
       1. import java.awt.*;
       2. import javax.swing.*;
       3. import javax.sound.midi.*;
       4. import java.util.*;
       5. import java.awt.event.*;
       6.
       7. public class BeatBox_v1 implements MetaEventListener
       8. {
       9.     JPanel panneauPrincipal;
      10.     ArrayList listeCases;
      11.     int tpm = 100;
      12.     Sequencer sequenceur;
      13.     Sequence sequence;
      14.     Track piste;
      15.     JFrame leCadre;
      16.
      17.
      18.     String[] nomsinstru={"grosse caisse","charleston","caisse claire","tome"};
      19.     int[] instru ={35,46,38,50};
      20.
      21.     public static void main (String[] args)
      22.     {
      23.         new BeatBox_v1().construireIHM();
      24.     }
      25.
      26.     public void construireIHM()
      27.     {
      28.         leCadre = new JFrame("boîte à rythme" );
      29.         BorderLayout agencement = new BorderLayout();
      30.         JPanel arrierePlan = new JPanel (agencement);
      31.         arrierePlan.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
      32.
      33.         listeCases = new ArrayList();
      34.         Box boiteBoutons = new Box(BoxLayout.Y_AXIS);
      35.
      36.
      37.         JButton start = new JButton("Start" );
      38.         start.addActionListener(new EcouteStart());
      39.         boiteBoutons.add(start);
      40.
      41.         JButton stop = new JButton("Stop" );
      42.         stop.addActionListener(new EcouteStop());
      43.         boiteBoutons.add(stop);
      44.
      45.         JButton plusVite = new JButton("Accélérer" );
      46.         plusVite.addActionListener(new EcoutePlusVite());
      47.         boiteBoutons.add(plusVite);
      48.
      49.         JButton moinsVite = new JButton("Ralentir" );
      50.         moinsVite.addActionListener(new EcouteMoinsVite());
      51.         boiteBoutons.add(moinsVite);
      52.
      53.         Box boiteNoms = new Box(BoxLayout.Y_AXIS);
      54.         for(int i = 0; i<4; i++)
      55.         {boiteNoms.add(new Label (nomsinstru[i]));}
      56.
      57.         arrierePlan.add(BorderLayout.EAST, boiteBoutons);
      58.         arrierePlan.add(BorderLayout.WEST, boiteNoms);
      59.
      60.         leCadre.getContentPane().add(arrierePlan);
      61.
      62.         GridLayout grille = new GridLayout(4,16);
      63.         grille.setVgap(1);
      64.         grille.setHgap(2);
      65.         panneauPrincipal = new JPanel(grille);
      66.         arrierePlan.add(BorderLayout.CENTER, panneauPrincipal);
      67.
      68.         for(int i = 0; i<64; i++)
      69.         {
      70.             JCheckBox c = new JCheckBox();
      71.             c.setSelected(false);
      72.             listeCases.add(c);
      73.             panneauPrincipal.add(c);
      74.         }
      75.
      76.         installerMidi();
      77.
      78.         leCadre.setBounds(250,150,300,300);//là ou le cadre s'affiche sur l'écran
      79.         leCadre.pack();
      80.         leCadre.setVisible(true);
      81.     }
      82.     // fin de la methode
      83.
      84.
      85.
      86.
      87.
      88.
      89.     public void installerMidi()
      90.     {
      91.         try    {
      92.             sequenceur = MidiSystem.getSequencer();
      93.             sequenceur.open();           
      94.             sequenceur.addMetaEventListener(this);
      95.             sequence = new Sequence(Sequence.PPQ,4);
      96.             piste = sequence.createTrack();
      97.             sequenceur.setTempoInBPM(tpm);
      98.         }
      99.
     100.         catch(Exception e)
     101.         {e.printStackTrace();}
     102.     }
     103.     // fin de la methode
     104.
     105.
     106.
     107.     public void construirePisteEtDemarrer()
     108.     {
     109.         int[] listePistes = null;
     110.
     111.         sequence.deleteTrack(piste);
     112.         piste = sequence.createTrack();
     113.
     114.         for (int i = 0; i<4; i++)
     115.         {
     116.             listePistes = new int[16];
     117.             int touche = instru[i];
     118.
     119.             for (int j = 0; j<16; j++)
     120.             {
     121.                 JCheckBox jc = (JCheckBox) listeCases.get(j + (16*i));
     122.                 if (jc.isSelected())
     123.                 {listePistes[j] = touche;}
     124.                 else
     125.                 {listePistes[j] = 0;}
     126.             }
     127.             //fin de la boucle interne
     128.
     129.             creerPistes(listePistes);
     130.         }
     131.         //fin de la boucle externe
     132.
     133.
     134.         piste.add(makeEvent(192,9,1,0,16));
     135.
     136.
     137.         try {
     138.
     139.             sequenceur.setSequence(sequence);
     140.             sequenceur.start();
     141.             sequenceur.setTempoInBPM(tpm);
     142.             }
     143.
     144.
     145.             catch(Exception e)
     146.             {e.printStackTrace();}
     147.
     148.     }
     149.
     150.     //fin de la methode construirePisteEtDemarrer methode            
     151.
     152.
     153.
     154.
     155.     public class EcouteStart implements ActionListener
     156.     {
     157.         public void actionPerformed (ActionEvent a)
     158.         {
     159.             construirePisteEtDemarrer();
     160.         }
     161.     }
     162.     //fin de la classe interne
     163.
     164.     public class EcouteStop implements ActionListener
     165.     {
     166.         public void actionPerformed(ActionEvent a)
     167.         {sequenceur.stop();}
     168.     }
     169.
     170.
     171.     public class EcoutePlusVite implements ActionListener
     172.     {
     173.         public void actionPerformed (ActionEvent a)
     174.         {tpm +=3;}
     175.     }
     176.     //fin de la classe interne
     177.
     178.
     179.     public class EcouteMoinsVite implements ActionListener
     180.     {
     181.         public void actionPerformed (ActionEvent a)
     182.         {tpm -=3;}
     183.     }
     184.     //fin de la classe interne
     185.
     186.     public void creerPistes (int[] liste)
     187.     {
     188.         for (int i = 0; i<16; i++)
     189.         {
     190.             int touche = liste[i];
     191.             if (touche != 0)
     192.             {
     193.                 piste.add(makeEvent(144,9,touche,100,i));
     194.                 piste.add(makeEvent(128,9,touche,100,i+1));
     195.             }
     196.         }
     197.     }
     198.
     199.     public MidiEvent makeEvent(int comd, int chan, int un, int deux, int tick)
     200.     {
     201.         MidiEvent event = null;
     202.
     203.         try
     204.         {
     205.             ShortMessage a = new ShortMessage();
     206.             a.setMessage(comd,chan,un,deux);
     207.             event = new MidiEvent(a,tick);
     208.         }
     209.
     210.         catch (Exception e)
     211.         {
     212.             e.printStackTrace();
     213.         }
     214.         return event;
     215.     }
     216.
     217.     public void meta(MetaMessage message )
     218.     {
     219.
     220.         if (message.getType() == 47)
     221.         {
     222.             sequenceur.start();
     223.             sequenceur.setTempoInBPM(tpm);
     224.         }
     225.     }
     226. }//fin de la classe interne

    -----

  2. #2
    Stan_94

    Re : Aide java: programmation d'une boite a rythme, sequenceur

    Bonjour,
    je n'ai pas le temps de parcourir en détail ton code, mais il ne semble pas y avoir de boucle pour répéter le déclenchement de ta boite à rythme... L'idéal serait d'implémenter une boucle while avec un paramètre de sortie mis à jour à l'appui d'un bouton stop (= au déclenchement d'un évenement mouseclicked pour ledit bouton).

Discussions similaires

  1. Réponses: 6
    Dernier message: 26/05/2007, 14h05
  2. Boite a rythme sampleur (ISD1420?)
    Par invited0f38389 dans le forum Électronique
    Réponses: 7
    Dernier message: 17/04/2007, 19h36
  3. Ma boite a rythme
    Par SPH dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 17/09/2006, 23h52
  4. Java Programmation
    Par livre dans le forum Logiciel - Software - Open Source
    Réponses: 9
    Dernier message: 27/01/2006, 21h58
  5. Programmation en Java
    Par invited2e9dd9d dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 14/04/2005, 18h37
Découvrez nos comparatifs produits sur l'informatique et les technologies.