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 关闭连接。
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):
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!")