模块 java.desktop

接口 MidiChannel


public interface MidiChannel
MidiChannel 对象表示单个 MIDI 通道。通常,每个 MidiChannel 方法处理 MIDI 规范定义的类似名称的 MIDI“通道语音”或“通道模式”消息。但是,MidiChannel 添加了一些“获取”方法,这些方法可以检索标准 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 规范通常让合成器以实现者认为合适的方式使用数据。例如,速度数据不需要总是映射到音量和/或亮度。

参见:
  • 方法总结

    修饰符和类型
    方法
    描述
    void
    关闭当前在此通道上发声的所有音符。
    void
    立即关闭此通道上的所有发声音符,忽略 Hold Pedal 的状态和电流 Instrument 的内部衰减率。
    void
    controlChange(int controller, int value)
    对指定控制器值的变化作出反应。
    int
    获取通道的键盘压力。
    int
    getController(int controller)
    获取指定控制器的当前值。
    boolean
    获取当前的单/多模式。
    boolean
    获取该通道的当前静音状态。
    boolean
    获取当前全向模式。
    int
    获取此通道的向上或向下音调偏移量。
    int
    getPolyPressure(int noteNumber)
    获取按下指定键的压力。
    int
    获取此通道的当前节目编号。
    boolean
    获取此通道的当前独奏状态。
    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
    将所有已实现的控制器重置为其默认值。
    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 = Middle C)
      velocity - 按下按键的速度
      参见:
    • noteOff

      void noteOff(int noteNumber, int velocity)
      关闭指定的音符。上键速度(如果不被忽略)可用于影响音符衰减的速度。无论如何,音符可能不会立即消失;它的衰减率由 Instrument 的内部结构决定。如果 Hold Pedal(一个控制器;参见 controlChange )被踩下,这个方法的效果会延迟到踏板被释放。
      参数:
      noteNumber - MIDI 音符编号,从 0 到 127(60 = Middle C)
      velocity - 释放键的速度
      参见:
    • noteOff

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

      void setPolyPressure(int noteNumber, int pressure)
      对指定音符键压的变化作出反应。和弦键压允许键盘演奏者同时按下多个键,每个键具有不同的压力量。如果不忽略压力,则通常用于改变音符的音量、亮度或颤音等特征。

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

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

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

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

      参数:
      noteNumber - MIDI 音符编号,从 0 到 127(60 = Middle C)
      返回:
      该音符的压力值,从 0 到 127(127 = 最大压力)
      参见:
    • setChannelPressure

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

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

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

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

      如果设备不支持设置通道压力,此方法始终返回 0。此时调用 setChannelPressure 将无效。

      返回:
      该音符的压力值,从 0 到 127(127 = 最大压力)
      参见:
    • 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 位控制器的最高 7 位;控制器编号 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 controller)
      获取指定控制器的当前值。返回值用 7 位表示。对于 14 位控制器,需要分别获取 MSB 和 LSB 控制器值。例如,音量控制器的 14 位值可以通过将控制器 7(0x07,通道音量 MSB)的值乘以 128 并加上控制器 39(0x27,通道音量 LSB)的值来计算。

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

      参数:
      controller - 需要其值的控制器的编号。允许的范围是 0-127;有关解释,请参阅 MIDI 1.0 规范。
      返回:
      指定控制器的当前值(0 到 127)
      参见:
    • programChange

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

      MIDI 规范没有规定已经发声的音符是应该切换到新乐器(音色)还是继续使用它们的原始音色,直到被音符关闭为止。

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

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

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

      void programChange(int bank, int program)
      使用库和程序(音色)编号更改程序。

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

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

      int getProgram()
      获取此通道的当前节目编号。
      返回:
      当前所选音色的程序编号
      参见:
    • setPitchBend

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

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

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

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

      int getPitchBend()
      获取此通道的向上或向下音调偏移量。如果设备不支持设置弯音,这个方法总是返回8192。调用setPitchBend将没有效果。
      返回:
      弯曲量,作为非负 14 位值(8192 = 无弯曲)
      参见:
    • resetAllControllers

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

      void allNotesOff()
      关闭当前在此通道上发声的所有音符。音符可能不会立即消失;它们的衰减率由 Instrument 的内部结构决定。如果 Hold Pedal 控制器(参见 controlChange )已关闭,则此方法的效果会延迟到释放踏板时才会生效。
      参见:
    • allSoundOff

      void allSoundOff()
      立即关闭此通道上的所有发声音符,忽略 Hold Pedal 的状态和电流 Instrument 的内部衰减率。
      参见:
    • localControl

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

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

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

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

      “Mono”是单词“monophonic”的缩写,在此上下文中它与单词“polyphonic”相反,指的是每个 MIDI 通道的单个合成器声音。它与可能有多少音频通道无关(如“单声道”与“立体声”录音)。

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

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

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

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

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

      参数:
      on - true 打开全向模式,false 关闭它
      参见:
    • getOmni

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

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

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

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

      参数:
      mute - 新的静音状态
      参见:
    • getMute

      boolean getMute()
      获取该通道的当前静音状态。如果底层合成器不支持将此通道静音,则此方法始终返回 false
      返回:
      true 通道被静音,或者 false 如果没有
      参见:
    • setSolo

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

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

      参数:
      soloState - 通道的新独奏状态
      参见:
    • getSolo

      boolean getSolo()
      获取此通道的当前独奏状态。如果底层合成器不支持此通道上的独奏,则此方法始终返回 false
      返回:
      true 通道是独奏,或者 false 如果不是
      参见: