我最近在 Java 上做一个项目,我使用 SE 8。我建造了一架钢琴,它通过播放几个 wav 文件来播放音乐,我有 5 个风琴,钢琴的每个按钮都是所选音乐的一个音符乐器。乐器是从顶部的按钮中选择的。
但是,我知道我也可以通过使用 JSyn 而不仅仅是“调用”要播放的 wav 来生成音乐。任何人都可以帮助如何开始,因为我还没有找到任何教程来做到这一点。我只需要找到一种方法来为我的按键使用一个功能,然后输入不同的值(我假设)来改变每个按键的声音。有任何想法吗?
如果你想使用 JSyn 播放合成声音,那么你可以在这里找到一个使用 MIDI 键盘的示例:
https://github.com/philburk/jsyn/blob/master/tests/com/jsyn/examples/UseMidiKeyboard.java
它展示了如何使用 VoiceAllocator 来管理多个声音。关键代码是:
double frequency = convertPitchToFrequency(noteNumber);
double amplitude = velocity / (4 * 128.0);
TimeStamp timeStamp = synth.createTimeStamp();
allocator.noteOn(noteNumber, frequency, amplitude, timeStamp);
如果您想播放 WAV 文件中的样本,可以在此处找到示例:
https://github.com/philburk/jsyn/blob/master/tests/com/jsyn/examples/PlaySample.java
在第 83 行它说:
samplePlayer.rate.set(sample.getFrameRate());
这将以录制时的原始音高播放样本。
您可以调整速率,使其播放不同的音高。例如,放大 2.0 以播放八度音阶,或放大 1.5 以播放五度:
samplePlayer.rate.set(1.5 * sample.getFrameRate());
如果您向上或向下缩放太多,那么听起来会很奇怪。因此,您可能需要使用多个样本并选择最接近所需音高的样本。