Javax.sound.midi. ... Duvidas e Informações

0 respostas
D

Fala galera,… \m/
estou com algumas duvidas sobre o pacote javax.sound.midi, já olhei na documentação da API, já dei uma olhada no site www.midi.org mas nada, as duvidas/problemas são os seguintes:
Lendo o livro Head First notei algumas diferença entre os numeros para instrumentos que ele passa para o setMessage(); dos fornecidos na tabela do site midi.org(http://www.midi.org/techspecs/gm1sound.php#instrument). Então onde consigo uma tabela dos instrumentos que posso usar com a API???
A segunda duvida é sobre as notas e os instrumentos, tipo a nota 44 faz um som normal quando uso o instrumento piano, porem quando uso a flauta faz um som estranho que em nada lembra uma flauta, então para cada instrumentos eu tenho um conjunto de notas??
Sim, e cada instrumento possui seu proprio canal? tipo o canal 1 so para o Acoustic Grand Piano, o canal 2 para um outro instrumento e assim por diante???

Em baixo o codigo de uma classe que to usando para testar a API

import javax.swing.JFrame;
import javax.swing.JComboBox;
import javax.swing.JButton;
import javax.sound.midi.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.FlowLayout;


public class Aplicativo extends JFrame implements ActionListener
{
   private JButton tocar;
   private JButton tocar2;
   private JButton tocar3;
   private JComboBox instrumentos;

   public Aplicativo()
   {
      getContentPane().setLayout(new FlowLayout());
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      instrumentos = new JComboBox();
      instrumentos.addItem("Piano Grande Acustico");
      instrumentos.addItem("Flauta");
      instrumentos.addItem("Acordion");
      instrumentos.addItem("Violino");
      tocar = new JButton("Tocar");
      tocar.addActionListener(this);
      getContentPane().add(instrumentos);
      getContentPane().add(tocar);
      setSize(320, 240);
      setVisible(true);
      show();

   }
   public static void main(String args[])
   {
      Aplicativo app = new Aplicativo();
   }

   public void actionPerformed(ActionEvent event)
   {
      int instrumento = instrumentos.getSelectedIndex();
      switch (instrumento)
      {
         case 0: tocarInstrumento(1);
                 break;
         case 1: tocarInstrumento(74);
                 break;
         case 3: tocarInstrumento(41);
                 break;
         case 4: tocarInstrumento(22);
                 break;
      }
   }

   public void tocarInstrumento(int instru)
   {
      try
      {
      Sequencer player = MidiSystem.getSequencer();
      player.open();
      Sequence sequence = new Sequence(Sequence.PPQ, 4);
      Track track = sequence.createTrack();
      ShortMessage instrument = new ShortMessage();
      instrument.setMessage(192, 1, instru, 0);
      MidiEvent star = new MidiEvent(instrument, 1);
      track.add(star);
      ShortMessage mes = new ShortMessage();
      mes.setMessage(144, 7, 26, 100);
      MidiEvent nota = new MidiEvent(mes, 1);
      ShortMessage mesB = new ShortMessage();
      mesB.setMessage(128, 7, 26, 100);
      MidiEvent notaOff = new MidiEvent(mesB, 8);
      track.add(nota);
      track.add(notaOff);
      player.setSequence(sequence);
      player.start();
      }
      catch (Exception ex)
      {
         ex.printStackTrace();
      }
   }
}
Criado 11 de abril de 2008
Respostas 0
Participantes 1