public interface MidiChannel
MidiChannel
对象表示单个MIDI通道。
通常,每个MidiChannel
方法处理由MIDI规范定义的类似的MIDI“通道语音”或“通道模式”消息。
然而, MidiChannel
添加了一些“get”方法,它检索最近由一个标准MIDI通道消息设置的值。
类似地,已经添加了每通道独奏和静音的方法。
对象具有MidiChannels的Synthesizer
MidiChannels
,通常为MIDI 1.0规范规定的16个通道中的每一个。 Synthesizer
的MidiChannels
收到noteOn
消息时会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 | Method and Description |
---|---|
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)
设置此频道的独奏状态。
|
void noteOn(int noteNumber, int velocity)
noteNumber
- MIDI音符编号,从0到127(60 =中等C)
velocity
- 键被压低的速度
noteOff(int, int)
void noteOff(int noteNumber, int velocity)
Instrument
。
如果保持踏板(控制器,参见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)如果设备不支持设置
setPolyPressure
压力,该方法总是返回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规范定义了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)
int getController(int controller)
controlChange
将不起作用。
controller
- 需要其值的控制器的编号。
允许范围为0-127;
请参阅MIDI 1.0规范的解释。
controlChange(int, int)
void programChange(int program)
MIDI规范不规定已经发声的音符是否应切换到新乐器(音色)或继续其原始音色,直到由音符关闭终止。
程序号为0(从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为中心(无节距弯曲)。 音高变化的实际量未指定; 它可以通过俯仰灵敏度设置来改变。 然而,通用MIDI规范说,默认范围应该是从中心向上和向下两个半音。 底层合成器可能不支持此MIDI消息。 为了验证setPitchBend
是否成功,请使用getPitchBend
。
bend
- 音调变化量,作为非负14位值(8192 =无弯)
getPitchBend()
int getPitchBend()
setPitchBend
将不起作用。
setPitchBend(int)
void resetAllControllers()
controlChange(int, int)
void allNotesOff()
Instrument
。
如果保持踏板控制器(见controlChange
)关闭,则此方法的效果将延迟,直到踏板松开。
allSoundOff()
,
noteOff(int)
void allSoundOff()
Instrument
的内部衰减速率。
allNotesOff()
boolean localControl(boolean on)
localControl
的调用是否成功,请检查返回值。
on
-
true
打开本地控制,
false
关闭本地控制
void setMono(boolean on)
“单声道”是“单声道”这个词的缩写,在这种情况下,它与“复音”一词相反,是指每个MIDI通道单个合成器的声音。 它与可能有多少音频通道无关(如“单声道”和“立体声”录音)。 底层合成器可能不支持单声道模式。 为了验证对setMono
的呼叫是否成功,请使用getMono
。
on
-
true
打开单声道模式,
false
将其关闭(这意味着打开多模式模式)。
getMono()
, VoiceStatus
boolean getMono()
setMono
。
true
如果单声道模式打开,否则
false
(意思是多模式打开)。
setMono(boolean)
void setOmni(boolean on)
setOmni
是否成功,请使用getOmni
。
on
-
true
打开全方位模式,
false
关闭它。
getOmni()
, VoiceStatus
boolean getOmni()
setOmni
。
true
如果全方位模式打开,否则
false
(意味着全向模式关闭)。
setOmni(boolean)
void setMute(boolean mute)
true
的值表示通道要静音, false
表示通道可以声音(如果其他通道没有独奏)。
与allSoundOff()
不同,此方法仅适用于特定通道,而不适用于所有通道。 此外,它不仅沉默了当前的声音,还随后收到了笔记。 底层合成器可能不支持静音通道。 为了验证对setMute
的呼叫是否成功,请使用getMute
。
mute
- 新的静音状态
getMute()
,
setSolo(boolean)
boolean getMute()
false
。
true
通道静音,否则为
false
setMute(boolean)
void setSolo(boolean soloState)
solo
是true
只有这个通道和其他独奏频道才会发出声音。
如果solo
是false
则除非没有声道独奏,否则只有其他独奏声道才会发出声音,在这种情况下,所有未静音通道都会发出声音。
底层合成器可能不支持独奏频道。
为了验证对setSolo
的调用是否成功,请使用getSolo
。
soloState
- 频道的新独奏状态
getSolo()
boolean getSolo()
false
。
true
通道是独奏的,如果没有
false
setSolo(boolean)