import java.applet.*; import java.lang.Boolean; import java.util.*; import java.util.StringTokenizer; import java.lang.String; import java.awt.*; import javax.swing.*; import javax.swing.event.*; import java.awt.event.*; import javax.sound.midi.*; import javax.sound.midi.MidiSystem; import javax.sound.midi.Sequencer; import javax.sound.midi.Soundbank; import java.io.*; import java.net.MalformedURLException; import java.net.URL; public class MidiChor08 extends JApplet implements ActionListener,ItemListener,/*AdjustmentListener,*/ChangeListener { Font font = new Font("Helvetica",0,12); Font fontTitre = new Font("Helvetica",1,16); Font fontSign = new Font("Helvetica",0,10); Font f; FlowLayout fl = null; //pas de protocole JComboBox choixFichierMidi; JButton joue; JButton arret; JButton pause; JButton charger; JButton max; JButton min; JLabel tempoVal; JLabel tempoAff; JSliderGradue scr3,scr3VolSop,scr3VolAlt,scr3VolTen,scr3VolBas,scr3VolX,scr3VolY; GridBagLayout containerGridBag; Container panel; Sequencer player; Sequence seqChant; int sel=4,nbst,volSop=50,volAlt=50,volTen=50,volBas=50,volX=50,volY=50; int tempo=60; String tampon,toto,tata,volS,soundBankString; StringTokenizer st1; StringTokenizer st2; String[] midiFile = new String[20]; String[] debutFich= new String[20]; String[] finFich = new String[20]; String[] termFich = new String[20]; URL url; URL urlBank; File fichier,bank; float mpq; Synthesizer synthesizer; MidiChannel channels[]; public static final int VOLUME_CONTROLLER=7; Color couleurFond = new Color(224,189,158); Color couleur2 = new Color(255,204,51); boolean visible[] = new boolean[5] ; int nombreCanal,compteur; JLabel vols,vola,volt,volb,volx,voly,s,a,t,b,x,y,tempoNum; Soundbank soundbank=null; Receiver receiver; ShortMessage volMsg; public void init() { setBackground(couleurFond); compteur=0; //chargeBank(); for (int i = 1; i < 7; i++) { String inFile = getParameter("file" + i);// penser a messagettre obligatoirement en 1 les 4 voix, en 2 la voix en entiere , puis mesure if (inFile != null) { compteur=compteur+1; midiFile[i-1] = inFile; StringTokenizer st1 = new StringTokenizer(midiFile[i-1], ".");//renvoie le nomFich du fichierer sans l'extension mid tampon=st1.nextToken(); StringTokenizer st2 = new StringTokenizer(tampon, "/");// debutFich[i-1] = st2.nextToken().trim();//.trimm() enlve less blancs finFich[i-1] = st2.nextToken(); termFich[i-1]=st2.nextToken(); } } containerGridBag = new GridBagLayout (); panel = getContentPane(); // Creation d'un GridBagLayout GridBagConstraints constraints = new GridBagConstraints (); panel.setLayout (containerGridBag); panel.setBackground(couleurFond); // Creation des composants et ajout au container JLabel titre = new JLabel("Ecouter un Fichier MIDI"); titre.setFont(fontTitre); constraints.gridx=0; constraints.gridy=0; constraints.gridwidth =9; constraints.insets = new Insets (0, 0, 0, 0); constraints.anchor = GridBagConstraints.CENTER; constraints.fill = GridBagConstraints.RELATIVE; containerGridBag.setConstraints (titre, constraints); JLabel niveauMax = new JLabel("tous les niveaux au maximum : "); setFont(font); constraints.gridx=5; constraints.gridy=1; constraints.gridwidth=4; constraints.anchor = GridBagConstraints.EAST; constraints.insets = new Insets (0, 0, 0, 0); containerGridBag.setConstraints (niveauMax, constraints); max = new JButton("Max"); max.addActionListener(this); constraints.insets = new Insets (0, 0, 0, 0); constraints.gridx=9; constraints.gridy=1; constraints.gridwidth=1; constraints.anchor = GridBagConstraints.WEST; panel.add (max); containerGridBag.setConstraints (max, constraints); JLabel choisir = new JLabel("Choisissez : "); panel.add(choisir); constraints.gridx=0; constraints.gridy=2; constraints.gridwidth=2; constraints.insets = new Insets (4, 2, 2, 2); containerGridBag.setConstraints (choisir, constraints); constraints.gridwidth=1; constraints.gridy=2; JLabel s = new JLabel("S"); panel.add(s); s.setBackground(Color.green); constraints.weightx=0.1; constraints.gridx=4; constraints.gridy=2; constraints.gridwidth=1; constraints.insets = new Insets (2, 5, 5, 2); containerGridBag.setConstraints (s, constraints); JLabel a = new JLabel("A"); panel.add(a); constraints.weightx=0.1; constraints.gridx=5; constraints.gridy=2; constraints.insets = new Insets (2, 5, 5, 2); containerGridBag.setConstraints (a, constraints); JLabel t = new JLabel("T"); panel.add(t); constraints.weightx=0.1; constraints.gridx=6; constraints.gridy=2; constraints.insets = new Insets (2, 5, 5, 2); containerGridBag.setConstraints (t, constraints); JLabel b = new JLabel("B"); panel.add(b); constraints.weightx=0.1; constraints.gridx=7; constraints.gridy=2; constraints.insets = new Insets (2, 5, 5, 2); containerGridBag.setConstraints (b, constraints); JLabel x = new JLabel("X"); panel.add(x); constraints.weightx=0.1; constraints.gridx=8; constraints.gridy=2; constraints.insets = new Insets (2, 5, 5, 2); containerGridBag.setConstraints (x, constraints); JLabel y = new JLabel("Y"); constraints.gridwidth = GridBagConstraints.REMAINDER;//le dernier sur la ligne panel.add(y); constraints.weightx=0.1; constraints.gridx=9; constraints.gridy=2; constraints.fill = GridBagConstraints.RELATIVE; constraints.insets = new Insets (2, 5, 5, 2); containerGridBag.setConstraints (y, constraints); choixFichierMidi = new JComboBox(); choixFichierMidi.addItemListener(this); choixFichierMidi.addItem("Choix du fichier"); for (int i = 0; i < compteur; i++) { choixFichierMidi.addItem(termFich[i]); } constraints.gridx=0; constraints.gridy=3; constraints.gridwidth =2; constraints.insets = new Insets (4, 2, 2, 4); panel.add (choixFichierMidi); containerGridBag.setConstraints (choixFichierMidi, constraints); charger = new JButton ("Charger"); charger.addActionListener(this); constraints.gridx=2; constraints.gridy=3; constraints.insets = new Insets (4, 2, 2,4); panel.add (charger); containerGridBag.setConstraints (charger, constraints); vols = new JLabel(); vols.setText(""+volSop); panel.add(vols); constraints.gridx=4; constraints.gridy=3; constraints.gridwidth =1; constraints.weightx=1; constraints.insets = new Insets (2, 5, 5, 2); containerGridBag.setConstraints (vols, constraints); vola = new JLabel(""+volAlt); panel.add(vola); constraints.gridx=5; constraints.gridy=3; constraints.weightx=1; constraints.insets = new Insets (2, 5, 5, 2); containerGridBag.setConstraints (vola, constraints); volt = new JLabel(""+volTen); panel.add(volt); constraints.gridx=6; constraints.gridy=3; constraints.weightx=1; constraints.insets = new Insets (2, 5, 5, 2); containerGridBag.setConstraints (volt, constraints); volb = new JLabel(""+volBas); panel.add(volb); constraints.gridx=7; constraints.gridy=3; constraints.weightx=1; constraints.insets = new Insets (2, 5, 5, 2); containerGridBag.setConstraints (volb, constraints); volx = new JLabel(""+volX); panel.add(volx); constraints.gridx=8; constraints.gridy=3; constraints.weightx=1; constraints.insets = new Insets (2, 5, 5, 2); containerGridBag.setConstraints (volx, constraints); voly = new JLabel(""+volY); panel.add(voly); constraints.gridx=9; constraints.gridy=3; constraints.weightx=1; constraints.insets = new Insets (2, 5, 5, 2); containerGridBag.setConstraints (voly, constraints); joue = new JButton ("Jouer"); joue.addActionListener(this); constraints.gridx=0; constraints.gridy=4; constraints.insets = new Insets (55, 2, 55, 2); panel.add (joue); containerGridBag.setConstraints (joue, constraints); arret = new JButton ("Arreter"); arret.addActionListener(this); constraints.gridx=1; constraints.gridy=4; constraints.insets = new Insets (55, 2, 55, 2); panel.add (arret); containerGridBag.setConstraints (arret, constraints); pause = new JButton ("Pause"); pause.addActionListener(this); constraints.gridx=2; constraints.gridy=4; constraints.insets = new Insets (55, 2, 55, 2); panel.add (pause); containerGridBag.setConstraints (pause, constraints); //ascenceur pourur less volumes scr3VolSop = new JSliderGradue (JSlider.VERTICAL,0,127,volSop); scr3VolSop.addChangeListener (this); scr3VolSop.setPaintTicks(true); scr3VolSop.setPaintLabels(true); scr3VolSop.setMajorTickSpacing(20); scr3VolSop.setMinorTickSpacing(5); constraints.gridx=4; constraints.gridy=4; constraints.fill = GridBagConstraints.VERTICAL; constraints.insets = new Insets (2, 5, 5, 2); panel.add (scr3VolSop); containerGridBag.setConstraints (scr3VolSop, constraints); scr3VolAlt = new JSliderGradue (JSlider.VERTICAL,0,127,volAlt); scr3VolAlt.addChangeListener (this); constraints.gridx=5; constraints.gridy=4; constraints.insets = new Insets (2, 5, 5, 2); panel.add (scr3VolAlt); containerGridBag.setConstraints (scr3VolAlt, constraints); scr3VolTen = new JSliderGradue (JSlider.VERTICAL,0,127,volTen); scr3VolTen.addChangeListener (this); constraints.gridx=6; constraints.gridy=4; constraints.insets = new Insets (2, 5, 5, 2); panel.add (scr3VolTen); containerGridBag.setConstraints (scr3VolTen, constraints); scr3VolBas = new JSliderGradue (JSlider.VERTICAL,0,127,volBas); scr3VolBas.addChangeListener (this); constraints.gridx=7; constraints.gridy=4; constraints.insets = new Insets (2, 5, 5, 2); panel.add (scr3VolBas); containerGridBag.setConstraints (scr3VolBas, constraints); scr3VolX = new JSliderGradue (JSlider.VERTICAL,0,127,volX); scr3VolX.addChangeListener (this); constraints.gridx=8; constraints.gridy=4; constraints.insets = new Insets (2, 5, 5, 2); panel.add (scr3VolX); containerGridBag.setConstraints (scr3VolX, constraints); scr3VolY = new JSliderGradue (JSlider.VERTICAL,0,127,volY); scr3VolY.addChangeListener (this); constraints.gridx=9; constraints.gridy=4; constraints.insets = new Insets (2, 5, 5, 2); panel.add (scr3VolY); containerGridBag.setConstraints (scr3VolY, constraints); JLabel tempoAff = new JLabel("TEMPO : "); panel.add(tempoAff); constraints.gridx=1; constraints.gridy=5; constraints.insets = new Insets (0, 0, 0, 0); containerGridBag.setConstraints (tempoAff, constraints); tempoNum = new JLabel(); tempoNum.setText(""+tempo); constraints.gridx=2; constraints.gridy=5; panel.add(tempoNum); constraints.insets = new Insets (0, 0, 0, 0); containerGridBag.setConstraints (tempoNum, constraints); JLabel niveauMin = new JLabel("tous les niveaux au minimum : "); panel.add(niveauMin); constraints.gridx=5; constraints.gridy=5; constraints.gridwidth =4; constraints.anchor = GridBagConstraints.EAST; constraints.insets = new Insets (0, 0, 0, 0); containerGridBag.setConstraints (niveauMin, constraints); min = new JButton("min"); min.addActionListener(this); constraints.gridx=9; constraints.gridy=5; constraints.gridwidth =2; constraints.anchor = GridBagConstraints.WEST; constraints.insets = new Insets (0, 0, 0, 0); panel.add (min); containerGridBag.setConstraints (min, constraints); scr3 = new JSliderGradue (JSlider.HORIZONTAL,0 ,255 ,tempo); scr3.addChangeListener(this); constraints.gridx=0; constraints.gridy=7; constraints.gridwidth =5; constraints.fill = GridBagConstraints.HORIZONTAL; constraints.insets = new Insets (4, 4, 4, 4); panel.add (scr3); containerGridBag.setConstraints (scr3, constraints); JLabel signature = new JLabel("D. MALIK V 0.8b"); signature.setFont(fontSign); constraints.gridx=9; constraints.gridy=8; constraints.gridwidth =4; constraints.insets = new Insets (0, 0, 0, 0); containerGridBag.setConstraints (signature, constraints); // Mise en forme des composants dans le container panel.add(titre); panel.add(signature); panel.add(niveauMax); validate(); } public class JSliderGradue extends JSlider { Color monBleu = new Color(226,176,133); public JSliderGradue(int orientation, int min, int max,int value) { super(orientation, min, max, value); setBackground(monBleu); setForeground(Color.black); this.setPaintTicks(true); this.setMajorTickSpacing(20); this.setMinorTickSpacing(5); this.setPaintLabels(true); } } public void chargeBank() { try { if (soundbank == null) { //FilePermission perm = new FilePermission("*.*","read"); String soundBankString = getParameter("bank"); System.out.println(soundBankString); urlBank = new URL(getCodeBase(),soundBankString); System.out.println(urlBank); soundbank = MidiSystem.getSoundbank(urlBank); synthesizer.loadAllInstruments(soundbank); if (soundbank == null) { System.out.println("soundbank is null");} } } catch (MalformedURLException e) { System.out.println("Erreur URL ! soundbank"); } catch (IOException e) { System.out.println("Erreur d'Entree Sortie soundbank"); } catch (InvalidMidiDataException e) { System.out.println("Invalid Midi data! soundbank"); } } public void charge() { try { player = MidiSystem.getSequencer(); //player.addMetaEventListener(this); if (!(player instanceof Synthesizer)) { synthesizer = MidiSystem.getSynthesizer(); } else { synthesizer = (Synthesizer) player; } //synthesizer.open(); //Receiver receiver = synthesizer.getReceiver(); soundbank = synthesizer.getDefaultSoundbank(); if (soundbank == null) { System.out.println("soundbank is null"); //String soundBankString = getParameter("bank"); String soundBankString="soundbank-min.gm"; System.out.println("nom du fichier = "+soundBankString); URL urlBank = new URL(getCodeBase() ,soundBankString); System.out.println("nom de l'URL = "+urlBank); Soundbank s = MidiSystem.getSoundbank(urlBank); System.out.println("soundbank charge !"); synthesizer.loadAllInstruments(s); } else { System.out.println("Y'A quelque chose !"); } File fichier=new File(midiFile[sel-1]); url= new URL(getCodeBase().toString()+midiFile[sel-1]); seqChant = MidiSystem.getSequence(url); player.open(); player.setSequence(seqChant); mpq=player.getTempoInBPM(); channels = synthesizer.getChannels(); tempo=(int)mpq; scr3.setValue(tempo); tempoNum.setText(""+tempo); scr3VolSop.setValue(prendVolume(0)); scr3VolAlt.setValue(prendVolume(1)); scr3VolTen.setValue(prendVolume(2)); scr3VolBas.setValue(prendVolume(3)); scr3VolX.setValue(prendVolume(4)); scr3VolY.setValue(prendVolume(5)); scr3VolSop.setEnabled(true); scr3VolAlt.setEnabled(false); // repaint(); // gainSlider.setEnabled(true); signature on veut quelqueu'il soit en tata de marche int nombreCanal = channels.length; /*for(int i = 0; i < nombreCanal; i++) { visible[i]=(channels[i] != null )? true : false; }//fin de for scr3VolSop.setVisible(visible[0]) ; scr3VolAlt.setVisible(visible[1]) ; scr3VolTen.setVisible(visible[2]) ; scr3VolBas.setVisible(visible[3]) ; scr3VolX.setVisible(visible[4]) ; scr3VolY.setVisible(visible[5]); vols.setVisible(visible[0]) ; vola.setVisible(visible[1]) ; volt.setVisible(visible[2]) ; volb.setVisible(visible[3]) ; volx.setVisible(visible[4]) ; voly.setVisible(visible[5]); s.setVisible(visible[0]) ; a.setVisible(visible[1]) ; t.setVisible(visible[2]) ; b.setVisible(visible[3]) ; x.setVisible(visible[4]) ; y.setVisible(visible[5]);*/ } catch (MalformedURLException e) { System.out.println("Erreur URL ! dans charge()"); } catch (IOException e) { System.out.println("Erreur d'Entree Sortie dans charge()"); } catch (MidiUnavailableException e) { System.out.println("Fichier midi non valide dans charge()"); } catch (InvalidMidiDataException e) { System.out.println("Invalid Mididididi data! dans charge()"); } } public void joue() { { player.start(); scr3VolSop.setValue(prendVolume(0)); scr3VolAlt.setValue(prendVolume(1)); scr3VolTen.setValue(prendVolume(2)); scr3VolBas.setValue(prendVolume(3)); scr3VolX.setValue(prendVolume(4)); scr3VolY.setValue(prendVolume(5)); scr3VolSop.setEnabled(true); scr3VolAlt.setEnabled(false);} //tempo(); } public void arret() { player.stop(); player.close(); } public void tempo() { tempo=scr3.getValue(); tempoNum.setText(""+tempo); player.setTempoInBPM(tempo); } public void changeVolume(int voix,int niveau) { channels[voix].controlChange(7, niveau); int vol=(int)channels[voix].getController(7); System.out.println("canal N"+voix+"lecture du volumes dans midiFile = "+vol); /* try { ShortMessage volMsg = new ShortMessage(); volMsg.setMessage(ShortMessage.CONTROL_CHANGE, voix,VOLUME_CONTROLLER, niveau); receiver.send(volMsg, -1); } catch (InvalidMidiDataException e) { System.out.println("Invalid Mididididi data!"); }*/ } public int prendVolume(int voix) { int vol=(int)channels[voix].getController(7); return(vol); } public void max() { for (int i=0 ; i < nombreCanal ; i++) { changeVolume(i,127); } scr3VolSop.setValue(127) ; scr3VolAlt.setValue(127) ; scr3VolTen.setValue(127) ; scr3VolBas.setValue(127) ; scr3VolX.setValue(127) ; scr3VolY.setValue(127); vols.setText("127") ; vola.setText("127") ; volt.setText("127") ; volb.setText("127") ; volx.setText("127") ; voly.setText("127"); } public void min() { for (int i=0 ; i < nombreCanal ; i++) { changeVolume(i,0); } scr3VolSop.setValue(0) ; scr3VolAlt.setValue(0) ; scr3VolTen.setValue(0) ; scr3VolBas.setValue(0) ; scr3VolX.setValue(0) ; scr3VolY.setValue(0); vols.setText("0") ; vola.setText("0") ; volt.setText("0") ; volb.setText("0") ; volx.setText("0") ; voly.setText("0"); } /*class SliderListener implements ChangeListener { public void stateChanged(ChangeEvent evt) { JSlider source = (JSlider)evt.getSource(); volSop = (int)source.getValue(); showStatus(Integer.toString(volSop)); } }*/ public void stateChanged(ChangeEvent e) { JSlider source = (JSlider)e.getSource(); if (!source.getValueIsAdjusting()) { tempo(); vols.setText(""+scr3VolSop.getValue ()); volSop=scr3VolSop.getValue (); System.out.println("le volume des sop est d'aprs le curseur="+volSop); changeVolume(0,volSop); System.out.println("lecture du volumes danss midiFile = "+prendVolume(0)); vola.setText(""+scr3VolAlt.getValue ()); volAlt=scr3VolAlt.getValue (); changeVolume(1,volAlt); volt.setText(""+scr3VolTen.getValue ()); volTen=scr3VolTen.getValue (); changeVolume(2,volTen); volb.setText(""+scr3VolBas.getValue ()); volBas=scr3VolBas.getValue (); changeVolume(3,volBas); volx.setText(""+scr3VolX.getValue ()); volX=scr3VolX.getValue (); changeVolume(4,volX); voly.setText(""+scr3VolY.getValue ()); volY=scr3VolY.getValue (); changeVolume(5,volY); repaint(); } } public void itemStateChanged(ItemEvent evt) { sel=choixFichierMidi.getSelectedIndex(); } public void actionPerformed(ActionEvent evt) { if (evt.getSource()==arret) arret(); else if (evt.getSource()==joue) joue(); else if (evt.getSource()==charger) charge(); else if (evt.getSource()==max) max(); else if (evt.getSource()==min) min(); repaint(); } }