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)
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.