Alguém sabe como executar essa classe?

11 respostas
nissivm

Estou tendo problemas para executar a classe abaixo (ela foi retirada do livro “Use a cabeça! Java”):

package exemplos;

import javax.sound.midi.*;

public class MiniMusicCmdLine {

	public static void main(String[] args) {
		
		MiniMusicCmdLine mini = new MiniMusicCmdLine();
		
		if(args.length < 2){
			System.out.println("Não se esqueça dos argumentos do instrumento e da nota");
		}else{
			int instrument = Integer.parseInt(args[0]);
			int note = Integer.parseInt(args[1]);
			mini.play(instrument, note);
		}

	}
	
	public void play(int instrument, int note){
		
		try{
			
			Sequencer player = MidiSystem.getSequencer();
			player.open();
			Sequence seq = new Sequence(Sequence.PPQ, 4);
			Track track = seq.createTrack();
			
			//MidiEvent event = null;
			
			ShortMessage first = new ShortMessage();
			first.setMessage(192, 1, instrument, 0);
			MidiEvent changeInstrument = new MidiEvent(first, 1);
			track.add(changeInstrument);
			
			ShortMessage a = new ShortMessage();
			a.setMessage(144, 1, note, 100);
			MidiEvent noteOn = new MidiEvent(a, 1);
			track.add(noteOn);
			
			ShortMessage b = new ShortMessage();
			b.setMessage(128, 1, note, 100);
			MidiEvent noteOff = new MidiEvent(b, 1);
			track.add(noteOff);
			
			player.setSequence(seq); //Coloca o CD no CD Player.
			
			player.start(); //Pressiona "play".
			
		}catch(Exception ex){
			ex.printStackTrace();
		}
	}

}

11 Respostas

drsmachado

Você precisa criar outra classe que chame esta, passando um array de String com 2 parâmetros, o primeiro será o instrumento e o segundo a nota a ser executada.
Ou exportar o jar e executar do prompt

T

Esse código foi feito para rodar em um terminal. Tu podes também ir nas configurações de execução (run) da IDE e colocar parâmetros para a execução do projeto.

nissivm

drsmachado:
Você precisa criar outra classe que chame esta, passando um array de String com 2 parâmetros, o primeiro será o instrumento e o segundo a nota a ser executada.
Ou exportar o jar e executar do prompt

Mas essa classe já tem um main, como exatamente eu chamaria ela de outra classe?

Desculpe, é que sou iniciante e não entendi o que vc falou…

T

Qual é a sua IDE?

nissivm

não sei, só sei que estou usando a jre 6.0

T

Como vc tá compilando a classe? Via console ou usando uma IDE, como eclipse ou netbeans?

nissivm

ah sim, estou usando o Eclipse, o problema que estou tendo é que não consigo digitar nada na aba console do Eclipse. Tentei incluir um BufferedReader e um InputStreamReader mas não deu certo…

T

Ia dizer isso agora…
Uma entrada fácil de dados é:

JOptionPane.showInputDialog("Mensagem");

A saída é string. Para transformat para inteiro usa:

Integer.parseInt(string);
nissivm

Usei o JOptionPane, ele recebeu o que eu coloquei na caixa, mas não tocou nada… Deixa p/ lá, obrigada por responder Thierry :slight_smile:

T
public static void main(String[] args) {  
          
        MiniMusicCmdLine mini = new MiniMusicCmdLine();  

            int instrument = Integer.parseInt(JOptionPane.showInputDialog("Insira o instrumento"));  
            int note = Integer.parseInt(JOptionPane.showInputDialog("Insira a nota"));  
            mini.play(instrument, note);  

    }
nissivm

Deu certo rs! Sabe qual era o problema? É que na linha 44, nos argumentos do método construtor de MidiEvent, tinha um tb, então o som começava E terminava em 1 segundo! Por isso não dava para ouvir! Tsc, tsc, somos tão desatentos!
Obrigada pelas respostas!

Criado 14 de junho de 2011
Ultima resposta 14 de jun. de 2011
Respostas 11
Participantes 3