[英]Send multiple MIDI messages
我希望能够独立发送多个MIDI消息。 但是问题是我必须等到前一个音符结束为止。 我是否需要为所有声音创建线程? 假设我希望能够同时演奏10个音符。 那我将不得不创建10个线程?
我通过javax.sound.midi
发送了MIDI消息
public void playNote(int pitch, int length, int velocity) {
try {
msg.setMessage(ShortMessage.NOTE_ON, 0, pitch, velocity);
rcvr.send(msg, timeStamp);
Thread.sleep(length);
msg.setMessage(ShortMessage.NOTE_OFF, 0, pitch, 0);
rcvr.send(msg, timeStamp);
} catch (Exception e) {
e.printStackTrace();
}
}
您无需等待便笺再发送下一个。 创建MIDI事件的FIFO:
public class MidiEvent
{
/**Number of time units to wait until this message should be sent.
*/
public int time_delta;
/**First status byte.
*/
public byte byte_0;
/**Second status byte.
*/
public byte byte_1;
/**Third status byte.
*/
public byte byte_2;
}
然后将此类对象添加到队列中。 播放器线程将在发送下一个事件之前休眠time_delta
单位。 如果time_delta为零,则立即发送。 发送此事件后,将从FIFO中提取下一个事件。
在某种意义上说,发送方将以足够快的速度发送音符,在循环中发送一串MIDI消息是“同时的”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.