public interface MidiChannel
表示一个单独 MIDI 通道的 MidiChannel
对象。通常,每个 MidiChannel
方法处理由 MIDI 规范定义的名称类似 MIDI “通道声音”或“通道模式”的消息。除此之外,MidiChannel
还添加了某些 "get" 方法,可检索由某个标准 MIDI 通道消息最近设置的值。类似地,也添加了用于检索每个通道的单声和静音值的方法。
对象有一个 Synthesizer
MidiChannel
集合,通常一个 MidiChannels
对应于 MIDI 1.0 规范规定的 16 个通道中的一个。Synthesizer
在其 MidiChannel
接收到 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 |
allNotesOff() 关闭此通道上当前发声的所有音符。 |
void |
allSoundOff() 立即关闭通道上所有发声的音符,同时忽略当前 Instrument 的 Hold Pedal 状态和内部衰减率。 |
void |
controlChange(int controller, int value) 对指定控件的值的更改作出反应。 |
int |
getChannelPressure() 获得通道的键盘力度。 |
int |
getController(int controller) 获得指定控件的当前值。 |
boolean |
getMono() 获得当前的 mono/poly 模式。 |
boolean |
getMute() 获得此通道的当前静音状态。 |
boolean |
getOmni() 获得当前的 omni 模式。 |
int |
getPitchBend() 获得此通道的向上或向下的音高偏移量。 |
int |
getPolyPressure(int noteNumber) 获得指定键被按下的力度。 |
int |
getProgram() 获得此通道的当前程序号。 |
boolean |
getSolo() 获得此通道的当前 solo 状态。 |
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) 打开或关闭 mono 模式。 |
void |
setMute(boolean mute) 设置此通道的静音状态。 |
void |
setOmni(boolean on) 打开或关闭 omni 模式。 |
void |
setPitchBend(int bend) 更改此通道上所有音符的音高偏移量。 |
void |
setPolyPressure(int noteNumber, int pressure) 对指定音符键力度的更改作出反应。 |
void |
setSolo(boolean soloState) 设置此通道的 solo 状态。 |
方法详细信息 |
---|
void noteOn(int noteNumber, int velocity)
velocity
为零,则此方法类似于执行
noteOff(int)
,终止此音符。
noteNumber
- MIDI 音符号,从 0 到 127(60 = 中央 C)
velocity
- 键被按下的速度
noteOff(int, int)
void noteOff(int noteNumber, int velocity)
Instrument
的内部情况。如果按下 Hold Pedal(一种控件;请参见
controlChange
),则此方法的效果要推迟到踏板释放时才能体现。
noteNumber
- MIDI 音符号,从 0 到 127(60 = 中央 C)
velocity
- 键释放的速度
noteOff(int)
,
noteOn(int, int)
,
allNotesOff()
,
allSoundOff()
void noteOff(int noteNumber)
noteNumber
- MIDI 音符号,从 0 到 127(60 = 中央 C)
noteOff(int, int)
void setPolyPressure(int noteNumber, int pressure)
setPolyPressure
设置是否成功,可使用
getPolyPressure
。
noteNumber
- MIDI 音符号,从 0 到 127(60 = 中央 C)
pressure
- 指定键的值,从 0 到 127(127 = 最大力度)
getPolyPressure(int)
int getPolyPressure(int noteNumber)
noteNumber
- MIDI 音符号,从 0 到 127(60 = 中央 C)。 如果设备不支持设置 PolyPressure,则此方法始终返回 0。这种情况下,调用
setPolyPressure
没有任何作用。
setPolyPressure(int, int)
void setChannelPressure(int pressure)
setPolyPressure
设置。多数情况下,它是对设备上不实现复调键力度的单一传感器的的度量。力度可用于控制声音的各个方面,如在
setPolyPressure
中的描述。 基础合成器可能不支持此 MIDI 消息。为了验证
setChannelPressure
设置是否成功,可使用
getChannelPressure
。
pressure
- 键盘被按下的力度,从 0 到 127(127 = 最大力度)
setPolyPressure(int, int)
,
getChannelPressure()
int getChannelPressure()
setChannelPressure
没有任何作用。
setChannelPressure(int)
void controlChange(int controller, int value)
Instrument
对控件更改的反应方式特定于
Instrument
。
MIDI 1.0 Specification 同时定义了 7 位控件和 14 位控件。连续的控件,例如滚轮和滑杆通常为 14 位(两个 MIDI 字节),而离散的控件,例如开关,通常为 7 位(一个 MIDI 字节)。请参考规范,了解每种控制类型的具体精度。
控件 64 到 95 (0x40 - 0x5F) 允许 7 位精度。7 位控件的值完全通过 value
参数进行设置。其他的控件集通过使用两个控件号(一个用于最高有效 7 位,另一个用于最低有效 7 位)提供 14 位精度。控件号 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 Specification 中的解释)
value
- 将指定的控件更改成的值(0 到 127)
getController(int)
int getController(int controller)
controlChange
没有任何作用。
controller
- 需要其值的控件号。允许的范围为 0-127;请参见 MIDI 1.0 Specification 中的解释。
controlChange(int, int)
void programChange(int program)
MIDI 规范并未指示已经能够发声的音符应切换到新的乐器(音色),还是继续使用它们原先的音色,直到由音符关闭来终止。
程序号从零开始(表示为 0 到 127)。注意,MIDI 硬件显示和有关 MIDI 的文字描述通常使用 1 到 128 的范围。 基础合成器可能不支持特定的程序。为了验证是否对 programChange
进行了成功的调用,请使用 getProgram
。
program
- 要切换到的程序号(0 到 127)
programChange(int, int)
,
getProgram()
void programChange(int bank, int program)
programChange
进行了成功的调用,可使用
getProgram
和
getController
。由于要通过控制更改的方式来更改库,所以可使用下面的语句验证当前的库:
int bank = (getController(0) * 128) + getController(32);
bank
- 要切换到的库号(0 到 16383)
program
- 在指定的库(0 到 127)中使用的程序(包)
programChange(int)
,
getProgram()
int getProgram()
Patch.getProgram()
,
Synthesizer.loadInstrument(javax.sound.midi.Instrument)
,
programChange(int)
void setPitchBend(int bend)
MIDI 规范规定弯音为一个 14 位值,其中,零为最大的向下弯音,16383 为最大的向上弯音,8192 位于中心位置(无弯音)。实际的音高更改量未指定;可由弯音微调设置对其进行更改。但是 General MIDI 规范指明,默认的范围应为距中心向上或向下的两个半音程。 基础合成器可能不支持此 MIDI 消息。为了验证 setPitchBend
设置是否成功,可使用 getPitchBend
。
bend
- 音高的更改量,它是一个非负的 14 位值(8192 = 无 bend)
getPitchBend()
int getPitchBend()
setPitchBend
没有任何作用。
setPitchBend(int)
void resetAllControllers()
controlChange(int, int)
void allNotesOff()
Instrument
的内部情况。如果按下 Hold Pedal 控件(请参见
controlChange
),则此方法的效果要推迟到踏板释放时才能体现。
allSoundOff()
,
noteOff(int)
void allSoundOff()
Instrument
的 Hold Pedal 状态和内部衰减率。
allNotesOff()
boolean localControl(boolean on)
localControl
行了成功的调用,请检查返回值。
on
-
true
可打开本地控制,
false
则关闭本地控制
void setMono(boolean on)
"Mono" 是 "monophonic"(单声道)的简写,在此上下文中与 "polyphonic"(复调)相反,指的是每个 MIDI 通道有单个合成器声音。它与音频通道数没有任何关系(即“单声道”和“立体声”录音的情况)。 基础合成器可能不支持 mono 模式。为了验证是否对 setMono
进行了成功的调用,可使用 getMono
。
on
-
true
为打开 mono 模式,
false
为关闭 mono 模式(表示打开 poly 模式)。
getMono()
,
VoiceStatus
boolean getMono()
setMono
,不允许更改 mono/poly 模式的合成器将始终返回相同的值。
true
,否则返回
false
(表示 poly 模式为打开)。
setMono(boolean)
void setOmni(boolean on)
setOmni
设置是否成功,可使用
getOmni
。
on
-
true
表示开启 omni 模式,
false
表示关闭 omni 模式。
getOmni()
,
VoiceStatus
boolean getOmni()
setOmni
,不允许更改 omni 模式的合成器将始终返回相同的值。
true
,否则返回
false
(表示 omni 模式为关闭)。
setOmni(boolean)
void setMute(boolean mute)
true
表示该通道将设置为静音,值为
false
表示该通道可发声(如果其他通道为非 solo)。
与 allSoundOff()
不同,此方法只适用于特定的通道,而不是所有的通道。更进一步地说,它不只将当前发声的音符设置为静音,而且将后续接收的音符都设置为静音。 基础合成器可能不支持静音通道。为了验证是否对 setMute
进行了成功的调用,可使用 getMute
。
mute
- 新的静音状态
getMute()
,
setSolo(boolean)
boolean getMute()
false
。
true
,否则返回
false
setMute(boolean)
void setSolo(boolean soloState)
solo
为
true
,则只有此通道及其他 solo 通道可发声。如果
solo
为
false
,则只有其他 solo 通道可发声;除非在没有 solo 通道的情况下,所有非静音通道都发声。 基础合成器可能不支持 solo 通道。为了验证是否对
setSolo
进行了成功的调用,可使用
getSolo
。
soloState
- 该通道的新 solo 状态
getSolo()
boolean getSolo()
false
。
true
,否则返回
false
setSolo(boolean)