2009-04-17 2 views
0

Существует действительно классная звуковая «игрушка» под названием ToneMatrix. Я хотел бы переопределить его как Java-апплет. Я пробовал использовать JFugueplayer.play с отдельными нотами для звука и Thread.sleep для синхронизации, но результаты ужасны.Воспроизведение звуковой игрушки «ToneMatrix»

JFugue перестает отвечать после 17-го (да, действительно, я посчитал) вызов player.play и Thread.sleep слишком нерегулярно, чтобы обеспечить хороший ритм.

Что вы рекомендовали бы вместо этого? В принципе, я ищу простой способ генерации одиночных нот звука «на лету». Таким образом, за долю секунды до звука приходится играть, мне нужно иметь возможность смотреть на данные и сообщать в аудио-библиотеку, какие ноты играть. (Возможны многократные ноты в гармонии.)

ответ

1

Я предполагаю, что вы забываете выключать заметки в JFugue, или есть ошибка, которая забывает прекратить играть ноты после запуска.

Использование MIDI - довольно простой способ сделать то, о чем вы говорите. Вот небольшая мешанина полезных методов в 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);