我目前正在编写一个钢琴键盘编辑器,就像你可以在 Cubase、Logic、Reason 等中找到的那个。
我有这个大网格,双数组 new int [13][9],它有 13 行,9 列。第一列 [0-12][0] 是键盘,顶部是“high C”(midi note 72),底部是“low C”(midi note 60)。该列是一个 JButton 数组,当您按下例如“low C”时,合成器正在播放音符 60。
我现在已经让它工作得很好,但我遇到的一个问题是我只能连续演奏 16 个音符,然后就像合成器关闭或其他什么。
你们知道问题是什么吗?
一点代码:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
import javax.sound.midi.*;
actionPerformed(ActionEvent ae){
for(int i = 0; i<13; i++){
if(o== instr[i]){//instr is the button array
SpelaTangent(i);
}
}
}
public void SpelaTangent(int tangent){
int [] klaviatur = new int[13];
for(int i = 0; i<13; i++){
klaviatur[i] = (72-i);
}
try {
Synthesizer synth = MidiSystem.getSynthesizer();
synth.open();
final MidiChannel[] mc = synth.getChannels();
Instrument[] instrument = synth.getDefaultSoundbank().getInstruments();
synth.loadInstrument(instrument[1]);
mc[0].noteOn(klaviatur[tangent],350);
mc[0].noteOff(klaviatur[tangent],350);
} catch (MidiUnavailableException e) {}
}
非常感谢您的帮助!