Module  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()
    • 方法摘要

      所有方法  接口方法  抽象方法 
      Modifier and Type 方法 描述
      void allNotesOff​()
      关闭当前在此频道上播放的所有音符。
      void allSoundOff​()
      立即关闭此通道上的所有声音,忽略Hold Pedal的状态和当前 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)
        获得指定键被压下的压力。

        如果设备不支持设置setPolyPressure压力,则此方法始终返回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)控制最高有效位的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控制器值。 例如,音量控制器的14位值可以通过将控制器7(0x07,通道音量MSB)的值乘以128并将控制器39的值(0x27,通道音量LSB)相加来计算。

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

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

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

        MIDI规范不规定已经发声的音符是否应切换到新乐器(音色)或继续其原始音色,直到由音符关闭终止。

        程序号为0(从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)
        打开或关闭单声道模式。 在单声道模式下,通道一次只合成一个音符。 在多模式(与单声道关闭相同)中,通道可以同时合成多个音符。 默认为单声道关闭(多模式打开)。

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

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

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

        boolean getMono​()
        获取当前单声道/多声道模式。 不允许更改单声道/多声道模式的合成器将始终返回相同的值,而不管对setMono的调用。
        结果
        true如果单声道模式打开,否则为 false (意思是多模式打开)
        另请参见:
        setMono(boolean)
      • setOmni

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

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

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

        boolean getOmni​()
        获取当前的全向模式。 不允许更改全向模式的合成器将始终返回相同的值,而不管对setOmni的调用。
        结果
        true如果全方位模式打开,否则为 false (意味着全向模式关闭)
        另请参见:
        setOmni(boolean)
      • setMute

        void setMute​(boolean mute)
        设置此通道的静音状态。 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)