【问题标题】:Java Midi in Mac OSX Broken?Mac OSX 中的 Java Midi 坏了?
【发布时间】:2012-11-24 15:22:07
【问题描述】:

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

听起来偶尔的消息被丢弃了。就像一个noteoff不会触发,一个随机的note会永远挂着。这是 OSX 中的一个已知问题吗?似乎 Java 现在没有从 Apple 那里得到足够的爱。

如果有人有更好的解决方案来在浏览器中播放 Midi,我会全力以赴!

【问题讨论】:

  • 您能否使用可热链接的 MIDI 重现该问题?例如。我的media page 有 2 个低于 12Kb 的可用。
  • here's a sample file 我把我的 Mac 忘在了工作上;明天我测试完你的文件后回复你。这个问题似乎是随机发生的!我无法可靠地复制它。它至少每 30 秒左右发生一次。
  • Andrew,我已经能够使用您链接到的 EverLove 和 AftrMdnt 测试文件非常可靠地重现问题。如果没有合成器挂起,我不能播放超过 20 秒(音符挂起,也没有发送新的音符命令)。问题似乎是随机出现的。

标签: java macos midi


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    来自mmj - Midi for java on Mac OS X

    Apple 的 java Midi 实现显得有些半心半意。它不认为状态字节 >= 0xF0 的 MIDI 数据有效(即不适用于 sysex、MIDI 时钟、时间码等),忽略 Midi 事件的时间戳,设备名称将默认为端口名称(没有提示此端口所属的设备)并且可能还有其他类似的东西丢失。

    OS X 上 MIDI 的情况似乎很糟糕,尽管提供了 API 作为替代品。

    【讨论】:

    • 感谢您的回答。看来我毕竟不是the only one 遇到这个问题!我现在正在研究 MMJ,但似乎问题出在合成器上。
    • (出于某种原因,我没有收到您的评论,但碰巧注意到了)MMJ 不也提供合成器吗?我没有深入研究它。
    • 我很全面地浏览了源代码,但找不到合成器。它看起来更像是一个用于与硬件midi设备通信的库。再一次,我对 JNI 和 CoreMIDI 了如指掌!我在谷歌上也找不到任何例子。我得到了存档中的测试来编译,但它提供的只是一个 MIDI 键盘。没有使用 mmj 进行音频合成的选项;我只设法使用本机选项获得音频输出。真是令人沮丧的东西。
    • 我确实听说 2 个新的 JRE 即将可用于 Mac,但对于小程序,最常见的是“使用现有的 JRE 或丢失内容(和访问者,很可能)'。 :( Flash 或 HTML(例如对象/嵌入)似乎也没有太多帮助。似乎最重要的消息是 不要在网页中放声音” .
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    相关资源
    最近更新 更多