public interface Synthesizer extends MidiDevice
Synthesizer
产生声音。
当之一这通常发生Synthesizer
的MidiChannel
个对象接收noteOn
消息,无论是直接或经由Synthesizer
对象。
许多Synthesizer
支持Receivers
,通过它可以将MIDI事件传送到Synthesizer
。
在这种情况下, Synthesizer
典型地通过发送相应的消息到适当的响应MidiChannel
,或通过处理事件本身,如果事件不是MIDI信道消息中的一个。
Synthesizer
界面包括从声音库装载和卸载乐器的方法。 仪器是合成某种声音的规范,无论该声音是仿效传统乐器还是某种音效或其他虚构声音。 声音库是由银行和节目编号(通过仪器的Patch
对象)组织的Patch
集合。 不同的Synthesizer
类可以实现不同的声音合成技术,这意味着一些乐器而不是其他乐器可能与给定的合成器兼容。 此外,合成器可能对仪器具有有限的存储空间,这意味着即使合成技术是兼容的,并不是每个合成器都可以使用每个声音库和仪器。 看是否从某个音库的仪器可以通过一个给定的合成器上播放,调用isSoundbankSupported
的方法Synthesizer
。
“装载”仪器意味着该仪器可用于合成笔记。 仪器被装载到由其Patch
对象指定的存储区和程序位置。 装载不一定意味着随后播放的音符将立即具有这个新装载的乐器的声音。 要使乐器演奏音符,合成器的一个MidiChannel
对象必须接收(或已收到)一个程序更改消息,导致该特定乐器的银行和节目号码被选中。
MidiDevice.Info
Modifier and Type | Method and Description |
---|---|
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加载指定补丁引用的
Soundbank 。
|
boolean |
remapInstrument(Instrument from, Instrument to)
重新配置仪器。
|
void |
unloadAllInstruments(Soundbank soundbank)
卸载指定的Soundbank中包含的所有
Soundbank 。
|
void |
unloadInstrument(Instrument instrument)
卸载特定的仪器。
|
void |
unloadInstruments(Soundbank soundbank, Patch[] patchList)
从指定的MIDI声音库中卸载指定补丁引用的乐器。
|
close, getDeviceInfo, getMaxReceivers, getMaxTransmitters, getMicrosecondPosition, getReceiver, getReceivers, getTransmitter, getTransmitters, isOpen, open
int getMaxPolyphony()
getVoiceStatus()
long getLatency()
虽然延迟以微秒表示,但合成器的实际测量延迟可能会在该分辨率表示的范围内变化。 例如,合成器可能具有几毫秒或更多的最坏情况延迟。
MidiChannel[] getChannels()
MidiChannel
,它接收该通道号发送的MIDI消息。
MIDI 1.0规范提供16个通道,因此此方法返回至少16个元素的数组。 但是,如果该合成器没有使用所有16个通道,则阵列的某些元素可能为null
,因此在使用之前应检查每个元素。
MidiChannel
由该管理对象Synthesizer
。
一些阵列元素可以是null
。
VoiceStatus[] getVoiceStatus()
Synthesizer
类不提供语音信息,则返回的数组将始终为长度0.否则,其长度总是等于getMaxPolyphony()
返回的getMaxPolyphony()
。
(有关合成器语音的说明,请参阅VoiceStatus
类描述。)
VoiceStatus
对象,提供有关相应合成器语音的信息
getMaxPolyphony()
, VoiceStatus
boolean isSoundbankSupported(Soundbank soundbank)
IllegalArgumentException
。
soundbank
- 查询支持的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()
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)
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)
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)
Soundbank getDefaultSoundbank()
null
如果不存在。
isSoundbankSupported(javax.sound.midi.Soundbank)
Instrument[] getAvailableInstruments()
请注意,您不要使用此方法找出当前加载到合成器上的仪器; 为此,您使用getLoadedInstruments()
。 该方法也不会指示可以加载到合成器上的所有仪器; 它只表示合成器附带的子集。 要了解是否可以加载另一台仪器,您可以调用isSoundbankSupported()
,如果仪器的Soundbank
支持,您可以尝试加载仪器。
getLoadedInstruments()
,
isSoundbankSupported(Soundbank)
,
loadInstrument(javax.sound.midi.Instrument)
Instrument[] getLoadedInstruments()
Synthesizer
。
loadInstrument(javax.sound.midi.Instrument)
,
getAvailableInstruments()
,
Soundbank.getInstruments()
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[])
void unloadAllInstruments(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[])
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()
void unloadInstruments(Soundbank soundbank, Patch[] patchList)
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[])