java.lang.Object javax.sound.midi.VoiceStatus
public class VoiceStatus
VoiceStatus
对象包含有关由 Synthesizer
生成的某个声音当前状态的信息。
MIDI 合成器通常能够生成最多的同步发声音符数,也称为声音。声音是连续的单音符流,将到来的 MIDI 音符分配给特定声音的过程即所谓的声音分配。但是,声音分配算法和每个声音的内容通常只存在于 MIDI 合成器内部,对外隐藏。当然,我们可以从 MIDI 消息了解合成器正在演奏的音符,并可能推断出一些声音中的音符分配信息。但是 MIDI 本身并未提供一种报告合成器将哪个音符分配给哪种声音的方式,甚至都未报告合成器能够合成的声音数。
但在 Java Sound 中,Synthesizer
类可通过其 getVoiceStatus()
方法公开其声音的内容。建议使用此行为,但这是可选的;不公开其声音分配的合成器仅返回一个长度为零的数组。确实报告其声音状态的 Synthesizer
应对其所有声音一直维护此信息,无论该声音当前是否发出。换句话说,给定类型的 Synthesizer
始终具有固定数量的声音,等于它能够发声的最大同步音符数。
如果该声音当前不处理 MIDI 音符,则视其为非活动的。在未给定任何 note-on 命令时,或在接收到的每个 note-on 命令已通过相应的 note-off(或通过一个“关闭所有音符”消息)中止时,该声音为非活动的。例如,发生这种情形的条件是:让一个能够演奏 16 个同步发声音符的合成器演奏一个四音符和弦;这种情况下,只有四种声音为活动的(假定没有演奏以前的音符)。通常,一个状态报告为活动的声音生成可听到的声音,但是并非总是如此;这还取决于乐器的细节(即合成算法)和音符已持续的时间。例如,一个声音可合成单击掌声。由于此声消失速度太快,所以它可能在收到 note-off 消息前变得无法听到。此时,该声音仍视为活动的,即使当前不生成任何声音。
除了活动或非活动状态,VoiceStatus
类还提供了显示声音当前 MIDI 通道、库和程序号、MIDI 音符号和 MIDI 音量的字段。所有这些内容都可在声音过程中更改。声音为非活动时,这些字段中每个字段都有一个未指定的值,所以应首先检查活动的字段。
字段摘要 | |
---|---|
boolean |
active 指示声音当前是否正在处理 MIDI 音符。 |
int |
bank 此声音当前正在使用的乐器的库号。 |
int |
channel 在其上演奏此声音的 MIDI 通道。 |
int |
note 此声音正在演奏的 MIDI 音符。 |
int |
program 此声音当前正在使用的乐器的程序号。 |
int |
volume 声音的当前 MIDI 音量级。 |
构造方法摘要 | |
---|---|
VoiceStatus() |
方法摘要 |
---|
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
字段详细信息 |
---|
public boolean active
public int channel
MidiChannel
,
active
public int bank
SoundBank
对象。如果声音为活动的,则值的范围为 0 到 16383,如果声音为非活动的,则未指定该值。
public int program
MidiChannel.getProgram()
,
Patch
,
active
public int note
public int volume
注意,此值不一定反映此声音所发声的瞬间级;该级是诸多因素产生的结果,包括当前乐器及其生成的振幅包络线的形状。
active
构造方法详细信息 |
---|
public VoiceStatus()