Module java.desktop
Package javax.sound.midi

Class VoiceStatus

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音符,则被视为非活动状态。当声音未收到任何音符开启命令时,或者每个收到的音符开启命令都已由相应的音符关闭(或由“全部音符关闭”消息)终止时,声音处于非活动状态。例如,当要求能够同时播放16个音符的合成器播放一个四音符和弦时,此时只有四个声音是活动的(假设之前没有音符仍在播放)。通常,状态报告为活动的声音正在产生可听到的声音,但这并不总是正确的;这取决于乐器的细节(即合成算法)以及音符已经持续多长时间。例如,一个声音可能在合成单个拍手声音。因为这种声音很快消失,可能在接收到音符关闭消息之前就变得听不到。在这种情况下,即使当前没有产生声音,声音仍被视为活动状态。

除了其活动或非活动状态外,VoiceStatus类还提供了字段,显示声音当前的MIDI通道、银行和程序编号、MIDI音符编号以及MIDI音量。在声音处于非活动状态时,这些字段中的每一个都具有未指定的值,因此应首先检查活动字段。

参见:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    boolean
    表示声音当前是否正在处理MIDI音符。
    int
    此声音当前正在使用的乐器的银行编号。
    int
    此声音正在播放的MIDI通道。
    int
    此声音正在播放的MIDI音符。
    int
    此声音当前正在使用的乐器的程序编号。
    int
    声音的当前MIDI音量级别。
  • Constructor Summary

    Constructors
    Constructor
    Description
    构造一个VoiceStatus
  • Method Summary

    Methods declared in class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • active

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

      public int channel
      此声音正在播放的MIDI通道。如果声音处于活动状态,则该值为基于零的通道编号;如果声音处于非活动状态,则该值未指定。
      参见:
    • bank

      public int bank
      此声音当前正在使用的乐器的银行编号。这是由MIDI银行选择消息指定的数字;它不是指SoundBank对象。如果声音处于活动状态,则该值范围为0到16383;如果声音处于非活动状态,则该值未指定。
      参见:
    • program

      public int program
      此声音当前正在使用的乐器的程序编号。如果声音处于活动状态,则该值范围为0到127;如果声音处于非活动状态,则该值未指定。
      参见:
    • note

      public int note
      此声音正在播放的MIDI音符。活动声音的范围为0到127个半音,其中60代表中央C。如果声音处于非活动状态,则该值未指定。
      参见:
    • volume

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

      请注意,此值不一定反映由此声音产生的声音的瞬时级别;该级别是许多因素的结果,包括当前乐器和其产生的幅度包络的形状。

      参见:
  • Constructor Details

    • VoiceStatus

      public VoiceStatus()
      构造一个VoiceStatus