首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Mac OSX中的Java Midi坏了吗?

Mac OSX中的Java Midi坏了吗?
EN

Stack Overflow用户
提问于 2011-11-16 08:50:34
回答 2查看 2.1K关注 0票数 5

我正在尝试在浏览器中播放midi,并且一直在使用一个在PC上运行良好的Java Applet。它在OSX上非常不可靠,所以我写了一个简单的测试用例,展示了同样的问题:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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似乎没有从苹果那里得到足够的关爱。

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

EN

回答 2

Stack Overflow用户

发布于 2012-11-24 07:22:07

这似乎是一个两部分的问题。我也无法使用2011年年中配备了OSX10.7.5的iMac发送midi sysex。我确实找到了一个解决办法--首先,我必须使用mmj jar和jnilib的,其次,我必须告诉我的代码使用-1的时间戳,而不是使用system.currentTimeMillis()。在我的例子中,我发送的是实时sysex消息,因此时间戳-1对我来说是有效的。我不知道如果你正在处理midi,音符,开/关等等,应该使用什么时间戳,也许时间戳是未来的毫秒?我不知道。但我知道我必须同时使用mmj和更好地控制我的时间戳。在那之后,事情就像预期的那样工作。

票数 4
EN

Stack Overflow用户

发布于 2011-11-18 14:03:18

来自mmj - Midi for java on Mac OS X

苹果公司(

)的java Midi实现看起来有点半心半意。它不会将状态字节为>= 0xF0的MIDI数据视为有效(即不适用于sysex、MIDI时钟、时间码等),忽略Midi事件上的时间戳,设备名称将默认仅为端口名称(没有关于此端口所属设备的提示),并且可能会丢失类似的其他内容。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8148898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文