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