模块  java.desktop
软件包  javax.sound.midi

Interface MidiChannel


  • public interface MidiChannel
    MidiChannel对象表示单个MIDI通道。 通常,每个MidiChannel方法处理由MIDI规范定义的类似命名的MIDI“频道语音”或“频道模式”消息。 但是, MidiChannel添加了一些“get”方法,用于检索最近由其中一个标准MIDI通道消息设置的值。 类似地,添加了用于每声道独奏和静音的方法。

    Synthesizer对象具有的集合MidiChannels ,通常为每个由MIDI 1.0规范中规定的16个信道的。 Synthesizer在其MidiChannels收到noteOn消息时生成声音。

    有关MIDI通道消息的规定行为的更多信息,请参阅MIDI 1.0规范,此处未详尽说明。 该规范的标题为MIDI Reference: The Complete MIDI 1.0 Detailed Specification ,由MIDI制造商协会( http://www.midi.org )发布。

    MIDI最初是用于报告键盘音乐家手势的协议。 这种起源在MidiChannel API中可见,它保留了键数,键速度和键压等MIDI概念。 应当理解,MIDI数据不一定源自键盘播放器(源可以是不同类型的音乐家或软件)。 无论音符如何执行,某些设备都可能生成恒定的速度和压力值。 此外,MIDI规范通常会让合成器以实现者认为合适的方式使用数据。 例如,速度数据不必总是映射到音量和/或亮度。

    另请参见:
    Synthesizer.getChannels()
    • 方法摘要

      所有方法  实例方法 抽象方法 
      变量和类型 方法 描述
      void allNotesOff()
      关闭此频道上当前正在发声的所有音符。
      void allSoundOff()
      立即关闭此通道上的所有发声音符,忽略保持踏板的状态和当前 Instrument的内部衰减率。
      void controlChange​(int controller, int value)
      对指定控制器值的更改做出反应。
      int getChannelPressure()
      获得通道的键盘压力。
      int getController​(int controller)
      获取指定控制器的当前值。
      boolean getMono()
      获得当前的单声道/多声道模式。
      boolean getMute()
      获得此通道的当前静音状态。
      boolean getOmni()
      获得当前的全向模式。
      int getPitchBend()
      获得该通道的向上或向下音高偏移。
      int getPolyPressure​(int noteNumber)
      获得按下指定键的压力。
      int getProgram()
      获取此频道的当前节目编号。
      boolean getSolo()
      获得此通道的当前独奏状态。
      boolean localControl​(boolean on)
      打开或关闭本地控制。
      void noteOff​(int noteNumber)
      关闭指定的音符。
      void noteOff​(int noteNumber, int velocity)
      关闭指定的音符。
      void noteOn​(int noteNumber, int velocity)
      开始指定的音符发声。
      void programChange​(int program)
      更改程序(补丁)。
      void programChange​(int bank, int program)
      使用银行和程序(补丁)号码更改程序。
      void resetAllControllers()
      将所有已实现的控制器重置为其默认值。
      void setChannelPressure​(int pressure)
      对键盘压力的变化做出反应。
      void setMono​(boolean on)
      打开或关闭单声道模式。
      void setMute​(boolean mute)
      设置此通道的静音状态。
      void setOmni​(boolean on)
      打开或关闭全向模式。
      void setPitchBend​(int bend)
      更改此通道上所有音符的音高偏移。
      void setPolyPressure​(int noteNumber, int pressure)
      对指定音符的键压力的变化做出反应。
      void setSolo​(boolean soloState)
      设置此通道的独奏状态。
    • 方法详细信息

      • noteOn

        void noteOn​(int noteNumber,
                    int velocity)
        开始指定的音符发声。 按键速度通常控制音符的音量和/或亮度。 如果velocity为零,则此方法的作用类似于noteOff(int) ,从而终止音符。
        参数
        noteNumber - MIDI音符编号,从0到127(60 =中C)
        velocity - 按下按键的速度
        另请参见:
        noteOff(int, int)
      • noteOff

        void noteOff​(int noteNumber,
                     int velocity)
        关闭指定的音符。 如果不被忽略,关键速度可用于影响音符衰减的速度。 无论如何,音符可能不会瞬间消失; 其衰减率由Instrument的内部Instrument 如果保持踏板(控制器;参见controlChange )已关闭,则此方法的效果将推迟到踏板释放为止。
        参数
        noteNumber - MIDI音符编号,从0到127(60 =中C)
        velocity - 密钥释放的速度
        另请参见:
        noteOff(int)noteOn(int, int)allNotesOff()allSoundOff()
      • noteOff

        void noteOff​(int noteNumber)
        关闭指定的音符。
        参数
        noteNumber - MIDI音符编号,从0到127(60 =中C)
        另请参见:
        noteOff(int, int)
      • setPolyPressure

        void setPolyPressure​(int noteNumber,
                             int pressure)
        对指定音符的键压力的变化做出反应。 和弦键压力允许键盘手同时按下多个键,每个键具有不同的压力。 如果不被忽略,压力通常用于改变诸如音符的音量,亮度或颤音之类的特征。

        底层合成器可能不支持此MIDI消息。 为了验证setPolyPressure是否成功,请使用getPolyPressure

        参数
        noteNumber - MIDI音符编号,从0到127(60 =中C)
        pressure - 指定键的值,从0到127(127 =最大压力)
        另请参见:
        getPolyPressure(int)
      • getPolyPressure

        int getPolyPressure​(int noteNumber)
        获得按下指定键的压力。

        如果设备不支持设置多边形压力,则此方法始终返回0.调用setPolyPressure将无效。

        参数
        noteNumber - MIDI音符编号,从0到127(60 =中C)
        结果
        该音符的压力量,从0到127(127 =最大压力)
        另请参见:
        setPolyPressure(int, int)
      • setChannelPressure

        void setChannelPressure​(int pressure)
        对键盘压力的变化做出反应。 通道压力表示键盘播放器压下整个键盘的难度。 这可以是每键压力传感器值的最大值或平均值,由setPolyPressure设置。 更常见的是,它是对设备上的单个传感器的测量,其不实现复音键压力。 压力可用于控制声音的各个方面,如setPolyPressure中所述

        底层合成器可能不支持此MIDI消息。 为了验证setChannelPressure是否成功,请使用getChannelPressure

        参数
        pressure - 键盘按下的压力,从0到127(127 =最大压力)
        另请参见:
        setPolyPressure(int, int)getChannelPressure()
      • getChannelPressure

        int getChannelPressure()
        获得通道的键盘压力。

        如果设备不支持设置通道压力,则此方法始终返回0.因此,调用setChannelPressure将不起作用。

        结果
        该音符的压力量,从0到127(127 =最大压力)
        另请参见:
        setChannelPressure(int)
      • controlChange

        void controlChange​(int controller,
                           int value)
        对指定控制器值的更改做出反应。 控制器是除键盘键之外的一些控制,例如开关,滑块,踏板,车轮或呼吸压力传感器。 MIDI 1.0规范为MIDI设备上的典型控制器提供标准数字,并描述了某些控制器的预期效果。 Instrument对控制器更改作出反应的方式可能特定于Instrument

        MIDI 1.0规范定义了7位控制器和14位控制器。 连续控制器(例如轮子和滑块)通常具有14位(两个MIDI字节),而离散控制器(例如开关)通常具有7位(一个MIDI字节)。 请参阅规范以查看每种控件的预期分辨率。

        控制器64到95(0x40 - 0x5F)允许7位精度。 7位控制器的值完全由value参数设置。 另外一组控制器通过使用两个控制器编号提供14位精度,一个用于最高有效7位,另一个用于最低有效7位。 控制器编号0到31(0x00 - 0x1F)控制最重要的7位14位控制器; 控制器编号32到63(0x20 - 0x3F)控制这些控制器的最低有效位7位。 例如,控制器编号7(0x07)控制通道音量控制器的高7位,控制器编号39(0x27)控制低7位。 14位控制器的值由两半的相互作用决定。 当设置控制器的最高7位(使用控制器编号0到31)时,低7位自动设置为0.然后可以使用低7位的相应控制器编号来进一步调制控制器值。

        底层合成器可能不支持特定的控制器消息。 要验证对controlChange的调用是否成功,请使用getController

        参数
        controller - 控制器编号(0到127;有关解释,请参阅MIDI 1.0规范)
        value - 指定控制器更改的值(0到127)
        另请参见:
        getController(int)
      • getController

        int getController​(int controller)
        获取指定控制器的当前值。 返回值用7位表示。 对于14位控制器,需要单独获取MSB和LSB控制器值。 例如,可以通过将控制器7的值(0x07,通道音量MSB)与128相乘并且将控制器39的值(0x27,通道音量LSB)相加来计算音量控制器的14位值。

        如果设备不支持设置特定控制器,则此方法为该控制器返回0。 调用controlChange将无效。

        参数
        controller - 需要其值的控制器的编号。 允许的范围是0-127; 请参阅MIDI 1.0规范进行解释。
        结果
        指定控制器的当前值(0到127)
        另请参见:
        controlChange(int, int)
      • programChange

        void programChange​(int program)
        更改程序(补丁)。 这将从当前选定的乐器库中选择特定乐器。

        MIDI规范并未规定已经发声的音符是应该切换到新乐器(音色)还是继续保持其原始音色,直到音符关闭为止。

        程序编号从零开始(从0到127表示)。 请注意,关于MIDI的MIDI硬件显示和文献通常使用1到128的范围。

        底层合成器可能不支持特定程序。 要验证对programChange的调用是否成功,请使用getProgram

        参数
        program - 要切换到的程序编号(0到127)
        另请参见:
        programChange(int, int)getProgram()
      • programChange

        void programChange​(int bank,
                           int program)
        使用银行和程序(补丁)号码更改程序。

        底层合成器可能不支持特定的库或程序。 要验证对programChange的调用是否成功,请使用getProgramgetController 由于银行通过控制变更进行更改,您可以使用以下声明验证当前银行:

          int bank = (getController(0) * 128) + getController(32); 
        参数
        bank - 要切换到的银行编号(0到16383)
        program - 在指定库中使用的程序(补丁)(0到127)
        另请参见:
        programChange(int)getProgram()
      • setPitchBend

        void setPitchBend​(int bend)
        更改此通道上所有音符的音高偏移。 这会影响所有当前发声的音符以及随后的音符。 (要使弯音停止,需要将值重置为中心位置。)

        MIDI规范规定弯音是14位值,其中零是最大向下弯曲,16383是最大向上弯曲,8192是中心(没有弯音)。 未指定实际的音高变化量; 它可以通过弯音灵敏度设置进行更改。 但是,通用MIDI规范说默认范围应该是从中心向上和向下的两个半音。

        底层合成器可能不支持此MIDI消息。 要验证setPitchBend是否成功,请使用getPitchBend

        参数
        bend - 音高变化量,作为非负14位值(8192 =无弯曲)
        另请参见:
        getPitchBend()
      • getPitchBend

        int getPitchBend()
        获得该通道的向上或向下音高偏移。 如果设备不支持设置弯音,则此方法始终返回setPitchBend然后,调用setPitchBend将无效。
        结果
        弯曲量,作为非负14位值(8192 =无弯曲)
        另请参见:
        setPitchBend(int)
      • resetAllControllers

        void resetAllControllers()
        将所有已实现的控制器重置为其默认值。
        另请参见:
        controlChange(int, int)
      • allNotesOff

        void allNotesOff()
        关闭此频道上当前正在发声的所有音符。 这些音符可能不会瞬间消失; 它们的衰减率由Instrument的内部Instrument 如果保持踏板控制器(参见controlChange )已关闭,则此方法的效果将推迟到踏板释放为止。
        另请参见:
        allSoundOff()noteOff(int)
      • allSoundOff

        void allSoundOff()
        立即关闭此通道上的所有发声音符,忽略保持踏板的状态和当前 Instrument的内部衰减率。
        另请参见:
        allNotesOff()
      • localControl

        boolean localControl​(boolean on)
        打开或关闭本地控制。 默认为本地控制打开。 “开”设置意味着如果设备能够合成声音和发送MIDI信息,它将合成声音以响应它自己发送的音符开和关音信息。 它还将响应从其他发送设备接收的消息。 “关闭”设置意味着合成器将忽略其自己传输的MIDI消息,但不会忽略从其他设备接收的消息。

        底层合成器可能不支持本地控制。 为了验证对localControl的调用是否成功,请检查返回值。

        参数
        on - true打开本地控制, false关闭本地控制
        结果
        新的本地控制值,如果不支持本地控制,则返回false
      • setMono

        void setMono​(boolean on)
        打开或关闭单声道模式。 在单声道模式下,通道一次仅合成一个音符。 在多边形模式下(与单声道模式关闭相同),通道可以同时合成多个音符。 默认为单声道关闭(打开多边形模式)。

        “Mono”是“monophonic”一词的缩写,在这种情况下,它与“复音”一词相对,并指每个MIDI通道的单个合成器语音。 它与可能有多少音频通道无关(如“单音”与“立体声”录音)。

        底层合成器可能不支持单声道模式。 要验证对setMono的调用是否成功,请使用getMono

        参数
        on - true打开单声道模式, false将其关闭(这意味着打开多边形模式)
        另请参见:
        getMono()VoiceStatus
      • getMono

        boolean getMono()
        获得当前的单声道/多声道模式。 无论是否调用setMono ,不允许更改单声道/多声道模式的合成器将始终返回相同的值。
        结果
        true如果单声道模式打开,否则 false (意味着打开多边形模式)
        另请参见:
        setMono(boolean)
      • setOmni

        void setOmni​(boolean on)
        打开或关闭全向模式。 在全向模式下,通道响应在所有通道上发送的消息。 当omni关闭时,通道仅响应在其通道号上发送的消息。 默认为全向关闭。

        底层合成器可能不支持全向模式。 要验证setOmni是否成功,请使用getOmni

        参数
        on - true打开全向模式, false将其关闭
        另请参见:
        getOmni()VoiceStatus
      • getOmni

        boolean getOmni()
        获得当前的全向模式。 无论是否调用setOmni ,不允许更改全向模式的合成器将始终返回相同的值。
        结果
        true如果全向模式打开,否则为 false (表示全向模式关闭)
        另请参见:
        setOmni(boolean)
      • setMute

        void setMute​(boolean mute)
        设置此通道的静音状态。 true表示true通道静音, false表示通道可以发声(如果其他通道未被独奏)。

        allSoundOff()不同,此方法仅适用于特定通道,而不适用于所有通道。 此外,它不仅使当前发声的音符静音,而且随后也接收音符。

        底层合成器可能不支持静音通道。 要验证对setMute的调用是否成功,请使用getMute

        参数
        mute - 新的静音状态
        另请参见:
        getMute()setSolo(boolean)
      • getMute

        boolean getMute()
        获得此通道的当前静音状态。 如果基础合成器不支持静音此通道,则此方法始终返回false
        结果
        true通道静音,如果不是, false
        另请参见:
        setMute(boolean)
      • setSolo

        void setSolo​(boolean soloState)
        设置此通道的独奏状态。 如果solotrue只有此通道和其他独奏通道会发声。 如果solofalse那么除非没有独奏的声道,否则只有其他独奏声道会发声,在这种情况下,所有未静音的声道都会响起。

        底层合成器可能不支持独奏通道。 要验证对setSolo的调用是否成功,请使用getSolo

        参数
        soloState - 频道的新独奏状态
        另请参见:
        getSolo()
      • getSolo

        boolean getSolo()
        获得此通道的当前独奏状态。 如果基础合成器不支持此通道上的独奏,则此方法始终返回false
        结果
        true频道是独奏,如果没有, false
        另请参见:
        setSolo(boolean)