-
public interface MidiChannelMidiChannel对象表示单个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最初是用于报告键盘音乐人手势的协议。 这个起源在
MidiChannelAPI中是可见的,它保留了诸如键数,键速度和键压的MIDI概念。 应当理解,MIDI数据不一定是由键盘播放器(源可以是不同类型的音乐家或软件)。 某些设备可能会生成速度和压力的常量值,而不管音符的执行方式如何。 此外,MIDI规范通常会使合成器以实现者认为合适的方式使用数据。 例如,速度数据不一定总是映射到体积和/或亮度。
-
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 voidallNotesOff()关闭当前在此频道上播放的所有音符。voidallSoundOff()立即关闭此通道上的所有声音,忽略Hold Pedal的状态和当前Instrument的内部衰减速率。voidcontrolChange(int controller, int value)反映指定控制器价值的变化。intgetChannelPressure()获取频道的键盘压力。intgetController(int controller)获取指定控制器的当前值。booleangetMono()获取当前单声道/多声道模式。booleangetMute()获取此通道的当前静音状态。booleangetOmni()获取当前的全向模式。intgetPitchBend()获得此通道的向上或向下音高偏移量。intgetPolyPressure(int noteNumber)获得指定键被压下的压力。intgetProgram()获取此通道的当前程序编号。booleangetSolo()获取此频道的当前独奏状态。booleanlocalControl(boolean on)打开或关闭本地控制。voidnoteOff(int noteNumber)关闭指定的音符。voidnoteOff(int noteNumber, int velocity)关闭指定的音符。voidnoteOn(int noteNumber, int velocity)开始指定的音符声音。voidprogramChange(int program)更改程序(补丁)。voidprogramChange(int bank, int program)使用银行和程序(补丁)号码更改程序。voidresetAllControllers()将所有实现的控制器重置为其默认值。voidsetChannelPressure(int pressure)反应键盘压力的变化。voidsetMono(boolean on)打开或关闭单声道模式。voidsetMute(boolean mute)设置此通道的静音状态。voidsetOmni(boolean on)打开或关闭全向模式。voidsetPitchBend(int bend)更改此通道上所有音符的音高偏移量。voidsetPolyPressure(int noteNumber, int pressure)反映指定笔记的关键压力的变化。voidsetSolo(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)
-
-