簡體   English   中英

發送多個MIDI信息

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM