Java Midi в Mac OSX сломана? - PullRequest
       9

Java Midi в Mac OSX сломана?

5 голосов
/ 16 ноября 2011

Я пытаюсь играть в миди в браузере и использую Java-апплет, который отлично работает на ПК.Это крайне ненадежно для 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 в браузере, я весь в ушах!

Ответы [ 2 ]

4 голосов
/ 24 ноября 2012

Это, похоже, проблема из двух частей.Я тоже не мог отправить Midi Sysex, используя iMac, оснащенный OSX 10.7.5 середины 2011 года.Я нашел обходной путь - во-первых, мне пришлось использовать mmj jar и jnilib's, а во-вторых, я должен был указать моему коду использовать временные метки -1 и НЕ использовать system.currentTimeMillis ().В моем случае я отправляю сообщения sysex в реальном времени, поэтому временная метка -1 работает для меня.Я не знаю, какую временную метку использовать, если вы имеете дело с включением / выключением миди-ноты и т. Д. Может быть, это временная метка в миллисекундах в будущем?Я не знаю.Но я знаю, что мне пришлось использовать оба mmj и лучше контролировать свои метки времени.После этого все работает как положено.

3 голосов
/ 18 ноября 2011

From mmj - Midi для Java в Mac OS X :

Реализация Java в Midi от Apple кажется немного нерешительной. Он не считает MIDI-данные с байтами состояния> = 0xF0 действительными (т.е. не работает с sysex, MIDI-часами, временным кодом и т. Д.), Игнорирует временные метки для событий Midi, имена устройств по умолчанию будут иметь только имя порта (без подсказок для устройство, к которому принадлежит этот порт), и могут отсутствовать другие вещи.

Ситуация в OS X выглядит крайне миди, хотя этот API предлагается в качестве замены.

...