pm901 | 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
|
|