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

  FORUM HardWare.fr
  Programmation
  Java

  aide java: programmation d'une boite a rythme

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

aide java: programmation d'une boite a rythme

n°1932422
pm901
Posté le 16-10-2009 à 12:42:52  profilanswer
 

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

mood
Publicité
Posté le 16-10-2009 à 12:42:52  profilanswer
 


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

  aide java: programmation d'une boite a rythme

 

Sujets relatifs
demande d'Aide sur VB6: Chemin par default dans DirListBoxaide outil de traduction google
Script VB pour ré-installation d'imprimantes [aide svp]Programmation python
1er Programme JAVAAide pour faire site
Renseignements pour programmation database sur sharepointProgrammation script shell ksh unix
aide script PHP/SQLITE[Javascript] Aide pour adapter un script - [Résolu]
Plus de sujets relatifs à : aide java: programmation d'une boite a rythme


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