Java sound api - 扫描midi设备
我正在开发一个java项目,它使用javax.sound.midi库从midi硬件接收midi事件。在文档中,它说
MidiSystem.getMidiDeviceInfo()
返回所有连接的midi硬件的列表。它适用于我,但问题是,它只能工作一次。第一次实际扫描设备需要花费一些时间,但每次在此之后,即使已连接新设备,它也会立即返回相同的列表。有没有办法强迫它重新扫描?如果重新启动应用程序,它将重新扫描,但我不希望我的用户在连接新的midi设备时必须重新启动。
顺便说一下,我正在使用Mac OS X ......有人指出,不同操作系统的行为可能会有所不同。
没有找到相关结果
已邀请:
4 个回复
了驳
获取完整的提供者列表,并从每个提供者中提取设备的信息。 通过静态方法
从JDK底层类com.sun.media.sound.JDK13Services恢复MIDI提供程序列表 public static synchronized List getProviders(Class serviceClass) 获得包含已安装的List 提供者的实例 要求的服务。清单 提供程序缓存期间 时间由cachingPeriod给出。中 这个时期,同一个List实例是 返回相同类型的 供应商。在此期间,一个新的 构造并返回实例。 返回的List是不可变的。 所以,似乎这个类在缓存中保存了提供者列表,在一段时间后将重新加载。您可以使用方法
将此期间设置为自定义值。只要我知道,默认缓存时间设置为60秒。 例如,要每秒刷新此缓存,您可以将此行添加到您的代码中:
请注意,此解决方案使用Sun专属类,因此无法100%移植。
导力疵谜
来查找系统上的设备列表。该类的API文档声明该列表是在
之外的连续调用中重新创建的,可以通过调用
方便地设置。 运气好的话,你可以在应用程序开始时调用它一次,然后将它设置为5秒或者其他东西,它会神奇地工作。但是,文档还声明“此方法仅用于测试。”因此我不确定这种方法的效果如何。 希望这足以让你开始,在此期间我会继续探索,看看我是否能找到更清洁的方法来做到这一点。
雇砰
犀耽澄协吻