Pergunta

Há um muito legal áudio "brinquedo" chamado ToneMatrix . Gostaria de reimplementar-lo como um applet Java. Eu tentei usar JFugue 's player.play com notas individuais para som e Thread.sleep para o sincronismo, mas os resultados são horrível.

JFugue pára de responder após o dia 17 (sim, realmente, eu contei) invocação de player.play e Thread.sleep é demasiado irregular para entregar um bom ritmo.

O que você recomendaria em vez disso? Basicamente, eu estou procurando uma maneira simples de gerar notas individuais de som em tempo real. Assim, uma fração de segundo antes que o som é devido ao jogo, eu preciso ser capaz de olhar para os dados e dizer a biblioteca de áudio que notas para jogar. (Múltiplas notas em harmonia são prováveis.)

Foi útil?

Solução

O meu palpite é que você está esquecendo de virar as notas off em JFugue, ou há um bug que está esquecendo de parar de jogar as notas uma vez iniciado.

Usando MIDI é uma maneira muito fácil de fazer o que você está falando. Aqui é um pouco de uma mistura de métodos úteis no pacote midi que você começar:

Synthesizer synth = MidiSystem.getSynthesizer();
synth.open();
MidiChannel midiChannel = synth.getChannels()[0];
midiChannel.allNotesOff();
currentInstrument = synth.getAvailableInstruments()[index];
System.out.println("Switching instrument to #" + index + ": " + currentInstrument.getName());
synth.loadInstrument(currentInstrument);
midiChannel.programChange(currentInstrument.getPatch().getBank(), currentInstrument.getPatch().getProgram());
midiChannel.noteOn(noteNumber, velocity);
midiChannel.noteOff(noteNumber);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top