InputEventMIDI
继承: InputEvent < Resource < RefCounted < Object
代表来自 MIDI 设备的输入事件,例如钢琴。
描述
InputEventMIDI 允许从钢琴等 MIDI(Musical Instrument Digital Interface)设备接收输入事件。
MIDI 信号可以通过 5 针 MIDI 连接器或 USB 发送,如果你的设备支持这两种方式,请务必检查设备中的设置以查看它使用的是哪种输出。
要从 MIDI 设备接收输入事件,需要调用 OS.open_midi_inputs。可以使用 OS.get_connected_midi_inputs 检查检测到哪些设备。
GDScriptC#
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: InputEventMIDI):
print(midi_event)
print("Channel " + str(midi_event.channel))
print("Message " + str(midi_event.message))
print("Pitch " + str(midi_event.pitch))
print("Velocity " + str(midi_event.velocity))
print("Instrument " + str(midi_event.instrument))
print("Pressure " + str(midi_event.pressure))
print("Controller number: " + str(midi_event.controller_number))
print("Controller value: " + str(midi_event.controller_value))
public override void _Ready()
{
OS.OpenMidiInputs();
GD.Print(OS.GetConnectedMidiInputs());
}
public override void _Input(InputEvent @event)
{
if (@event 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 输入有效。
教程
属性
| ||
| ||
| ||
| ||
| ||
| ||
| ||
|
属性说明
int channel = 0
这个输入事件的 MIDI 通道。总共有 16 个通道,所以这个值的范围是 0 到 15。MIDI 通道 9 是为打击乐器保留的,其余通道供非打击乐器使用。
int controller_number = 0
如果消息是 @GlobalScope.MIDI_MESSAGE_CONTROL_CHANGE,则表示控制器号,否则为零。控制器包含踏板、推杆等设备。
int controller_value = 0
如果消息是 @GlobalScope.MIDI_MESSAGE_CONTROL_CHANGE,则表示控制器值,否则为零。控制器包含踏板、推杆等设备。
int instrument = 0
这个输入事件的乐器。这个值的范围是 0 到 127。乐器列表请参考维基百科的 General MIDI 文中的乐器列表,不过这个值是从 0 开始的,所以请把那张表中的数字都减一。标准钢琴的乐器号为 0。
MIDIMessage message = 0
void set_message ( MIDIMessage value )
MIDIMessage get_message ( )
返回表示这个 MIDI 信号类型的值,是 MIDIMessage 枚举的成员。
对于在 0x80 和 0xEF 之间的 MIDI 消息,这个值返回的是左半部分的比特位,另一半是通道(例:0x94 会变成 0x9)。对于在 0xF0 到 0xFF 之间的 MIDI 消息,这个值是原样返回的。
激活音符时会返回 @GlobalScope.MIDI_MESSAGE_NOTE_ON,但失活时并不一定会返回 @GlobalScope.MIDI_MESSAGE_NOTE_OFF,因此你的代码应该在经过一段时间后将输入处理为停止。
有些 MIDI 设备可能发送速度为零的 @GlobalScope.MIDI_MESSAGE_NOTE_ON 来代替 @GlobalScope.MIDI_MESSAGE_NOTE_OFF。
更多消息请参阅 velocity 中的备注,以及上面链接的 MIDI 消息状态字节列表。
int pitch = 0
这个 MIDI 信号的音高索引号。这个值的范围为 0 到 127。在钢琴上,中央 C 是 60,而 A440 是 69,更多信息请参阅维基百科钢琴琴键频率表的“MIDI 音符”列。
int pressure = 0
MIDI 信号的压力。这个值在 0 到 127 之间。对于很多设备,这个值总是 0。
int velocity = 0
MIDI 信号的速度。这个值在 0 到 127 之间。对于钢琴,这对应的是按键有多快,实际很少超过 110。
注意:部分 MIDI 设备可能会发送速度为零的 @GlobalScope.MIDI_MESSAGE_NOTE_ON 并期望进行和 @GlobalScope.MIDI_MESSAGE_NOTE_OFF 一样的处理,但因设备实现而异,所以 Godot 会原样汇报事件数据。根据硬件和游戏/应用的需求的不同,可以用几行脚本来可靠地处理这种 MIDI 特质(检查 @GlobalScope.MIDI_MESSAGE_NOTE_ON 的速度是否为零)。
© 版权所有 2014-present Juan Linietsky, Ariel Manzur and the Godot community (CC BY 3.0). Revision b1c660f7
.
Built with Sphinx using a theme provided by Read the Docs.