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.

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)

注意: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 消息一样。如果有必要,可以用几行代码来处理:

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