public interface MidiDevice
MidiDevice
是用于所有 MIDI 设备的基接口。常见的设备包括合成器、sequencer、MIDI 输入端口和 MIDI 输出端口。
MidiDevice
可以是 MIDI 事件的传输器或接收器,或同时为二者。因此,它可以提供 Transmitter
或 Receiver
实例(或二者都提供)。通常情况下,MIDI IN 端口提供传输器,MIDI OUT 端口和合成器提供接收器。Sequencer 通常提供用于回放的传输器和用于录音的接收器。
MidiDevice
可显式打开和关闭,也可隐式打开和关闭。显式打开通过在 MidiDevice
实例上调用 open()
来实现,显式关闭通过在 MidiDevice
实例上调用 close()
来实现。如果应用程序显式打开了 MidiDevice
,则也必须显式地将其关闭,以释放系统资源和允许应用程序完全退出。隐式打开通过调用 MidiSystem.getReceiver
和 MidiSystem.getTransmitter
实现。由 MidiSystem.getReceiver
和 MidiSystem.getTransmitter
使用的 MidiDevice
与实现相关,除非使用了属性 javax.sound.midi.Receiver
和 javax.sound.midi.Transmitter
(请参见 MidiSystem
中对用于选择默认提供者的属性的描述)。对隐式打开的 MidiDevice
可隐式关闭它,方法是关闭打开它所得到的 Receiver
或 Transmitter
。如果应用程序获得了多个隐式打开的 Receiver
或 Transmitter
,则在关闭最后一个 Receiver
或 Transmitter
后才关闭设备。另一方面,直接在设备实例上调用 getReceiver
或 getTransmitter
并不会隐式打开此设备。关闭这些 Transmitter
和 Receiver
并不隐式关闭设备。要使用其 Receiver
或 Transmitter
以这样的方式获得的设备,必须显式打开和关闭此设备。
如果在同一 MidiDevice
实例上混用隐式和显式的打开和关闭,则应用以下规则:
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 对象,它包含了有关 的各种数据,包括其名称、创建它的公司及描述性文本。 |
方法摘要 | |
---|---|
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() 打开设备,指示它现在应获取任何所需的系统资源然后开始运行。 |
方法详细信息 |
---|
MidiDevice.Info getDeviceInfo()
Strings
。
void open() throws MidiUnavailableException
使用此调用显式打开设备的应用程序必须通过调用 close()
开关闭该设备。这样做对于释放系统资源和让应用程序完全退出很有必要。
注意,有些设备一旦关闭就无法重新打开。尝试重新打开这样的设备将始终返回一个 MidiUnavailableException。
MidiUnavailableException
- 如果由于资源限制而无法打开该设备。
SecurityException
- 如果由于安全限制而无法打开该设备。
close()
,
isOpen()
void close()
从此设备打开的所有 Receiver
和 Transmitter
实例都将关闭。这包括通过 MidiSystem
获取的实例。
boolean isOpen()
long getMicrosecondPosition()
int getMaxReceivers()
int getMaxTransmitters()
Receiver getReceiver() throws MidiUnavailableException
使用此方法获得 Receiver
并不打开设备。要想能够使用该设备,必须通过调用 open()
将其显式打开。同理,关闭 Receiver
并不关闭设备。必须通过调用 close()
将其显式关闭。
MidiUnavailableException
- 如果由于资源限制使接收器不可用
Receiver.close()
List<Receiver> getReceivers()
Transmitter getTransmitter() throws MidiUnavailableException
使用此方法获得 Transmitter
并不打开设备。要想能够使用该设备,必须通过调用 open()
将其显式打开。同理,关闭 Transmitter
并不关闭设备。必须通过调用 close()
将其显式关闭。
MidiUnavailableException
- 如果由于资源限制使传输器不可用
Transmitter.close()
List<Transmitter> getTransmitters()