-
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规范通常会让合成器以实现者认为合适的方式使用数据。 例如,速度数据不必总是映射到音量和/或亮度。
-
-
方法摘要
所有方法 实例方法 抽象方法 变量和类型 方法 描述 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)
- 参数
-
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
的调用是否成功,请使用getProgram
和getController
。 由于银行通过控制变更进行更改,您可以使用以下声明验证当前银行:int bank = (getController(0) * 128) + getController(32);
- 参数
-
bank
- 要切换到的银行编号(0到16383) -
program
- 在指定库中使用的程序(补丁)(0到127) - 另请参见:
-
programChange(int)
,getProgram()
-
getProgram
int getProgram()
获取此频道的当前节目编号。- 结果
- 当前所选补丁的程序编号
- 另请参见:
-
Patch.getProgram()
,Synthesizer.loadInstrument(javax.sound.midi.Instrument)
,programChange(int)
-
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)
设置此通道的独奏状态。 如果solo
是true
只有此通道和其他独奏通道会发声。 如果solo
是false
那么除非没有独奏的声道,否则只有其他独奏声道会发声,在这种情况下,所有未静音的声道都会响起。底层合成器可能不支持独奏通道。 要验证对
setSolo
的调用是否成功,请使用getSolo
。- 参数
-
soloState
- 频道的新独奏状态 - 另请参见:
-
getSolo()
-
getSolo
boolean getSolo()
获得此通道的当前独奏状态。 如果基础合成器不支持此通道上的独奏,则此方法始终返回false
。- 结果
-
true
频道是独奏,如果没有,false
- 另请参见:
-
setSolo(boolean)
-
-