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();
}
}
}