javax.sound.midi

接口
异常
所有已知子接口:
Sequencer, Synthesizer

public interface MidiDevice

MidiDevice 是用于所有 MIDI 设备的基接口。常见的设备包括合成器、sequencer、MIDI 输入端口和 MIDI 输出端口。

MidiDevice 可以是 MIDI 事件的传输器或接收器,或同时为二者。因此,它可以提供 TransmitterReceiver 实例(或二者都提供)。通常情况下,MIDI IN 端口提供传输器,MIDI OUT 端口和合成器提供接收器。Sequencer 通常提供用于回放的传输器和用于录音的接收器。

MidiDevice 可显式打开和关闭,也可隐式打开和关闭。显式打开通过在 MidiDevice 实例上调用 open() 来实现,显式关闭通过在 MidiDevice 实例上调用 close() 来实现。如果应用程序显式打开了 MidiDevice,则也必须显式地将其关闭,以释放系统资源和允许应用程序完全退出。隐式打开通过调用 MidiSystem.getReceiverMidiSystem.getTransmitter 实现。由 MidiSystem.getReceiverMidiSystem.getTransmitter 使用的 MidiDevice 与实现相关,除非使用了属性 javax.sound.midi.Receiverjavax.sound.midi.Transmitter(请参见 MidiSystem 中对用于选择默认提供者的属性的描述)。对隐式打开的 MidiDevice 可隐式关闭它,方法是关闭打开它所得到的 ReceiverTransmitter。如果应用程序获得了多个隐式打开的 ReceiverTransmitter,则在关闭最后一个 ReceiverTransmitter 后才关闭设备。另一方面,直接在设备实例上调用 getReceivergetTransmitter 并不会隐式打开此设备。关闭这些 TransmitterReceiver 并不隐式关闭设备。要使用其 ReceiverTransmitter 以这样的方式获得的设备,必须显式打开和关闭此设备。

如果在同一 MidiDevice 实例上混用隐式和显式的打开和关闭,则应用以下规则:

  • 显式打开(在隐式打开之前或之后)后,设备将无法使用隐式关闭方式关闭。关闭显式打开设备的唯一方式是显式关闭。
  • 显式关闭总会关闭设备,即使设备曾经隐式打开也是如此。后续的隐式关闭没有任何效果。
要检测一个 MidiDevice 是否代表一个硬件 MIDI 端口,可使用以下编程技巧:
 MidiDevice device = ...;
 if ( ! (device instanceof Sequencer) && ! (device instanceof Synthesizer)) {
   // we're now sure that device represents a MIDI port
   // ...
 }
 

MidiDevice 包括一个提供制造商信息和其他信息的 MidiDevice.Info 对象。

另请参见:
Synthesizer, Sequencer, Receiver, Transmitter

嵌套类摘要
static class MidiDevice.Info
          一个 MidiDevice.Info 对象,它包含了有关 MidiDevice 的各种数据,包括其名称、创建它的公司及描述性文本。
 
方法摘要
 void close()
          关闭设备,指示设备现在应释放任何正在使用的系统资源。
 MidiDevice.Info getDeviceInfo()
          获得有关设备的信息,其中包括包含了其名称、供应商和描述的 Java 类和 Strings
 int getMaxReceivers()
          获得该 MIDI 设备上用于接收 MIDI 数据的最大可用 MIDI IN 连接数。
 int getMaxTransmitters()
          获得该 MIDI 设备用于传输 MIDI 数据的最大可用 MIDI OUT 连接数。
 long getMicrosecondPosition()
          获得设备的当前时间戳,以微秒为单位。
 Receiver getReceiver()
          获得 MIDI 设备可通过其接收 MIDI 数据的 MIDI IN 接收器。
 List<Receiver> getReceivers()
          返回与该 MidiDevice 连接的所有当前活动的、非关闭的接收器。
 Transmitter getTransmitter()
          获得 MIDI 设备将从其传输 MIDI 数据的 MIDI OUT 连接。
 List<Transmitter> getTransmitters()
          返回与该 MidiDevice 连接的所有当前活动的、非关闭的传输器。
 boolean isOpen()
          报告设备是否为打开状态。
 void open()
          打开设备,指示它现在应获取任何所需的系统资源然后开始运行。
 

方法详细信息

getDeviceInfo

MidiDevice.Info getDeviceInfo()
获得有关设备的信息,其中包括包含了其名称、供应商和描述的 Java 类和 Strings

返回:
设备信息

open

void open()
          throws MidiUnavailableException
打开设备,指示它现在应获取任何所需的系统资源然后开始运行。

使用此调用显式打开设备的应用程序必须通过调用 close() 开关闭该设备。这样做对于释放系统资源和让应用程序完全退出很有必要。

注意,有些设备一旦关闭就无法重新打开。尝试重新打开这样的设备将始终返回一个 MidiUnavailableException。

抛出:
MidiUnavailableException - 如果由于资源限制而无法打开该设备。
SecurityException - 如果由于安全限制而无法打开该设备。
另请参见:
close(), isOpen()

close

void close()
关闭设备,指示设备现在应释放任何正在使用的系统资源。

从此设备打开的所有 ReceiverTransmitter 实例都将关闭。这包括通过 MidiSystem 获取的实例。

另请参见:
open(), isOpen()

isOpen

boolean isOpen()
报告设备是否为打开状态。

返回:
如果设备为打开状态,则返回 true,否则返回 false
另请参见:
open(), close()

getMicrosecondPosition

long getMicrosecondPosition()
获得设备的当前时间戳,以微秒为单位。如果设备支持时间戳,它应从设备一打开就从 0 开始计数,并以微秒为单位继续递增该时间戳,直到设备关闭为止。如果设备不支持时间戳,它应始终返回 -1。

返回:
设备的当前时间戳,以微秒为单位,如果设备不支持时间戳,则返回 -1。

getMaxReceivers

int getMaxReceivers()
获得该 MIDI 设备上用于接收 MIDI 数据的最大可用 MIDI IN 连接数。

返回:
最大 MIDI IN 连接数,如果有无限个连接可用,则返回 -1。

getMaxTransmitters

int getMaxTransmitters()
获得该 MIDI 设备用于传输 MIDI 数据的最大可用 MIDI OUT 连接数。

返回:
最大 MIDI OUT 连接数,如果有无限个连接可用,则返回 -1。

getReceiver

Receiver getReceiver()
                     throws MidiUnavailableException
获得 MIDI 设备可通过其接收 MIDI 数据的 MIDI IN 接收器。返回的接收器必须在应用程序结束使用后关闭。

使用此方法获得 Receiver 并不打开设备。要想能够使用该设备,必须通过调用 open() 将其显式打开。同理,关闭 Receiver 并不关闭设备。必须通过调用 close() 将其显式关闭。

返回:
供设备使用的接收器。
抛出:
MidiUnavailableException - 如果由于资源限制使接收器不可用
另请参见:
Receiver.close()

getReceivers

List<Receiver> getReceivers()
返回与该 MidiDevice 连接的所有当前活动的、非关闭的接收器。通过关闭接收器可将它从设备中移除。

返回:
已打开接收器的不可修改列表
从以下版本开始:
1.5

getTransmitter

Transmitter getTransmitter()
                           throws MidiUnavailableException
获得 MIDI 设备将从其传输 MIDI 数据的 MIDI OUT 连接。返回的传输器必须在应用程序结束使用后关闭。

使用此方法获得 Transmitter 并不打开设备。要想能够使用该设备,必须通过调用 open() 将其显式打开。同理,关闭 Transmitter 并不关闭设备。必须通过调用 close() 将其显式关闭。

返回:
供设备使用的一个 MIDI OUT 传输器。
抛出:
MidiUnavailableException - 如果由于资源限制使传输器不可用
另请参见:
Transmitter.close()

getTransmitters

List<Transmitter> getTransmitters()
返回与该 MidiDevice 连接的所有当前活动的、非关闭的传输器。通过关闭传输器可将它从设备中移除。

返回:
已打开传输器的不可修改列表
从以下版本开始:
1.5