Реализовать аудио игрушку "ToneMatrix"
Есть действительно классная звуковая "игрушка" под названием ToneMatrix. Я хотел бы переопределить его как апплет Java. Я пытался использовать JFugueplayer.play
с отдельными нотами для звука и Thread.sleep
на время, но результаты ужасны.
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);