重新实现“ToneMatrix”音频玩具

时间:2009-04-17 13:04:19

标签: java audio memory-management jfugue

有一个名为ToneMatrix的非常酷的音频“玩具”。我想重新实现它作为Java小程序。我已经尝试使用JFugueplayer.play个人声音和Thread.sleep作为时间,但结果非常糟糕。

JFugue在第17次(是的,真的,我计算)player.playThread.sleep的调用后停止响应太不规律而无法提供良好的节奏。

你会推荐什么?基本上,我正在寻找一种简单的方法来动态生成单个音符。因此,在播放声音之前的一小段时间内,我需要能够查看数据并告诉音频库要播放哪些音符。 (可能会有多个和谐音符。)

1 个答案:

答案 0 :(得分: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);