javax.sound.midi

接口
异常
java.lang.Object
  继承者 javax.sound.midi.VoiceStatus

public class VoiceStatus
     
extends Object

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 音量的字段。所有这些内容都可在声音过程中更改。声音为非活动时,这些字段中每个字段都有一个未指定的值,所以应首先检查活动的字段。

另请参见:
Synthesizer.getMaxPolyphony(), Synthesizer.getVoiceStatus()

字段摘要
 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
 

字段详细信息

active

public boolean active
指示声音当前是否正在处理 MIDI 音符。请参见 活动和非活动声音的解释。


channel

public int channel
在其上演奏此声音的 MIDI 通道。如果声音为活动的,则值为从零开始的通道号,如果声音为非活动的,则未指定该值。

另请参见:
MidiChannel, active

bank

public int bank
此声音当前正在使用的乐器的库号。这是一个由 MIDI 库选择消息指定的号;它并不指一个 SoundBank 对象。如果声音为活动的,则值的范围为 0 到 16383,如果声音为非活动的,则未指定该值。

另请参见:
Patch, Soundbank, active, MidiChannel.programChange(int, int)

program

public int program
此声音当前正在使用的乐器的程序号。如果声音为活动的,则值的范围为 0 到 127,如果声音为非活动的,则未指定该值。

另请参见:
MidiChannel.getProgram(), Patch, active

note

public int note
此声音正在演奏的 MIDI 音符。活动声音的范围从 0 到 127,以半音为单位,60 指中央 C(Middle C)。如果声音为非活动的,则未指定该值。

另请参见:
MidiChannel.noteOn(int, int), active

volume

public int volume
声音的当前 MIDI 音量级。如果声音为活动的,则值的范围为 0 到 127,如果声音为非活动的,则未指定该值。

注意,此值不一定反映此声音所发声的瞬间级;该级是诸多因素产生的结果,包括当前乐器及其生成的振幅包络线的形状。

另请参见:
active
构造方法详细信息

VoiceStatus

public VoiceStatus()