-
- All Superinterfaces:
-
AutoCloseable
,MidiDevice
public interface Synthesizer extends MidiDevice
ASynthesizer
产生声音。 当之一这通常发生Synthesizer
的MidiChannel
个对象接收noteOn
消息,无论是直接或经由Synthesizer
对象。 许多Synthesizer
支持Receivers
,通过它可以将MIDI事件传送到Synthesizer
。 在这种情况下,Synthesizer
通常通过向相应的Synthesizer
发送相应的消息来MidiChannel
,或者如果事件不是MIDI通道消息之一,则通过处理事件本身来响应。Synthesizer
接口包括从Synthesizer
库加载和卸载仪器的方法。 乐器是用于合成特定类型声音的规范,无论该声音是模仿传统乐器还是某种声音效果或其他想象声音。 音库是一组乐器,按银行和程序编号组织(通过乐器的Patch
对象)。 不同的Synthesizer
类可能实现不同的声音合成技术,这意味着某些乐器而非其他乐器可能与给定的合成器兼容。 此外,合成器对于乐器可能具有有限的存储器量,这意味着即使合成技术兼容,并非每个合成器都可以使用每个声音库和乐器。 看是否从某个音库的仪器可以通过一个给定的合成器上播放,调用isSoundbankSupported
的方法Synthesizer
。“加载”乐器意味着该乐器可用于合成音符。 仪器将加载到由其
Patch
对象指定的库和程序位置。 加载并不一定意味着随后播放的音符将立即具有此新装载乐器的声音。 要使乐器演奏音符,合成器的其中一个MidiChannel
对象必须接收(或已收到)程序更改消息,该消息将导致选择特定乐器的库和程序编号。
-
-
嵌套类汇总
-
Nested classes/interfaces declared in interface javax.sound.midi.MidiDevice
MidiDevice.Info
-
-
方法摘要
所有方法 实例方法 抽象方法 变量和类型 方法 描述 Instrument[]
getAvailableInstruments()
获得合成器附带的乐器列表。MidiChannel[]
getChannels()
获得此合成器控制的MIDI通道组。Soundbank
getDefaultSoundbank()
获得合成器的默认音库(如果存在)。long
getLatency()
获得此合成器引起的处理延迟,以微秒表示。Instrument[]
getLoadedInstruments()
获得当前加载到此Synthesizer
上的仪器列表。int
getMaxPolyphony()
获得此合成器可同时发声的最大音符数。VoiceStatus[]
getVoiceStatus()
获得此合成器产生的声音的当前状态。boolean
isSoundbankSupported(Soundbank soundbank)
通知呼叫者该合成器是否能够从指定的音库加载乐器。boolean
loadAllInstruments(Soundbank soundbank)
装载到Synthesizer
包含在指定的所有仪器Soundbank
。boolean
loadInstrument(Instrument instrument)
使特定仪器可用于合成。boolean
loadInstruments(Soundbank soundbank, Patch[] patchList)
从指定的Soundbank
加载指定补丁引用的仪器。boolean
remapInstrument(Instrument from, Instrument to)
重新制作乐器。void
unloadAllInstruments(Soundbank soundbank)
卸载指定的Soundbank
包含的所有仪器。void
unloadInstrument(Instrument instrument)
卸载特定的乐器。void
unloadInstruments(Soundbank soundbank, Patch[] patchList)
从指定的MIDI声音库中卸载指定音色引用的乐器。-
声明方法的接口 javax.sound.midi.MidiDevice
close, getDeviceInfo, getMaxReceivers, getMaxTransmitters, getMicrosecondPosition, getReceiver, getReceivers, getTransmitter, getTransmitters, isOpen, open
-
-
-
-
方法详细信息
-
getMaxPolyphony
int getMaxPolyphony()
获得此合成器可同时发声的最大音符数。- 结果
- 最大同时记录数
- 另请参见:
-
getVoiceStatus()
-
getLatency
long getLatency()
获得此合成器引起的处理延迟,以微秒表示。 此延迟测量MIDI信息传送到合成器的时间与合成器实际产生相应结果的时间之间的最坏情况延迟。尽管延迟以微秒表示,但合成器的实际测量延迟可能会在比此分辨率建议的范围更广的范围内变化。 例如,合成器可能具有几毫秒或更长的最坏情况延迟。
- 结果
- 最坏情况的延迟,以微秒为单位
-
getChannels
MidiChannel[] getChannels()
获得此合成器控制的MIDI通道组。 返回数组中的每个非null元素都是MidiChannel
,它接收在该通道号上发送的MIDI消息。MIDI 1.0规范提供16个通道,因此该方法返回至少16个元素的数组。 但是,如果此合成器不使用所有16个通道,则阵列的某些元素可能是
null
,因此您应该在使用之前检查每个元素。- 结果
-
所述的数组
MidiChannel
由该管理对象Synthesizer
。 一些数组元素可以是null
。
-
getVoiceStatus
VoiceStatus[] getVoiceStatus()
获得此合成器产生的声音的当前状态。 如果此类Synthesizer
不提供语音信息,则返回的数组的长度始终为0.否则,其长度始终等于getMaxPolyphony()
返回的getMaxPolyphony()
。 (有关合成器声音的说明,请参阅VoiceStatus
类说明。)- 结果
-
一组
VoiceStatus
对象,提供有关相应合成器语音的信息 - 另请参见:
-
getMaxPolyphony()
,VoiceStatus
-
isSoundbankSupported
boolean isSoundbankSupported(Soundbank soundbank)
通知呼叫者该合成器是否能够从指定的音库加载乐器。 如果声音库不受支持,任何从中加载乐器的尝试都将导致IllegalArgumentException
。- 参数
-
soundbank
- 查询支持的音库 - 结果
-
true
如果支持音库,否则为false
- 另请参见:
-
loadInstruments(javax.sound.midi.Soundbank, javax.sound.midi.Patch[])
,loadAllInstruments(javax.sound.midi.Soundbank)
,unloadInstruments(javax.sound.midi.Soundbank, javax.sound.midi.Patch[])
,unloadAllInstruments(javax.sound.midi.Soundbank)
,getDefaultSoundbank()
-
loadInstrument
boolean loadInstrument(Instrument instrument)
使特定仪器可用于合成。 此仪器加载到其Patch
对象指定的补丁位置,因此如果接收到(或已收到)程序更改消息导致选择该补丁,则将使用instrument
的声音播放后续音符。 如果已加载指定的仪器,则此方法不执行任何操作并返回true
。该乐器必须是此
Synthesizer
支持的音库的一部分。 (为了确保,您可以使用getSoundbank
方法Instrument
和isSoundbankSupported
方法Synthesizer
)- 参数
-
instrument
- 要加载的仪器 - 结果
-
true
如果仪器成功加载(或已经加载),false
如果仪器无法加载(例如,如果合成器没有足够的内存来加载它) - 异常
-
IllegalArgumentException
- 如果此Synthesizer
不支持指定乐器的音库 - 另请参见:
-
unloadInstrument(javax.sound.midi.Instrument)
,loadInstruments(javax.sound.midi.Soundbank, javax.sound.midi.Patch[])
,loadAllInstruments(javax.sound.midi.Soundbank)
,remapInstrument(javax.sound.midi.Instrument, javax.sound.midi.Instrument)
,SoundbankResource.getSoundbank()
,MidiChannel.programChange(int, int)
-
unloadInstrument
void unloadInstrument(Instrument instrument)
卸载特定的乐器。- 参数
-
instrument
- 要卸载的仪器 - 异常
-
IllegalArgumentException
- 如果此Synthesizer
不支持指定乐器的音库 - 另请参见:
-
loadInstrument(javax.sound.midi.Instrument)
,unloadInstruments(javax.sound.midi.Soundbank, javax.sound.midi.Patch[])
,unloadAllInstruments(javax.sound.midi.Soundbank)
,getLoadedInstruments()
,remapInstrument(javax.sound.midi.Instrument, javax.sound.midi.Instrument)
-
remapInstrument
boolean remapInstrument(Instrument from, Instrument to)
重新制作乐器。 仪器to
取代仪器from
。
例如,如果from
位于银行编号2,程序编号11,则重新映射会导致该银行和程序位置被to
占用。
如果功能成功,则卸载仪器from
。要取消重新映射重载仪器
from
通过调用之一loadInstrument(javax.sound.midi.Instrument)
,loadInstruments(javax.sound.midi.Soundbank, javax.sound.midi.Patch[])
或loadAllInstruments(javax.sound.midi.Soundbank)
。- 参数
-
from
- 要替换的Instrument
对象 -
to
- 用于代替旧仪器的Instrument
对象,应将其加载到合成器中 - 结果
-
true
如果仪器成功重映射,false
如果功能未由合成器实现 - 异常
-
IllegalArgumentException
- 如果合成器不支持仪器from
或仪器to
或未加载仪器to
-
NullPointerException
- 如果from
或to
参数具有空值 - 另请参见:
-
loadInstrument(javax.sound.midi.Instrument)
,loadInstruments(javax.sound.midi.Soundbank, javax.sound.midi.Patch[])
,loadAllInstruments(javax.sound.midi.Soundbank)
-
getDefaultSoundbank
Soundbank getDefaultSoundbank()
获得合成器的默认音库(如果存在)。 (某些合成器提供默认或内置音库。)如果合成器没有默认音库,则必须从外部音库明确加载乐器。- 结果
-
默认
null
库,如果不存在null
- 另请参见:
-
isSoundbankSupported(javax.sound.midi.Soundbank)
-
getAvailableInstruments
Instrument[] getAvailableInstruments()
获得合成器附带的乐器列表。 这些乐器可能内置于合成器中,或者它们可能是合成器提供的默认音库的一部分,等等。请注意,您不使用此方法来确定当前加载到合成器上的乐器; 为此,请使用
getLoadedInstruments()
。 该方法也没有表明可以加载到合成器上的所有仪器; 它仅表示合成器附带的子集。 要了解是否可以加载其他乐器,可以调用isSoundbankSupported()
,如果支持乐器的Soundbank
则可以尝试加载乐器。- 结果
- 可用工具清单。 如果合成器没有随附的乐器,则返回长度为0的数组。
- 另请参见:
-
getLoadedInstruments()
,isSoundbankSupported(Soundbank)
,loadInstrument(javax.sound.midi.Instrument)
-
getLoadedInstruments
Instrument[] getLoadedInstruments()
获取当前加载到此Synthesizer
上的仪器列表。- 结果
- 当前加载的工具列表
- 另请参见:
-
loadInstrument(javax.sound.midi.Instrument)
,getAvailableInstruments()
,Soundbank.getInstruments()
-
loadAllInstruments
boolean loadAllInstruments(Soundbank soundbank)
将Synthesizer
包含的所有仪器加载到Soundbank
。- 参数
-
soundbank
- 要装入仪器的Soundbank
- 结果
-
true
如果仪器全部成功加载(或已经加载),false
如果无法加载任何仪器(例如,如果Synthesizer
内存不足) - 异常
-
IllegalArgumentException
- 如果请求的音库与此合成器不兼容 - 另请参见:
-
isSoundbankSupported(javax.sound.midi.Soundbank)
,loadInstrument(javax.sound.midi.Instrument)
,loadInstruments(javax.sound.midi.Soundbank, javax.sound.midi.Patch[])
-
unloadAllInstruments
void unloadAllInstruments(Soundbank soundbank)
卸载指定的Soundbank
包含的所有仪器。- 参数
-
soundbank
- 包含卸载仪器的音库 - 异常
-
IllegalArgumentException
- 如果不支持音库,则抛出 - 另请参见:
-
isSoundbankSupported(javax.sound.midi.Soundbank)
,unloadInstrument(javax.sound.midi.Instrument)
,unloadInstruments(javax.sound.midi.Soundbank, javax.sound.midi.Patch[])
-
loadInstruments
boolean loadInstruments(Soundbank soundbank, Patch[] patchList)
从指定的Soundbank
加载指定补丁引用的仪器。Patch
对象中的每一个都表示银行和程序编号; 该Instrument
具有匹配Patch
被加载到库和程序位置。- 参数
-
soundbank
- 包含要加载的仪器的Soundbank
-
patchList
- 应加载仪器的补丁列表 - 结果
-
true
如果仪器全部成功加载(或已经加载),false
如果无法加载任何仪器(例如,如果Synthesizer
内存不足) - 异常
-
IllegalArgumentException
- 如果不支持音库,则抛出 - 另请参见:
-
isSoundbankSupported(javax.sound.midi.Soundbank)
,Instrument.getPatch()
,loadAllInstruments(javax.sound.midi.Soundbank)
,loadInstrument(javax.sound.midi.Instrument)
,Soundbank.getInstrument(Patch)
,Sequence.getPatchList()
-
unloadInstruments
void unloadInstruments(Soundbank soundbank, Patch[] patchList)
从指定的MIDI声音库中卸载指定音色引用的乐器。- 参数
-
soundbank
- 包含卸载仪器的音库 -
patchList
- 应卸载仪器的修补程序列表 - 异常
-
IllegalArgumentException
- 如果不支持音库,则抛出 - 另请参见:
-
unloadInstrument(javax.sound.midi.Instrument)
,unloadAllInstruments(javax.sound.midi.Soundbank)
,isSoundbankSupported(javax.sound.midi.Soundbank)
,Instrument.getPatch()
,loadInstruments(javax.sound.midi.Soundbank, javax.sound.midi.Patch[])
-
-