Миди-ресивер Java и календарное время в Миллисе - PullRequest
0 голосов
/ 05 марта 2012

В настоящее время я использую класс Receiver, который получает события Midi с клавиатуры Midi.

С каждым событием метод send() возвращает некоторую информацию вместе с timestamp MidiEvent.

Когда я создаю экземпляр Calendar и getTimeInMillis(), я получаю совершенно другое число с отметкой времени Receiver's. Разница между этими двумя значениями меняется каждый раз, поэтому я знаю, что это не просто постоянное значение.

Есть ли способ получить значение отметки времени Receiver's в любое время без использования метода Receiver's send()?

Под этим я подразумеваю получение метки времени в методе, который следует той же шкале времени, что и метка времени Receiver's.

1 Ответ

1 голос
/ 05 марта 2012

Я полагаю, что вы, возможно, ошибаетесь - значение временной метки, которую ожидает Receiver.send(), составляет микросекунды , а не миллисекунды, как в Calendar. Это означает, что вы находитесь в 1000 раз, что может показаться «постоянно меняющимся значением».

Я не знаю, хотите ли вы просто уменьшить разрешение ваших временных меток или использовать микросекунды. Это будет зависеть от точного характера вашего приложения, данных, которые вы получаете в своих сообщениях, и того, что вы хотите с ними делать.

<ч />

РЕДАКТИРОВАТЬ:

Это основано на предположении, что вы получаете данные, а не что вы заполняете значение метки времени.
Если вам нужно сохранить разрешение, вот несколько вариантов:

  1. Используйте java.sql.Timestamp подкласс Date. Это может хранить разрешение вплоть до наносекунд (больше, чем вам нужно). Однако все стандартные утилиты дат в библиотеке имеют странное поведение, и пространство имен, возможно, далеко не идеальное.
  2. Напишите свой собственный JRE / JDK / JVM. Calendar и Date являются частью стандартной библиотеки. Если вы хотите распространять свой код, вы должны ожидать, что люди будут использовать вашу версию стандартной библиотеки. Это нежелательно по большому количеству причин.
  3. Найти / написать собственный класс типа отметки времени. Вероятно, есть аудио библиотеки, которые имеют соответствующую реализацию. Если вам действительно нужно написать свой собственный, я бы, вероятно, взял код из Joda Time и просто изменил бы разрешение - хотя это все равно было бы неплохой работой.
  4. Просто оставьте значение в качестве примитива. В конце концов, вряд ли вам нужно что-то большее, чем числовые значения (не то, что вам нужно переводить значения года-месяца-дня). Хотя для этого было бы хорошо иметь безопасность типов, особенно в свете различий в разрешении. Если это не соответствует вашему варианту использования, извините.
...