2009-04-17 3 views
0

ToneMatrix이라는 정말 멋진 오디오 "장난감"이 있습니다. 자바 애플릿으로 다시 구현하고 싶습니다. 나는 의 player.play을 사용하여 사운드를위한 개별 노트와 타이밍을위한 Thread.sleep을 시도했지만 결과는 끔찍합니다."ToneMatrix"오디오 토이 다시 구현

JFugue는 player.playThread.sleep의 17 번째 (예, 실제로, 계산) 호출이 좋은 리듬을 전달하기에는 너무 규칙적이어서 응답을 멈 춥니 다.

대신 무엇을 권하고 싶습니까? 기본적으로 나는 소리의 단일 음표를 즉석에서 생성하는 간단한 방법을 찾고 있습니다. 소리가 연주되기 전에 몇 초가 걸리므로 데이터를보고 오디오 라이브러리에 어떤 음표를 연주 할 지 알려줄 필요가 있습니다. (조화로운 여러 음들이 가능할 것입니다.)

답변

1

제 생각에는 JFugue에서 음표를 끄는 것을 잊어 버리거나 한 번 시작한 음표 연주를 멈추는 것을 잊어 버리는 버그가 있습니다.

MIDI를 사용하면 아주 쉽게 당신이 말하는 것을 할 수 있습니다. 여기에 당신을 시작할 수있게 해주는 미디 패키지의 유용한 메소드가 있습니다.

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);