mirror of
https://github.com/godotengine/godot-docs.git
synced 2026-01-04 14:11:02 +03:00
classref: Sync with latest 4.0-alpha
This commit is contained in:
@@ -11,7 +11,82 @@ InputEventMIDI
|
||||
|
||||
**Inherits:** :ref:`InputEvent<class_InputEvent>` **<** :ref:`Resource<class_Resource>` **<** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
|
||||
|
||||
Input event for MIDI inputs.
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
InputEventMIDI allows receiving input events from MIDI devices such as a piano. MIDI stands for Musical Instrument Digital Interface.
|
||||
|
||||
MIDI signals can be sent over a 5-pin MIDI connector or over USB, if your device supports both be sure to check the settings in the device to see which output it's using.
|
||||
|
||||
To receive input events from MIDI devices, you need to call :ref:`OS.open_midi_inputs<class_OS_method_open_midi_inputs>`. You can check which devices are detected using :ref:`OS.get_connected_midi_inputs<class_OS_method_get_connected_midi_inputs>`.
|
||||
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. code-tab:: gdscript
|
||||
|
||||
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))
|
||||
|
||||
.. code-tab:: csharp
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Note that Godot does not currently support MIDI output, so there is no way to emit MIDI signals from Godot. Only MIDI input works.
|
||||
|
||||
Tutorials
|
||||
---------
|
||||
|
||||
- `MIDI Message Status Byte List <https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-status-bytes>`__
|
||||
|
||||
- `Wikipedia General MIDI Instrument List <https://en.wikipedia.org/wiki/General_MIDI#Program_change_events>`__
|
||||
|
||||
- `Wikipedia Piano Key Frequencies List <https://en.wikipedia.org/wiki/Piano_key_frequencies#List>`__
|
||||
|
||||
Properties
|
||||
----------
|
||||
@@ -49,6 +124,8 @@ Property Descriptions
|
||||
| *Getter* | get_channel() |
|
||||
+-----------+--------------------+
|
||||
|
||||
The MIDI channel of this input event. There are 16 channels, so this value ranges from 0 to 15. MIDI channel 9 is reserved for the use with percussion instruments, the rest of the channels are for non-percussion instruments.
|
||||
|
||||
----
|
||||
|
||||
.. _class_InputEventMIDI_property_controller_number:
|
||||
@@ -63,6 +140,8 @@ Property Descriptions
|
||||
| *Getter* | get_controller_number() |
|
||||
+-----------+------------------------------+
|
||||
|
||||
If the message is ``MIDI_MESSAGE_CONTROL_CHANGE``, this indicates the controller number, otherwise this is zero. Controllers include devices such as pedals and levers.
|
||||
|
||||
----
|
||||
|
||||
.. _class_InputEventMIDI_property_controller_value:
|
||||
@@ -77,6 +156,8 @@ Property Descriptions
|
||||
| *Getter* | get_controller_value() |
|
||||
+-----------+-----------------------------+
|
||||
|
||||
If the message is ``MIDI_MESSAGE_CONTROL_CHANGE``, this indicates the controller value, otherwise this is zero. Controllers include devices such as pedals and levers.
|
||||
|
||||
----
|
||||
|
||||
.. _class_InputEventMIDI_property_instrument:
|
||||
@@ -91,6 +172,8 @@ Property Descriptions
|
||||
| *Getter* | get_instrument() |
|
||||
+-----------+-----------------------+
|
||||
|
||||
The instrument of this input event. This value ranges from 0 to 127. Refer to the instrument list on the General MIDI wikipedia article to see a list of instruments, except that this value is 0-index, so subtract one from every number on that chart. A standard piano will have an instrument number of 0.
|
||||
|
||||
----
|
||||
|
||||
.. _class_InputEventMIDI_property_message:
|
||||
@@ -105,6 +188,14 @@ Property Descriptions
|
||||
| *Getter* | get_message() |
|
||||
+-----------+--------------------+
|
||||
|
||||
Returns a value indicating the type of message for this MIDI signal. This is a member of the :ref:`MIDIMessage<enum_@GlobalScope_MIDIMessage>` enum.
|
||||
|
||||
For MIDI messages between 0x80 and 0xEF, only the left half of the bits are returned as this value, as the other part is the channel (ex: 0x94 becomes 0x9). For MIDI messages from 0xF0 to 0xFF, the value is returned as-is.
|
||||
|
||||
Notes will return ``MIDI_MESSAGE_NOTE_ON`` when activated, but they might not always return ``MIDI_MESSAGE_NOTE_OFF`` when deactivated, therefore your code should treat the input as stopped if some period of time has passed.
|
||||
|
||||
For more information, see the MIDI message status byte list chart linked above.
|
||||
|
||||
----
|
||||
|
||||
.. _class_InputEventMIDI_property_pitch:
|
||||
@@ -119,6 +210,8 @@ Property Descriptions
|
||||
| *Getter* | get_pitch() |
|
||||
+-----------+------------------+
|
||||
|
||||
The pitch index number of this MIDI signal. This value ranges from 0 to 127. On a piano, middle C is 60, and A440 is 69, see the "MIDI note" column of the piano key frequency chart on Wikipedia for more information.
|
||||
|
||||
----
|
||||
|
||||
.. _class_InputEventMIDI_property_pressure:
|
||||
@@ -133,6 +226,8 @@ Property Descriptions
|
||||
| *Getter* | get_pressure() |
|
||||
+-----------+---------------------+
|
||||
|
||||
The pressure of the MIDI signal. This value ranges from 0 to 127. For many devices, this value is always zero.
|
||||
|
||||
----
|
||||
|
||||
.. _class_InputEventMIDI_property_velocity:
|
||||
@@ -147,6 +242,8 @@ Property Descriptions
|
||||
| *Getter* | get_velocity() |
|
||||
+-----------+---------------------+
|
||||
|
||||
The velocity of the MIDI signal. This value ranges from 0 to 127. For a piano, this corresponds to how quickly the key was pressed, and is rarely above about 110 in practice.
|
||||
|
||||
.. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
|
||||
.. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`
|
||||
.. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)`
|
||||
|
||||
Reference in New Issue
Block a user