簡體   English   中英

Mac OSX中的Java Midi破碎了嗎?

[英]Java Midi in Mac OSX Broken?

我正在嘗試在瀏覽器中播放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音符開/關等,我不知道要使用什么時間戳。也許時間戳是未來幾毫秒? 我不知道。 但我知道我必須同時使用mmj並更好地控制我的時間戳。 在那之后,事情按預期工作。

來自mmj - Midi for Mac OS X上的java

Apple的java Midi實現看起來有點半心半意。 它不考慮狀態字節> = 0xF0的MIDI數據有效(即不能使用sysex,MIDI時鍾,時間碼等),忽略Midi事件的時間戳,設備名稱默認只有端口的名稱(沒有提示這個端口所屬的設備)並且可能還有其他缺失的東西。

雖然該API作為替代品提供,但OS X上的情況似乎很糟糕。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM