-
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规范通常会使合成器以实现者认为合适的方式使用数据。 例如,速度数据不一定总是映射到体积和/或亮度。
-
-
方法摘要
所有方法 接口方法 抽象方法 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)
- 参数
-
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
的调用是否成功,请使用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)
打开或关闭单声道模式。 在单声道模式下,通道一次只合成一个音符。 在多模式(与单声道关闭相同)中,通道可以同时合成多个音符。 默认为单声道关闭(多模式打开)。“单声道”是“单声道”这个词的缩写,在这种情况下,它与“复音”一词相反,是指每个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)
设置此频道的独奏状态。 如果solo
是true
只有这个频道和其他独奏频道才会发出声音。 如果solo
是false
那么只有其他独奏频道才会发声,除非没有频道被独奏,在这种情况下,所有未静音的频道都会发出声音。底层合成器可能不支持独奏频道。 为了验证对
setSolo
的调用是否成功,请使用getSolo
。- 参数
-
soloState
- 频道的新独奏状态 - 另请参见:
-
getSolo()
-
getSolo
boolean getSolo()
获取此频道的当前独奏状态。 如果底层合成器在此频道上不支持独奏,则此方法始终返回false
。- 结果
-
true
频道是独奏的,如果没有false
- 另请参见:
-
setSolo(boolean)
-
-