Pegar as notas de um arquivo MIDI

0 respostas
mateusviccari
Olá, estou criando um programa pra ler as notas de um arquivo Midi, ja consegui fazer o programa ler e tocar arquivos midi, fiz um player bonitinho pra ele e tal... E minha intenção é desenhar na tela as notas na sequencia que elas são tocadas. Pelo que eu entendi, eu tenho que pegar as notas dos eventos Midi, tentei capturar os eventos midi mas a única saída que obti foi essa:
javax.sound.midi.MetaMessage@73db12e6
-18137-9532javax.sound.midi.MetaMessage@33b5f576
-130javax.sound.midi.MetaMessage@6f06307f
-1884427-95javax.sound.midi.Track$ImmutableEndOfTrack@7f5a1aca
-1470
O código que usei pra pegar essa saída foi esse:
Track[] tracks = midiPlayer.musicaMidi.getTracks();
        Track pista1=tracks[0];
        for(int i=0;i<pista1.size();i++){
            MidiEvent eventoMidi=pista1.get(i);
            MidiMessage mensagemMidi=eventoMidi.getMessage();
            System.out.println(mensagemMidi.toString());
            byte[] message = mensagemMidi.getMessage();
            for(int k=0;k<message.length;k++){
                System.out.print(message[k]);
            }
        }

Alguem ja trabalhou com algo parecido e saberia dizer qual é o próximo passo?

Eis o código do meu midiPlayer:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package MidiPlayer;
import java.io.File;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.Sequence;
import javax.sound.midi.Sequencer;
import javax.swing.JOptionPane;
 
public class MidiPlayer {
    // Define a URL onde está o MIDI
    File metallicaURL;
    Sequence musicaMidi;
    // Obtém o sequenciador MIDI que tocará a música
    Sequencer sequenciador;

    public MidiPlayer() {
    }
    
    public void criarPlayer(File arquivoMidi){
        try{
            metallicaURL = arquivoMidi;
            musicaMidi = MidiSystem.getSequence(metallicaURL);
            // Obtém o sequenciador MIDI que tocará a música
            sequenciador = MidiSystem.getSequencer();
            // Abre o sequenciador
            sequenciador.open();
            // Seta a música que queremos tocar nos equenciador
            sequenciador.setSequence(musicaMidi);
            // Abre o sequenciador
            sequenciador.open();
            // Seta a música que queremos tocar nos equenciador
            sequenciador.setSequence(musicaMidi);
        }catch(Exception e){
            JOptionPane.showMessageDialog(null, e.getLocalizedMessage());
        }
    }
    
    public void play(){
        sequenciador.start();
    }
    
    public void pause(){
        sequenciador.stop();
    }
    
    public void stop(){
        sequenciador.stop();
        sequenciador.setMicrosecondPosition(0);
    }
    
    public long posicaoMaximaDoPlayer(){
        return sequenciador.getMicrosecondLength();
    }
    
    public long posicaoAtualDoPlayer(){
        return sequenciador.getMicrosecondPosition();
    }
    
    public boolean estaTocando(){
        return sequenciador.isRunning();
    }
    
    public void fecharPlayer(){
        if(sequenciador!=null){
            sequenciador.close();
        }
    }
}
Criado 18 de março de 2012
Respostas 0
Participantes 1