aide java: programmation d'une boite a rythme

aide java: programmation d'une boite a rythme - Java - Programmation

Marsh Posté le 16-10-2009 à 12:42:52    

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

Reply

Marsh Posté le 16-10-2009 à 12:42:52   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed