Problema com Sound. Problema do livro Use a cabeça

4 respostas
denisspitfire

Galera, travei aqui… nao entendi muito bem o capitulo sobre sound… a pagina é a 248 e o código é este…

import javax.sound.midi.MidiEvent;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.Sequence;
import javax.sound.midi.Sequencer;
import javax.sound.midi.ShortMessage;
import javax.sound.midi.Track;
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");
		}else {
			int instrument = Integer.parseInt(args[0]);
			int note = Integer.parseInt(args[1]);
			mini.play(instrument, note);
		}
	}
	public static 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();
			first.setMessage(144,1,note,100);
			MidiEvent noteOn = new MidiEvent(a, 1);
			track.add(noteOn);
			
			ShortMessage b = new ShortMessage();
			first.setMessage(128,1,note,100);
			MidiEvent noteOff = new MidiEvent(b, 16);
			track.add(noteOff);
			player.setSequence(seq);
			player.start();
			
		}catch (Exception ex) {ex.printStackTrace();}
	}
}

porque nao funciona?

4 Respostas

denisspitfire

ninguem? ainda nao achei a solução

henriqueluz

Qual erro é exibido?

TerraSkilll

Não há erro de compilação, e aparentemente nem de execução. Só que esse programa precisa de 2 parâmetros no mínimo para fazer alguma coisa, e você deve estar tentando executá-lo através de uma IDE, sem passar nenhum. Aí cairá sempre na mensagem:

Não se esqueça dos argumentos do instrumento

Para executar esse programa, coloque parâmetros na execução. Um jeito bem simples seria compilar o programa e executar via linha de comando, assim:

java MiniMusicCmdLine 1 1.

Deve tocar um som de algum instrumento durante algum tempo (estou sem caixas de som aqui pra testar).
Nota: caso execute via linha de comando, adicione a linha em negrito abaixo:

mini.play(instrument, note); // adicione depois dessa linha
System.exit(0);

Assim você não precisará apertar Ctrl+C para encerrar o programa.

Abraço.

denisspitfire

estou rodando ele no eclipse

Criado 19 de agosto de 2011
Ultima resposta 22 de ago. de 2011
Respostas 4
Participantes 3