我正在尝试在浏览器中播放midi,并且一直在使用可在PC上运行良好的Java Applet.它在OSX上非常不可靠,所以我写了一个简单的测试用例,它表现出同样的问题:
import javax.sound.midi.*;
import java.io.InputStream;
import java.io.IOException;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class MidiPlayer {
public static void main(String[] args) {
try {
Sequencer sequencer = MidiSystem.getSequencer();
if (sequencer == null)
throw new MidiUnavailableException();
sequencer.open();
FileInputStream is = new FileInputStream("sample.mid");
Sequence mySeq = MidiSystem.getSequence(is);
sequencer.setSequence(mySeq);
sequencer.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
听起来偶尔的消息会被丢弃.就像一个音符不会发射,随机音符将永远挂起.这是OSX中的已知问题吗?看起来Java似乎没有从Apple获得足够的爱.
如果有人有更好的解决方案在浏览器中播放Midi,我全都耳朵!
来自mmj - Mac OS X 上的 java Midi:
Apple 的 java Midi 实现显得有点三心二意。它不认为状态字节 >= 0xF0 的 MIDI 数据有效(即不适用于 sysex、MIDI 时钟、时间码等),忽略 Midi 事件上的时间戳,设备名称将默认为仅端口名称(没有提示)该端口所属的设备)并且可能还缺少其他类似的东西。
OS X 上的 MIDI 情况似乎很糟糕,尽管该 API 是作为替代品提供的。