2012-03-05 3 views
0

В настоящее время я использую класс Receiver, который получает мои Midi Events с моей MIDI-клавиатуры.Java Midi Receiver и время календаря в Millis

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

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

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

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

ответ

1

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

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


EDIT:

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

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

Спасибо за ваш ответ x-zero. Как мне поменять календарь (или даже дату) на миллисекунды, чтобы соответствовать разрешению метки времени Receiver.send()? –