Milli中的Java Midi接收器和日历时间

时间:2012-03-05 15:39:16

标签: java calendar midi

我目前使用Receiver课程,从我的Midi键盘接收我的Midi事件。

对于每个事件,send()方法返回一些信息以及MidiEvent的timestamp

当我创建Calendar实例和getTimeInMillis()时,我得到一个与Receiver's时间戳完全不同的数字。两个值的差异每次都在变化,所以我知道它不仅仅是一个常数值。

有没有办法在不通过Receiver's Receiver's方法的情况下随时获取send()时间戳值?

我的意思是在一个方法中获得一个时间戳,该方法遵循与Receiver's时间戳相同的时间刻度。

1 个答案:

答案 0 :(得分:1)

我相信你可能会误解操作 - 时间戳Receiver.send()的预期值是微秒,而不是Calendar中的毫秒。这意味着你的价格会下降1000倍,这似乎是一个“不断变化的价值”。

我不知道您是想减少时间戳的分辨率,还是使用微秒。这取决于您的应用程序的确切性质,您在邮件中获得的数据以及您希望如何处理这些数据。


编辑:

这是基于您接收数据的假设,而不是您正在填充时间戳值。
如果您需要保留分辨率,可以选择以下选项:

  1. 使用java.sql.Timestamp的{​​{1}}子类。这可以将分辨率存储到纳秒(比您需要的更多)。但是,库中的所有标准日期实用程序都有一些奇怪的行为,并且命名空间可能不太理想。
  2. 编写自己的JRE / JDK / JVM。 DateCalendar是标准库的一部分。如果要分发代码,则必须要求人们使用标准库的版本。由于种种原因,这是不可取的。
  3. 查找/编写您自己的时间戳类型。可能有音频库具有相关的实现。如果你必须自己写,我可能会从Joda Time获取代码,只是改变分辨率 - 但这仍然是一项相当大的工作。
  4. 只需将值保留为原语。毕竟,你不太可能需要比数值更多的东西(不像你需要翻译成年月月值)。虽然为此具有类型安全性会很好,特别是考虑到分辨率差异。如果这与您的用例不符,我很抱歉。