我最近正在开发一个关于Java的项目,我使用SE 8.我已经制作了一个钢琴,它通过播放几个wav文件来播放音乐,例如。我有5个器官,我钢琴的每个按钮都是所选乐器的一个音符。仪器从顶部的按钮中选择。
但是,我知道我也可以使用JSyn生成音乐,而不仅仅是“调用”wavs来播放。任何人都可以帮助如何开始,因为我没有找到任何教程来做到这一点。我只需要找到一种方法来为我的键使用一个函数,只需输入不同的值(我假设)来改变每个键的声音。有什么想法吗?
答案 0 :(得分:0)
如果你想使用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());
如果你向上或向下缩放太远,那么听起来会很奇怪。因此,您可能希望使用多个样本并选择最接近所需音高的样本。