-
- All Superinterfaces:
-
AutoCloseable
,MidiDevice
public interface Synthesizer extends MidiDevice
ASynthesizer
产生声音。 当之一这通常发生Synthesizer
的MidiChannel
个对象接收noteOn
消息,无论是直接或经由Synthesizer
对象。 许多Synthesizer
支持Receivers
,通过这些MIDI事件可以传送到Synthesizer
。 在这种情况下,Synthesizer
通常通过向适当的MidiChannel
发送相应的消息或通过处理事件本身(如果事件不是MIDI通道消息之一)来进行响应。Synthesizer
接口包括从Synthesizer
库装载和卸载仪器的方法。 仪器是合成某种声音的规范,无论该声音是仿效传统乐器还是某种音效或其他虚构声音。 声音库是由银行和节目编号(通过仪器的Patch
对象)组织的乐器的Patch
。 不同的Synthesizer
类可以实现不同的声音合成技术,这意味着一些乐器而不是其他乐器可能与给定的合成器兼容。 此外,合成器可能对仪器具有有限的存储空间,这意味着即使合成技术是兼容的,并不是每个合成器都可以使用每个声音库和仪器。 看是否从某个音库的仪器可以通过一个给定的合成器上播放,调用isSoundbankSupported
的方法Synthesizer
。“装载”仪器意味着该仪器可用于合成笔记。 仪器被装载到由其
Patch
对象指定的存储区和程序位置。 装载不一定意味着随后播放的音符将立即具有这个新装载的乐器的声音。 要使乐器演奏音符,合成器的一个MidiChannel
对象必须接收(或已收到)一个程序更改消息,导致该特定乐器的银行和节目号码被选中。
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface javax.sound.midi.MidiDevice
MidiDevice.Info
-
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 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声音库中卸载指定补丁引用的乐器。-
Methods inherited from interface 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通道。 返回数组中的每个非空元素都是MidiChannel
,它接收该通道号发送的MIDI消息。MIDI 1.0规范提供16个通道,因此此方法返回至少16个元素的数组。 但是,如果该合成器没有使用所有16个通道,则阵列的某些元素可能为
null
,因此在使用之前应检查每个元素。- 结果
-
由该
Synthesizer
管理的MidiChannel
对象的数组。 一些数组元素可以是null
。
-
getVoiceStatus
VoiceStatus[] getVoiceStatus()
获取此合成器产生的声音的当前状态。 如果Synthesizer
类不提供语音信息,则返回的数组将始终为长度0.否则,其长度总是等于由getMaxPolyphony()
返回的getMaxPolyphony()
。 (有关合成器语音的说明,请参阅VoiceStatus
类描述。)- 结果
-
一组
VoiceStatus
对象,提供有关相应合成器语音的信息 - 另请参见:
-
getMaxPolyphony()
,VoiceStatus
-
isSoundbankSupported
boolean isSoundbankSupported(Soundbank soundbank)
通知呼叫者该合成器是否能够从指定的声音库加载仪器。 如果声音库不受支持,任何从其加载仪器的尝试将导致一个IllegalArgumentException
。- 参数
-
soundbank
- 查询支持的soundbank
- 结果
-
true
如果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
支持的Synthesizer
库的一部分。 (要确保,你可以使用getSoundbank
的方法Instrument
和isSoundbankSupported
的方法Synthesizer
)。- 参数
-
instrument
- 仪器加载 - 结果
-
true
如果仪器已成功加载(或已经),false
如果仪器无法加载(例如,如果合成器的内存不足以加载) - 异常
-
IllegalArgumentException
- 如果这个Synthesizer
不支持指定乐器的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
不支持指定乐器的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
- 如果请求的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
-soundbank
包含仪器卸载 - 异常
-
IllegalArgumentException
- 如果不支持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
- 如果不支持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
-soundbank
包含仪器卸载 -
patchList
- 应卸载仪器的补丁列表 - 异常
-
IllegalArgumentException
- 如果不支持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[])
-
-