0

有一个非常酷的音频“玩具”,叫做ToneMatrix。我想将它重新实现为 Java 小程序。我尝试过使用JFugueplayer.play单独的音符来进行声音和Thread.sleep计时,但结果很糟糕。

JFugue 在第 17 次(是的,真的,我数过)调用后停止响应,player.play并且Thread.sleep太不规则而无法提供良好的节奏。

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

4

1 回答 1

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);
于 2009-04-17T13:56:30.030 回答