有没有一种方法可以在不构造MidiMessage对象的情况下用Java发送和接收MIDI消息?
我一直在研究一种概念验证的高性能实时音乐工作站原型,并且设计标准之一是普通的乐器演奏和信号处理通常不分配任何对象:仅分配对象当用户更改设置时。 (我想尽可能减少垃圾收集暂停的需要。)
显然,为每个细粒度的MIDI事件分配一个MidiMessage对象与我想遵循的原理相反。 javax.sound.sampled包使我无需分配即可处理采样的声音,但是到目前为止,我找不到在不分配大量对象的情况下在Java中使用MIDI的任何方法。
有没有一种方法可以将MIDI设备中的字节读取到缓冲区中,而不是接收MidiMessage对象? MIDI消息很容易解码,因此我很高兴没有MidiMessage类提供的“帮助”(由于您仍然需要解码消息中的字节,所以反正并没有多大帮助)。
最佳答案
如果我正确理解了您的问题,您是否不能在代码中重用单个MidiMessage
对象并通过setMessage()
重新分配其数据?这样,引用就不会丢失,也不会被垃圾收集。