- java.lang.Object
-
- javax.sound.midi.MidiSystem
-
public class MidiSystem extends Object
MidiSystem
类提供对已安装的MIDI系统资源的访问,包括合成器,音序器和MIDI输入和输出端口等设备。 典型的简单MIDI应用程序可能首先调用一个或多个MidiSystem
方法来了解安装了哪些设备并获取该应用程序所需的设备。该类还具有读取包含标准MIDI文件数据或音库的文件,流和URL的方法。 您可以在
MidiSystem
中查询指定MIDI文件的格式。你无法实例化
MidiSystem
; 所有方法都是静态的。属性可用于指定默认MIDI设备。 系统属性和属性文件都被考虑在内。 “sound.properties”属性文件是从特定于实现的位置读取的(通常是Java安装目录中的
MIDI System Property Keys Property Key Interface Affected Methodconf
目录)。 可选的“javax.sound.config.file”系统属性可用于指定将作为初始配置读取的属性文件。 如果属性同时存在于系统属性和属性文件中,则系统属性优先。 如果未指定,则在可用设备中选择合适的默认值。 属性文件的语法在Properties.load
中指定。 下表列出了可用的属性键以及考虑它们的方法:javax.sound.midi.Receiver
Receiver
getReceiver()
javax.sound.midi.Sequencer
Sequencer
getSequencer()
javax.sound.midi.Synthesizer
Synthesizer
getSynthesizer()
javax.sound.midi.Transmitter
Transmitter
getTransmitter()
MIDI device provider
类的完全限定名称。 设备名称与String
getName
方法返回的getName
MidiDevice.Info
。 可以省略类名或设备名。 如果仅指定了类名,则尾随哈希标记是可选的。如果指定了提供程序类,并且可以从已安装的提供程序中成功检索它,
MidiDevice.Info
从提供程序中检索MidiDevice.Info
对象的列表。 否则,或当这些设备不提供后续匹配时,将从getMidiDeviceInfo()
检索列表以包含所有可用的MidiDevice.Info
对象。如果指定了设备名称,则会搜索
MidiDevice.Info
对象的结果列表:将返回第一个具有匹配名称且其MidiDevice
实现相应接口的对象。 如果未找到匹配的MidiDevice.Info
对象,或未指定设备名称,则将返回结果列表中的第一个合适设备。 对于Sequencer和Synthesizer,如果设备实现了相应的接口,则该设备是合适的。 而对于Receiver和Transmitter,如果设备既不实现Sequencer也不实现Synthesizer,并且分别提供至少一个Receiver或Transmitter,则设备是合适的。例如,财产
javax.sound.midi.Receiver
一个值"com.sun.media.sound.MidiProvider#SunMIDI1"
将在下列后果getReceiver
叫做:如果类com.sun.media.sound.MidiProvider
在已安装的MIDI设备提供者列表存在,则第Receiver
与名器"SunMIDI1"
将被退回。 如果找不到,则无论名称如何,都将返回该提供商的第一个Receiver
。 如果没有,将返回所有设备列表中的第一个Receiver
,名称为"SunMIDI1"
(由getMidiDeviceInfo
返回),如果未找到,则返回可在所有设备列表中找到的第一个Receiver
。 如果失败,则抛出MidiUnavailableException
。
-
-
方法摘要
所有方法 静态方法 具体的方法 变量和类型 方法 描述 static MidiDevice
getMidiDevice(MidiDevice.Info info)
获得请求的MIDI设备。static MidiDevice.Info[]
getMidiDeviceInfo()
获得一组信息对象,表示系统上可用的所有MIDI设备的集合。static MidiFileFormat
getMidiFileFormat(File file)
获得指定的File
的MIDI文件格式。static MidiFileFormat
getMidiFileFormat(InputStream stream)
获得指定输入流中数据的MIDI文件格式。static MidiFileFormat
getMidiFileFormat(URL url)
获取指定URL中数据的MIDI文件格式。static int[]
getMidiFileTypes()
获得系统提供文件写入支持的MIDI文件类型集。static int[]
getMidiFileTypes(Sequence sequence)
获得系统可以从指定的序列写入的MIDI文件类型集。static Receiver
getReceiver()
从外部MIDI端口或其他默认设备获取MIDI接收器。static Sequence
getSequence(File file)
从指定的File
获取MIDI序列。static Sequence
getSequence(InputStream stream)
从指定的输入流中获取MIDI序列。static Sequence
getSequence(URL url)
从指定的URL获取MIDI序列。static Sequencer
getSequencer()
获得连接到默认设备的默认Sequencer
。static Sequencer
getSequencer(boolean connected)
获得默认值Sequencer
,可选择连接到默认设备。static Soundbank
getSoundbank(File file)
构造一个Soundbank
通过从指定的阅读它File
。static Soundbank
getSoundbank(InputStream stream)
通过从指定的流中读取它来构造MIDI声音库。static Soundbank
getSoundbank(URL url)
通过从指定的URL读取它来构造Soundbank
。static Synthesizer
getSynthesizer()
获得默认合成器。static Transmitter
getTransmitter()
从外部MIDI端口或其他默认信号源获取MIDI发送器。static boolean
isFileTypeSupported(int fileType)
指示系统是否提供对指定MIDI文件类型的文件写入支持。static boolean
isFileTypeSupported(int fileType, Sequence sequence)
指示是否可以从指示的序列中写入指定文件类型的MIDI文件。static int
write(Sequence in, int type, File out)
将表示所指示的MIDI文件类型的文件的字节流写入所提供的外部文件。static int
write(Sequence in, int fileType, OutputStream out)
将表示所指示的MIDI文件类型的文件的字节流写入所提供的输出流。
-
-
-
方法详细信息
-
getMidiDeviceInfo
public static MidiDevice.Info[] getMidiDeviceInfo()
获得一组信息对象,表示系统上可用的所有MIDI设备的集合。 然后,通过调用getMidiDevice
,可以使用返回的信息对象来获取相应的设备对象。- 结果
-
一组
MidiDevice.Info
对象,每个安装的MIDI设备一个。 如果未安装此类设备,则返回长度为0的数组。
-
getMidiDevice
public static MidiDevice getMidiDevice(MidiDevice.Info info) throws MidiUnavailableException
获得请求的MIDI设备。- 参数
-
info
- 表示所需设备的设备信息对象 - 结果
- 请求的设备
- 异常
-
MidiUnavailableException
- 如果由于资源限制而请求的设备不可用 -
IllegalArgumentException
- 如果info对象不代表系统上安装的MIDI设备 -
NullPointerException
- 如果info
是null
- 另请参见:
-
getMidiDeviceInfo()
-
getReceiver
public static Receiver getReceiver() throws MidiUnavailableException
从外部MIDI端口或其他默认设备获取MIDI接收器。 返回的接收器始终实现MidiDeviceReceiver
接口。如果定义了系统属性
javax.sound.midi.Receiver
或者在文件“sound.properties”中定义了该属性,则它用于标识提供默认接收器的设备。 有关详细信息,请参阅class description
。如果没有合适的MIDI端口,则从已安装的合成器中检索接收器。
如果默认设备提供的本机接收器未实现
MidiDeviceReceiver
接口,则它将封装在实现MidiDeviceReceiver
接口的包装器类中。 相应的Receiver
方法调用将被转发到本机接收器。如果此方法成功返回,则Receiver所属的
Receiver
将被隐式打开(如果尚未打开)。 可以通过在返回的Receiver
上调用close
来关闭隐式打开的设备。 必须关闭所有打开的Receiver
实例才能释放MidiDevice
保留的系统资源。 有关打开/关闭行为的详细说明,请参阅MidiDevice
的类说明。- 结果
- 默认的MIDI接收器
- 异常
-
MidiUnavailableException
- 如果由于资源限制而无法使用默认接收器,或者系统中未安装任何提供接收器的设备
-
getTransmitter
public static Transmitter getTransmitter() throws MidiUnavailableException
从外部MIDI端口或其他默认信号源获取MIDI发送器。 返回的变送器始终实现MidiDeviceTransmitter
接口。如果定义了系统属性
javax.sound.midi.Transmitter
,或者在文件“sound.properties”中定义了该属性,则它用于标识提供默认发送器的设备。 有关详细信息,请参阅class description
。如果默认设备提供的本机发送器未实现
MidiDeviceTransmitter
接口,则它将封装在实现MidiDeviceTransmitter
接口的包装器类中。 相应的Transmitter
方法调用将被转发到本机发送器。如果此方法成功返回,则Transmitter所属的
Transmitter
将被隐式打开,如果它尚未打开。 可以通过在返回的Transmitter
上调用close
来关闭隐式打开的设备。 必须关闭所有打开的Transmitter
实例才能释放MidiDevice
保留的系统资源。 有关打开/关闭行为的详细说明,请参阅MidiDevice
的类说明。- 结果
- 默认的MIDI发射器
- 异常
-
MidiUnavailableException
- 如果由于资源限制而无法使用默认发送器,或者系统中未安装任何提供发送器的设备
-
getSynthesizer
public static Synthesizer getSynthesizer() throws MidiUnavailableException
获得默认合成器。如果定义了系统属性
javax.sound.midi.Synthesizer
或在文件“sound.properties”中定义了它,则它用于标识默认合成器。 有关详细信息,请参阅class description
。- 结果
- 默认的合成器
- 异常
-
MidiUnavailableException
- 如果由于资源限制导致合成器不可用,或者系统中未安装合成器
-
getSequencer
public static Sequencer getSequencer() throws MidiUnavailableException
获得连接到默认设备的默认Sequencer
。 返回的Sequencer
实例已连接到默认值Synthesizer
,由getSynthesizer()
返回。 如果没有Synthesizer
可用,或者无法打开默认Synthesizer
,则sequencer
连接到默认Receiver
,由getReceiver()
返回。 通过从Sequencer
检索Transmitter
实例并设置其Receiver
建立Receiver
。 关闭并重新打开顺控程序将恢复与默认设备的连接。此方法相当于调用
getSequencer(true)
。如果定义了系统属性
javax.sound.midi.Sequencer
或者在文件“sound.properties”中定义了该属性,则它用于标识默认顺控程序。 有关详细信息,请参阅class description
。- 结果
- 默认音序器,连接到默认接收器
- 异常
-
MidiUnavailableException
-如果序不可由于资源限制,或者没有Receiver
可通过任何安装MidiDevice
,或无定序器安装在系统 - 另请参见:
-
getSequencer(boolean)
,getSynthesizer()
,getReceiver()
-
getSequencer
public static Sequencer getSequencer(boolean connected) throws MidiUnavailableException
获得默认值Sequencer
,可选择连接到默认设备。如果
connected
为true,则返回的Sequencer
实例将连接到默认值Synthesizer
,由getSynthesizer()
返回。 如果没有可用的Synthesizer
,或者无法打开默认的Synthesizer
,则sequencer
连接到默认Receiver
,由getReceiver()
返回。 通过从Sequencer
检索Transmitter
实例并设置其Receiver
建立Receiver
。 关闭并重新打开顺控程序将恢复与默认设备的连接。如果
connected
为false,则返回的Sequencer
实例未连接,它没有打开Transmitters
。 要在MIDI设备或Synthesizer
上播放音序器,必须获得Transmitter
并设置其Receiver
。如果定义了系统属性
javax.sound.midi.Sequencer
,或者在文件“sound.properties”中定义了该属性,则它用于标识默认顺控程序。 有关详细信息,请参阅class description
。- 参数
-
connected
- 无论返回的Sequencer
是否已连接到默认值Synthesizer
- 结果
- 默认音序器
- 异常
-
MidiUnavailableException
- 如果由于资源限制而无法使用顺控程序,或者系统中未安装顺控程序,或者如果connected
为真,并且任何已安装的程序没有Receiver
MidiDevice
- 从以下版本开始:
- 1.5
- 另请参见:
-
getSynthesizer()
,getReceiver()
-
getSoundbank
public static Soundbank getSoundbank(InputStream stream) throws InvalidMidiDataException, IOException
通过从指定的流中读取它来构造MIDI声音库。 流必须指向有效的MIDI音库文件。 通常,MIDI声音库提供者可能需要在确定它们是否支持它之前从流中读取一些数据。 这些解析器必须能够标记流,读取足够的数据以确定它们是否支持流,如果不支持,则将流的读指针重置为其原始位置。 如果输入流不支持此方法,则此方法可能会失败,并显示IOException
。- 参数
-
stream
- 声音库数据的来源 - 结果
- 声音库
- 异常
-
InvalidMidiDataException
- 如果流未指向系统识别的有效MIDI音库数据 -
IOException
- 如果加载IOException
库时发生I / O错误 -
NullPointerException
- 如果stream
是null
- 另请参见:
-
InputStream.markSupported()
,InputStream.mark(int)
-
getSoundbank
public static Soundbank getSoundbank(URL url) throws InvalidMidiDataException, IOException
通过从指定的URL读取它来构造Soundbank
。 URL必须指向有效的MIDI音库文件。- 参数
-
url
- 声音库数据的来源 - 结果
- 声音库
- 异常
-
InvalidMidiDataException
- 如果URL未指向系统识别的有效MIDI音库数据 -
IOException
- 如果加载IOException
库时发生I / O错误 -
NullPointerException
- 如果url
是null
-
getSoundbank
public static Soundbank getSoundbank(File file) throws InvalidMidiDataException, IOException
构造一个Soundbank
通过从指定的阅读它File
。File
必须指向有效的MIDI音库文件。- 参数
-
file
- 声音库数据的来源 - 结果
- 声音库
- 异常
-
InvalidMidiDataException
- 如果File
未指向系统识别的有效MIDI音库数据 -
IOException
- 如果加载IOException
库时发生I / O错误 -
NullPointerException
- 如果file
是null
-
getMidiFileFormat
public static MidiFileFormat getMidiFileFormat(InputStream stream) throws InvalidMidiDataException, IOException
获得指定输入流中数据的MIDI文件格式。 流必须指向系统识别的文件类型的有效MIDI文件数据。该方法和/或它调用的代码可能需要从流中读取一些数据以确定是否支持其数据格式。 因此,实现可能需要标记流,读取足够的数据以确定它是否是支持的格式,并将流的读指针重置为其原始位置。 如果输入流不允许这组操作,则此方法可能会失败,并显示
IOException
。此操作只能对可以由已安装的文件读取器解析的类型的文件成功。 如果没有安装兼容的文件阅读器,即使对于有效文件,它也可能失败
InvalidMidiDataException
。 如果安装了兼容的文件阅读器,它也将失败InvalidMidiDataException
,但在确定文件格式时遇到错误。- 参数
-
stream
- 应从中提取文件格式信息的输入流 - 结果
-
描述MIDI文件格式的
MidiFileFormat
对象 - 异常
-
InvalidMidiDataException
- 如果流未指向系统识别的有效MIDI文件数据 -
IOException
- 如果在访问流时发生I / O异常 -
NullPointerException
- 如果stream
是null
- 另请参见:
-
getMidiFileFormat(URL)
,getMidiFileFormat(File)
,InputStream.markSupported()
,InputStream.mark(int)
-
getMidiFileFormat
public static MidiFileFormat getMidiFileFormat(URL url) throws InvalidMidiDataException, IOException
获取指定URL中数据的MIDI文件格式。 URL必须指向系统识别的文件类型的有效MIDI文件数据。此操作只能对可以由已安装的文件读取器解析的类型的文件成功。 如果没有安装兼容的文件阅读器,即使对于有效文件,它也可能会失败
InvalidMidiDataException
。 如果安装了兼容的文件阅读器,它也将失败InvalidMidiDataException
,但在确定文件格式时遇到错误。- 参数
-
url
- 应从中提取文件格式信息的URL - 结果
-
描述MIDI文件格式的
MidiFileFormat
对象 - 异常
-
InvalidMidiDataException
- 如果URL未指向系统识别的有效MIDI文件数据 -
IOException
- 如果在访问URL时发生I / O异常 -
NullPointerException
- 如果url
是null
- 另请参见:
-
getMidiFileFormat(InputStream)
,getMidiFileFormat(File)
-
getMidiFileFormat
public static MidiFileFormat getMidiFileFormat(File file) throws InvalidMidiDataException, IOException
获得指定的File
的MIDI文件格式。File
必须指向系统识别的文件类型的有效MIDI文件数据。此操作只能对可以由已安装的文件读取器解析的类型的文件成功。 如果没有安装兼容的文件阅读器,即使对于有效文件,它也可能会失败
InvalidMidiDataException
。 如果安装了兼容的文件阅读器,它也将失败InvalidMidiDataException
,但在确定文件格式时遇到错误。- 参数
-
file
- 应从中提取文件格式信息的File
- 结果
-
描述MIDI文件格式的
MidiFileFormat
对象 - 异常
-
InvalidMidiDataException
- 如果File
未指向系统识别的有效MIDI文件数据 -
IOException
- 如果在访问文件时发生I / O异常 -
NullPointerException
- 如果file
是null
- 另请参见:
-
getMidiFileFormat(InputStream)
,getMidiFileFormat(URL)
-
getSequence
public static Sequence getSequence(InputStream stream) throws InvalidMidiDataException, IOException
从指定的输入流中获取MIDI序列。 流必须指向系统识别的文件类型的有效MIDI文件数据。该方法和/或它调用的代码可能需要从流中读取一些数据以确定是否支持其数据格式。 因此,实现可能需要标记流,读取足够的数据以确定它是否是支持的格式,并将流的读指针重置为其原始位置。 如果输入流不允许这组操作,则此方法可能会失败,并显示
IOException
。此操作只能对可以由已安装的文件读取器解析的类型的文件成功。 如果没有安装兼容的文件阅读器,即使对于有效文件,它也可能会失败
InvalidMidiDataException
。 如果安装了兼容的文件阅读器,它也将失败InvalidMidiDataException
,但在从文件数据构造Sequence
对象时遇到错误。- 参数
-
stream
-从该输入流Sequence
应当被构造 - 结果
-
基于输入流中包含的MIDI文件数据的
Sequence
对象 - 异常
-
InvalidMidiDataException
- 如果流未指向系统识别的有效MIDI文件数据 -
IOException
- 如果在访问流时发生I / O异常 -
NullPointerException
- 如果stream
是null
- 另请参见:
-
InputStream.markSupported()
,InputStream.mark(int)
-
getSequence
public static Sequence getSequence(URL url) throws InvalidMidiDataException, IOException
从指定的URL获取MIDI序列。 URL必须指向系统识别的文件类型的有效MIDI文件数据。此操作只能对可以由已安装的文件读取器解析的类型的文件成功。 如果没有安装兼容的文件阅读器,即使对于有效文件,它也可能会失败
InvalidMidiDataException
。 如果安装了兼容的文件阅读器,它也将失败InvalidMidiDataException
,但在从文件数据构造Sequence
对象时遇到错误。- 参数
-
url
-从该网址Sequence
应当建立 - 结果
-
基于URL指向的MIDI文件数据的
Sequence
对象 - 异常
-
InvalidMidiDataException
- 如果URL未指向系统识别的有效MIDI文件数据 -
IOException
- 如果在访问URL时发生I / O异常 -
NullPointerException
- 如果url
是null
-
getSequence
public static Sequence getSequence(File file) throws InvalidMidiDataException, IOException
从指定的File
获取MIDI序列。File
必须指向系统识别的文件类型的有效MIDI文件数据。此操作只能对可以由已安装的文件读取器解析的类型的文件成功。 如果没有安装兼容的文件阅读器,即使对于有效文件,它也可能失败
InvalidMidiDataException
。 如果安装了兼容的文件阅读器,它也将失败InvalidMidiDataException
,但在从文件数据构造Sequence
对象时遇到错误。- 参数
-
file
-所述File
从中Sequence
应当被构造 - 结果
-
一个
Sequence
对象,基于File指向的MIDI文件数据 - 异常
-
InvalidMidiDataException
- 如果文件未指向系统识别的有效MIDI文件数据 -
IOException
- 如果发生I / O异常 -
NullPointerException
- 如果file
是null
-
getMidiFileTypes
public static int[] getMidiFileTypes()
获得系统提供文件写入支持的MIDI文件类型集。- 结果
- 唯一文件类型的数组。 如果不支持任何文件类型,则返回长度为0的数组。
-
isFileTypeSupported
public static boolean isFileTypeSupported(int fileType)
指示系统是否提供对指定MIDI文件类型的文件写入支持。- 参数
-
fileType
- 要查询其写入功能的文件类型 - 结果
-
true
如果支持文件类型,否则为false
-
getMidiFileTypes
public static int[] getMidiFileTypes(Sequence sequence)
获得系统可以从指定的序列写入的MIDI文件类型集。- 参数
-
sequence
- 查询MIDI文件类型支持的序列 - 结果
- 唯一支持的文件类型集。 如果不支持任何文件类型,则返回长度为0的数组。
- 异常
-
NullPointerException
- 如果sequence
是null
-
isFileTypeSupported
public static boolean isFileTypeSupported(int fileType, Sequence sequence)
指示是否可以从指示的序列中写入指定文件类型的MIDI文件。- 参数
-
fileType
- 要查询其写入功能的文件类型 -
sequence
- 查询文件写入支持的序列 - 结果
-
true
如果此序列支持该文件类型,否则为false
- 异常
-
NullPointerException
- 如果sequence
是null
-
write
public static int write(Sequence in, int fileType, OutputStream out) throws IOException
将表示所指示的MIDI文件类型的文件的字节流写入所提供的输出流。- 参数
-
in
- 包含要写入文件的MIDI数据的序列 -
fileType
- 要写入输出流的文件的文件类型 -
out
- 应将文件数据写入的流 - 结果
- 写入输出流的字节数
- 异常
-
IOException
- 如果发生I / O异常 -
IllegalArgumentException
- 如果系统不支持文件格式 -
NullPointerException
- 如果in
或out
是null
- 另请参见:
-
isFileTypeSupported(int, Sequence)
,getMidiFileTypes(Sequence)
-
write
public static int write(Sequence in, int type, File out) throws IOException
将表示所指示的MIDI文件类型的文件的字节流写入所提供的外部文件。- 参数
-
in
- 包含要写入文件的MIDI数据的序列 -
type
- 要写入输出流的文件的文件类型 -
out
- 应将文件数据写入的外部文件 - 结果
- 写入文件的字节数
- 异常
-
IOException
- 如果发生I / O异常 -
IllegalArgumentException
- 如果系统不支持该文件类型 -
NullPointerException
- 如果in
或out
是null
- 另请参见:
-
isFileTypeSupported(int, Sequence)
,getMidiFileTypes(Sequence)
-
-