发送多个MIDI消息



我希望能够独立发送多个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消息是"同步的",因为发送者将足够快地发送音符。

相关内容

  • 没有找到相关文章

最新更新