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