gpt4 book ai didi

java - 发送多个 MIDI 消息

转载 作者:行者123 更新时间:2023-12-01 12:47:56 24 4
gpt4 key购买 nike

我希望能够独立发送多个 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;
}

然后将此类对象添加到队列中。播放器线程将在发送下一个事件之前 hibernate time_delta 单位。如果 time_delta 为零,则立即发送。发送此事件后,将从 FIFO 中获取下一个事件。

循环发送一堆 MIDI 消息是“同时”的,因为发送者将足够快地发送音符。

关于java - 发送多个 MIDI 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24507286/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com