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#

  1. func _ready():
  2. OS.open_midi_inputs()
  3. print(OS.get_connected_midi_inputs())
  4. func _input(input_event):
  5. if input_event is InputEventMIDI:
  6. _print_midi_info(input_event)
  7. func _print_midi_info(midi_event):
  8. print(midi_event)
  9. print("Channel ", midi_event.channel)
  10. print("Message ", midi_event.message)
  11. print("Pitch ", midi_event.pitch)
  12. print("Velocity ", midi_event.velocity)
  13. print("Instrument ", midi_event.instrument)
  14. print("Pressure ", midi_event.pressure)
  15. print("Controller number: ", midi_event.controller_number)
  16. print("Controller value: ", midi_event.controller_value)
  1. public override void _Ready()
  2. {
  3. OS.OpenMidiInputs();
  4. GD.Print(OS.GetConnectedMidiInputs());
  5. }
  6. public override void _Input(InputEvent inputEvent)
  7. {
  8. if (inputEvent is InputEventMidi midiEvent)
  9. {
  10. PrintMIDIInfo(midiEvent);
  11. }
  12. }
  13. private void PrintMIDIInfo(InputEventMidi midiEvent)
  14. {
  15. GD.Print(midiEvent);
  16. GD.Print($"Channel {midiEvent.Channel}");
  17. GD.Print($"Message {midiEvent.Message}");
  18. GD.Print($"Pitch {midiEvent.Pitch}");
  19. GD.Print($"Velocity {midiEvent.Velocity}");
  20. GD.Print($"Instrument {midiEvent.Instrument}");
  21. GD.Print($"Pressure {midiEvent.Pressure}");
  22. GD.Print($"Controller number: {midiEvent.ControllerNumber}");
  23. GD.Print($"Controller value: {midiEvent.ControllerValue}");
  24. }

注意:Godot 不支持 MIDI 输出,因此无法从 Godot 发出 MIDI 消息。仅支持 MIDI 输入。

教程

属性

int

channel

0

int

controller_number

0

int

controller_value

0

int

instrument

0

MIDIMessage

message

0

int

pitch

0

int

pressure

0

int

velocity

0


属性说明

int channel = 0 🔗

  • void set_channel(value: int)

  • int get_channel()

该消息的 MIDI 通道,范围从 015。MIDI 通道 9 是为打击乐器保留的。


int controller_number = 0 🔗

  • void set_controller_number(value: int)

  • int get_controller_number()

如果 message@GlobalScope.MIDI_MESSAGE_CONTROL_CHANGE,控制器的唯一编号;否则为 0。该值可用于识别用于音量、平衡和平移的滑块,以及 MIDI 设备上的开关和踏板。有关小列表,请参阅通用 MIDI 规范


int controller_value = 0 🔗

  • void set_controller_value(value: int)

  • int get_controller_value()

应用于控制器的值。如果 message@GlobalScope.MIDI_MESSAGE_CONTROL_CHANGE,则该值介于 0127 之间,否则为 0。另见 controller_value


int instrument = 0 🔗

  • void set_instrument(value: int)

  • int get_instrument()

该 MIDI 消息上使用的乐器(也称为 程序预设)。该值介于 0127 之间。

要了解每个值的含义,请参阅通用 MIDI 乐器列表。请记住,该列表相差 1,因为它不是从 0 开始的。值 0 对应于原声三角钢琴。


MIDIMessage message = 0 🔗

表示 MIDI 消息的类型(请参阅 MIDIMessage 枚举)。

有关更多信息,请参阅 MIDI 消息状态字节列表图表


int pitch = 0 🔗

  • void set_pitch(value: int)

  • int get_pitch()

该 MIDI 消息的音高索引号。该值的范围从 0127

在钢琴上,中音 C60,后跟 C 升音61),然后是 D62),等等。每个八度音阶以 12 为偏移量进行分割。请参阅 钢琴键频率图表 完整列表的“MIDI 音符编号”列。


int pressure = 0 🔗

  • void set_pressure(value: int)

  • int get_pressure()

按键的力度。该值的范围从 0127

注意:对于许多设备,该值始终为 0。其他如音乐键盘等设备可以通过改用更改 velocity 来模拟压力。


int velocity = 0 🔗

  • void set_velocity(value: int)

  • int get_velocity()

MIDI 消息的速度。这个值在 0127 之间。对于音乐键盘,这对应的是按键有多快,实际很少超过 110

注意:部分 MIDI 设备可能会发送速度为 0@GlobalScope.MIDI_MESSAGE_NOTE_ON,并期望它被视为和 @GlobalScope.MIDI_MESSAGE_NOTE_OFF 消息一样。如果有必要,可以用几行代码来处理:

  1. func _input(event):
  2. if event is InputEventMIDI:
  3. if event.message == MIDI_MESSAGE_NOTE_ON and event.velocity > 0:
  4. print("Note pressed!")