Java Sound MIdi

7 respostas
joab

Eu naum estou conseguindo executar aplicações que reproduzam arquivos MIDI, sempre dispara uma exceção.
Acho que o sistema naum está configurado para suportar…
Alguém poderia me ajudar,
grato.

7 Respostas

J

Vc tem o Java Media Framework? Ele suporta uma quantidade grande formatos de áudio e vídeo…

joab

Hum, tenho naum…
Sabe o que é to aprendendo Java com o Livro Aprenda JAVA EM 21 DIAS, livro baum, ai to me familiarizando com a linguagem e por isso só copiando código…
Ai o que eu copiei para reproduzir MIDI naum encontra a sequencia para reproduzi-lá…
Valeu pela resposta hein!!foi bem rapida…
Abraço.

J

Se vc precisar tocar AVI, MP3, etc. então o Java Media Framework é a pedida. Mas se não me engano o Applet permite tocar MIDI agora faz séculos que não mexo com MIDI. :oops:

joab

rsrsrrs, é eu devo tá bem longe de vc…
Mas deixa eu te explicar, outra código de um applet tb naum executou… e eu fiz tudo como estava ensinando…
Passei o parâmetro corretamente, e nada…
Eu vou te mandar o código, ai se vc puder me ajudar, vc dá uma olhada e me diga o que há de errado…
O problema é som arquivos MIDI ou java.sound.MIdi, pq com os arquivos WAV deu certo…
Flws.

import javax.swing.<em>;

import java.awt.event.</em>;

import javax.sound.midi.*;

import java.awt.GridLayout;

import java.io.File;
public class MidiApplet extends javax.swing.JApplet {

public void init() {

JPanel pane = new JPanel();

MidiPlayer midi = new MidiPlayer(getParameter(file));

pane.add(midi);

add(pane);

}

}

class MidiPlayer extends JPanel implements Runnable, ActionListener {

Thread runner;
JButton play = new JButton("Play");
JButton stop = new JButton("Stop");
JLabel message = new JLabel();
JComboBox tempoBox = new JComboBox();
float tempo = 1.0F;
Sequence currentSound;
Sequencer player;
String songFile;

MidiPlayer(String song) {
    super();
    songFile = song;
    play.addActionListener(this);
    stop.setEnabled(false);
    stop.addActionListener(this);
    for (float i = 0.25F; i < 7F; i += 0.25F)
        tempoBox.addItem("" + i);
    tempoBox.setSelectedItem("1.0");
    tempoBox.setEnabled(false);
    tempoBox.addActionListener(this);
    setLayout(new GridLayout(2, 1));
    add(message);
    JPanel buttons = new JPanel();
    JLabel tempoLabel = new JLabel("Tempo: ");
    buttons.add(play);
    buttons.add(stop);
    buttons.add(tempoLabel);
    buttons.add(tempoBox);
    add(buttons);
    if (songFile == null) {
        play.setEnabled(false);
    }
 }

public void actionPerformed(ActionEvent evt) {
    if (evt.getSource() instanceof JButton) {
        if (evt.getSource() == play)
            play();
        else
            stop();
    } else {
        String item = (String)tempoBox.getSelectedItem();
        try {
            tempo = Float.parseFloat(item);
            player.setTempoFactor(tempo);
            message.setText("Playing " + songFile + " at "
                + tempo + " tempo");
        } catch (NumberFormatException ex) {
            message.setText(ex.toString());
        }
    }
}

void play() {
    if (runner == null) {
        runner = new Thread(this);
        runner.start();
        play.setEnabled(false);
        stop.setEnabled(true);
        tempoBox.setEnabled(true);
    }
}

void stop() {
    if (runner != null) {
        runner = null;
        stop.setEnabled(false);
        play.setEnabled(true);
        tempoBox.setEnabled(false);
    }
}

public void run() {
    try {
        File song = new File(songFile);
        currentSound = MidiSystem.getSequence(song);
        player = MidiSystem.getSequencer();
    } catch (Exception ex) {
        message.setText(ex.toString());
    }
    Thread thisThread = Thread.currentThread();
    while (runner == thisThread) {
        try {
            player.open();
            player.setSequence(currentSound);
            player.setTempoFactor(tempo);
            player.start();
            message.setText("Playing " + songFile + " at "
                + tempo + " tempo");
            while (player.isRunning() && runner != null) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) { }
            }
            message.setText("");
            player.close();
        } catch (Exception ex) {
            message.setText(ex.toString());
            break;
        }
    }
}

}

Marky.Vasconcelos

Sempre poste o código dentre as tags [code ] e [/ code].

E qual é a execeção que lança?

joab
joab:
rsrsrrs, é eu devo tá bem longe de vc... Mas deixa eu te explicar, outra código de um applet tb naum executou... e eu fiz tudo como estava ensinando... Passei o parâmetro corretamente, e nada... Eu vou te mandar o código, ai se vc puder me ajudar, vc dá uma olhada e me diga o que há de errado... O problema é som arquivos MIDI ou java.sound.MIdi, pq com os arquivos WAV deu certo... Flws.
import javax.swing.*;
import java.awt.event.*;
import javax.sound.midi.*;
import java.awt.GridLayout;
import java.io.File;

public class MidiApplet extends javax.swing.JApplet {
    public void init() {
        JPanel pane = new JPanel();
        MidiPlayer midi = new MidiPlayer(getParameter("file"));
        pane.add(midi);
        add(pane);
    }
}

class MidiPlayer extends JPanel implements Runnable, ActionListener {

    Thread runner;
    JButton play = new JButton("Play");
    JButton stop = new JButton("Stop");
    JLabel message = new JLabel();
    JComboBox tempoBox = new JComboBox();
    float tempo = 1.0F;
    Sequence currentSound;
    Sequencer player;
    String songFile;

    MidiPlayer(String song) {
        super();
        songFile = song;
        play.addActionListener(this);
        stop.setEnabled(false);
        stop.addActionListener(this);
        for (float i = 0.25F; i < 7F; i += 0.25F)
            tempoBox.addItem("" + i);
        tempoBox.setSelectedItem("1.0");
        tempoBox.setEnabled(false);
        tempoBox.addActionListener(this);
        setLayout(new GridLayout(2, 1));
        add(message);
        JPanel buttons = new JPanel();
        JLabel tempoLabel = new JLabel("Tempo: ");
        buttons.add(play);
        buttons.add(stop);
        buttons.add(tempoLabel);
        buttons.add(tempoBox);
        add(buttons);
        if (songFile == null) {
            play.setEnabled(false);
        }
     }

    public void actionPerformed(ActionEvent evt) {
        if (evt.getSource() instanceof JButton) {
            if (evt.getSource() == play)
                play();
            else
                stop();
        } else {
            String item = (String)tempoBox.getSelectedItem();
            try {
                tempo = Float.parseFloat(item);
                player.setTempoFactor(tempo);
                message.setText("Playing " + songFile + " at "
                    + tempo + " tempo");
            } catch (NumberFormatException ex) {
                message.setText(ex.toString());
            }
        }
    }

    void play() {
        if (runner == null) {
            runner = new Thread(this);
            runner.start();
            play.setEnabled(false);
            stop.setEnabled(true);
            tempoBox.setEnabled(true);
        }
    }

    void stop() {
        if (runner != null) {
            runner = null;
            stop.setEnabled(false);
            play.setEnabled(true);
            tempoBox.setEnabled(false);
        }
    }

    public void run() {
        try {
            File song = new File(songFile);
            currentSound = MidiSystem.getSequence(song);
            player = MidiSystem.getSequencer();
        } catch (Exception ex) {
            message.setText(ex.toString());
        }
        Thread thisThread = Thread.currentThread();
        while (runner == thisThread) {
            try {
                player.open();
                player.setSequence(currentSound);
                player.setTempoFactor(tempo);
                player.start();
                message.setText("Playing " + songFile + " at "
                    + tempo + " tempo");
                while (player.isRunning() && runner != null) {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) { }
                }
                message.setText("");
                player.close();
            } catch (Exception ex) {
                message.setText(ex.toString());
                break;
            }
        }
    }
}
joab

A exceção é a FileNotFoundException…

Criado 3 de janeiro de 2008
Ultima resposta 3 de jan. de 2008
Respostas 7
Participantes 3