Mac OSX 中的 Java Midi 损坏了吗?

标签 java macos midi

我正在尝试在浏览器中播放 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();
      }
  }
}

这听起来像是偶尔的消息被丢弃了。就像一个音符不会触发,而一个随机的音符会永远挂起。这是 OSX 中的已知问题吗?这些天,Java 似乎没有得到 Apple 足够的喜爱。

如果有人有更好的解决方案来在浏览器中播放 Midi,我会洗耳恭听!

最佳答案

这似乎是一个由两部分组成的问题。我也无法使用 2011 年中期配备 OSX 10.7.5 的 iMac 发送 midi sysex。我确实找到了解决方法 - 首先,我必须使用 mmj jar 和 jnilib,其次我必须告诉我的代码使用 -1 的时间戳,而不是使用 system.currentTimeMillis()。在我的例子中,我正在发送实时 sysex 消息,因此 -1 的时间戳对我有用。如果你正在处理 midi 音符开/关等,我不知道要使用什么时间戳。也许时间戳是 future 几毫秒?我不知道。但我知道我必须同时使用 mmj 并更好地控制我的时间戳。之后,一切都按预期进行。

关于Mac OSX 中的 Java Midi 损坏了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8148898/

相关文章:

java - 使用 Jsoup 提交登录表单时出现问题

linux - 从日志中检查MAC

.net - 通过网络在客户端上播放 MIDI?

macos - 符号链接(symbolic link)在共享到 Windows 或 Linux (smb) 时有效,但在共享到 Mac(afp 或 smb)时损坏

swift - 如何在 swift 中将带变音符号的 AttributedString 保存为正确的 RTF?

midi - 在 Python MIDI MIDO 读取/保存文件中转换时间/节拍

ios - Objective C 中的简单 MIDI 文件编写器

java - 使用 Python 或 Java,创建图表的最佳方式是什么?

java循环中的前自增、后自增和自赋值

java - 有没有直接的方法来计算原始字段的大小?