Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
InputEventMIDI¶
继承: InputEvent < Resource < RefCounted < Object
代表来自 MIDI 设备的 MIDI 消息,例如来自音乐键盘。
描述¶
InputEventMIDI 存储有关来自 MIDI(乐器数字接口)设备的消息的信息。这些设备可能包括音乐键盘、合成器和鼓机。
MIDI 消息可以通过 5 针 MIDI 连接器或 USB 接收。如果你的设备支持这两种方式,请务必检查设备中的设置以查看它正在使用哪种输出。
默认情况下,Godot 不检测 MIDI 设备。需要首先调用 OS.open_midi_inputs。可以使用 OS.get_connected_midi_inputs 检查检测到哪些设备,并使用 OS.close_midi_inputs 关闭连接。
func _ready():
OS.open_midi_inputs()
print(OS.get_connected_midi_inputs())
func _input(input_event):
if input_event is InputEventMIDI:
_print_midi_info(input_event)
func _print_midi_info(midi_event):
print(midi_event)
print("Channel ", midi_event.channel)
print("Message ", midi_event.message)
print("Pitch ", midi_event.pitch)
print("Velocity ", midi_event.velocity)
print("Instrument ", midi_event.instrument)
print("Pressure ", midi_event.pressure)
print("Controller number: ", midi_event.controller_number)
print("Controller value: ", midi_event.controller_value)
public override void _Ready()
{
OS.OpenMidiInputs();
GD.Print(OS.GetConnectedMidiInputs());
}
public override void _Input(InputEvent inputEvent)
{
if (inputEvent is InputEventMidi midiEvent)
{
PrintMIDIInfo(midiEvent);
}
}
private void PrintMIDIInfo(InputEventMidi midiEvent)
{
GD.Print(midiEvent);
GD.Print($"Channel {midiEvent.Channel}");
GD.Print($"Message {midiEvent.Message}");
GD.Print($"Pitch {midiEvent.Pitch}");
GD.Print($"Velocity {midiEvent.Velocity}");
GD.Print($"Instrument {midiEvent.Instrument}");
GD.Print($"Pressure {midiEvent.Pressure}");
GD.Print($"Controller number: {midiEvent.ControllerNumber}");
GD.Print($"Controller value: {midiEvent.ControllerValue}");
}
注意:Godot 不支持 MIDI 输出,因此无法从 Godot 发出 MIDI 消息。仅支持 MIDI 输入。
教程¶
属性¶
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
属性说明¶
该消息的 MIDI 通道,范围从 0
到 15
。MIDI 通道 9
是为打击乐器保留的。
如果 message 为 @GlobalScope.MIDI_MESSAGE_CONTROL_CHANGE,控制器的唯一编号;否则为 0
。该值可用于识别用于音量、平衡和平移的滑块,以及 MIDI 设备上的开关和踏板。有关小列表,请参阅通用 MIDI 规范。
应用于控制器的值。如果 message 为 @GlobalScope.MIDI_MESSAGE_CONTROL_CHANGE,则该值介于 0
到 127
之间,否则为 0
。另见 controller_value。
该 MIDI 消息上使用的乐器(也称为 程序 或 预设)。该值介于 0
到 127
之间。
要了解每个值的含义,请参阅通用 MIDI 乐器列表。请记住,该列表相差 1,因为它不是从 0 开始的。值 0
对应于原声三角钢琴。
MIDIMessage message = 0
🔗
void set_message(value: MIDIMessage)
MIDIMessage get_message()
表示 MIDI 消息的类型(请参阅 MIDIMessage 枚举)。
有关更多信息,请参阅 MIDI 消息状态字节列表图表。
该 MIDI 消息的音高索引号。该值的范围从 0
到 127
。
在钢琴上,中音 C为 60
,后跟 C 升音(61
),然后是 D(62
),等等。每个八度音阶以 12 为偏移量进行分割。请参阅 钢琴键频率图表 完整列表的“MIDI 音符编号”列。
按键的力度。该值的范围从 0
到 127
。
注意:对于许多设备,该值始终为 0
。其他如音乐键盘等设备可以通过改用更改 velocity 来模拟压力。
MIDI 消息的速度。这个值在 0
到 127
之间。对于音乐键盘,这对应的是按键有多快,实际很少超过 110
。
注意:部分 MIDI 设备可能会发送速度为 0
的 @GlobalScope.MIDI_MESSAGE_NOTE_ON,并期望它被视为和 @GlobalScope.MIDI_MESSAGE_NOTE_OFF 消息一样。如果有必要,可以用几行代码来处理:
func _input(event):
if event is InputEventMIDI:
if event.message == MIDI_MESSAGE_NOTE_ON and event.velocity > 0:
print("Note pressed!")