InputEventMIDI

继承: InputEvent < Resource < RefCounted < Object

表示来自MIDI设备(例如音乐键盘)的MIDI消息。

描述

InputEventMIDI存储有关来自MIDI(音乐乐器数字接口)设备消息的信息。这些设备可能包括音乐键盘、合成器和鼓机。

MIDI消息可以通过5针MIDI连接器或通过USB接收。如果您的设备同时支持这两种方式,请确保在设备中检查设置以查看它正在使用哪个输出。

默认情况下,i3D不检测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)

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

注意: 在网络平台上,使用MIDI输入需要先获得浏览器的权限。该权限请求是在调用OS.open_midi_inputs()时进行的。在用户接受权限请求之前,MIDI输入将无法正常工作。

属性


属性说明

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

要了解每个值的含义,请参阅General 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!")