Module  java.desktop
软件包  javax.sound.midi

Class VoiceStatus



  • public class VoiceStatus
    extends Object
    A VoiceStatus对象包含有关由Synthesizer生成的其中一个语音的当前状态的信息。

    MIDI合成器通常能够产生一些最大数量的同时音符,也称为声音。 声音是连续的单音符流,将进入的MIDI音符分配给特定语音的过程称为语音分配。 然而,语音分配算法和每个声音的内容通常是MIDI合成器的内部并且从外部视图隐藏。 当然,可以从MIDI信息中学习合成器正在播放的信息,也可以推断出声音分配的内容。 但是MIDI本身并没有提供一种方法来报告一个合成器分配给哪个声音的音符,甚至没有报告合成器能够合成多少个声音。

    然而,在Java Sound中, Synthesizer类可以通过其getVoiceStatus()方法公开其语音的内容。 此行为被推荐但可选; 不暴露其语音分配的合成器只需返回一个零长度的数组。 报告其语音状态的Synthesizer应始终保持此信息的所有声音,无论它们是否正在发声。 换句话说,给定类型的Synthesizer总是具有固定数量的声音,等于能够发声的同时音符的最大数量。

    如果声音当前未处理 MIDI音符,则视为无效。 当没有给出注释命令时,或接收到的每个音符开启命令已被相应的音符关闭(或通过“所有音符关闭”消息)终止时,语音不活动。 例如,当能够播放16个同时音符的合成器被告知要播放四音弦时,会发生这种情况。 在这种情况下,只有四个声音是活跃的(假设以前的音符还在播放)。 通常情况下,一个声音的状态被报告为活跃的是产生可听见的声音,但并不总是如此。 它取决于仪器的细节(即合成算法)以及音符的持续时间。 例如,声音可以合成单手掌的声音。 因为这个声音很快就会消失,所以在接收到一个音符关闭消息之前,这个声音可能会听不见。 在这种情况下,声音仍然被认为是活跃的,即使没有声音正在产生。

    除了主动或非活动状态, VoiceStatus课程还提供了显示语音当前MIDI通道,银行和程序编号,MIDI音符编号和MIDI音量的字段。 所有这些都可以在声音的过程中改变。 当声音不活动时,这些字段中的每一个都具有未指定的值,因此您应首先检查活动字段。

    另请参见:
    Synthesizer.getMaxPolyphony()Synthesizer.getVoiceStatus()
    • 字段详细信息

      • channel

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

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

        public int program
        该声音当前正在使用的乐器的节目编号。 如果语音处于活动状态,取值范围为0〜127,如果语音不活动,则取值范围为1。
        另请参见:
        MidiChannel.getProgram()Patchactive
      • note

        public int note
        这个声音正在播放的MIDI音符。 活动语音的范围是半音,从0到127,其中60表示中间C.如果语音不活动,该值是未指定的。
        另请参见:
        MidiChannel.noteOn(int, int)active
      • volume

        public int volume
        当前MIDI音量级别的声音。 如果语音处于活动状态,取值范围为0〜127,如果语音不活动,则取值范围为1。

        请注意,该值不一定反映这种声音产生的声音的瞬时水平; 该水平是许多因素的结果,包括当前仪器和其产生的幅度包络的形状。

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

      • VoiceStatus

        public VoiceStatus​()