Переработка аудиоигрушки «ToneMatrix» [закрыто]
-
09-09-2019 - |
Вопрос
Есть очень крутая аудио "игрушка" под названием ТонМатрикс.Я хотел бы переопределить его как Java-апплет.Я пробовал использовать JFugue's player.play
с отдельными нотами для звука и Thread.sleep
по времени, но результаты ужасны.
JFugue перестает отвечать после 17-го (да, действительно, я посчитал) вызова player.play
и Thread.sleep
слишком нерегулярно, чтобы обеспечить хороший ритм.
Что бы вы порекомендовали вместо этого?По сути, я ищу простой способ генерировать отдельные звуковые ноты на лету.Таким образом, за долю секунды до начала воспроизведения звука мне нужно просмотреть данные и сообщить аудиотеке, какие ноты воспроизводить.(Вероятно наличие нескольких нот в гармонии.)
Решение
Я предполагаю, что вы забываете отключить ноты в 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);