class_inputeventmidi.rst 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. :github_url: hide
  2. .. DO NOT EDIT THIS FILE!!!
  3. .. Generated automatically from Godot engine sources.
  4. .. Generator: https://github.com/godotengine/godot/tree/4.2/doc/tools/make_rst.py.
  5. .. XML source: https://github.com/godotengine/godot/tree/4.2/doc/classes/InputEventMIDI.xml.
  6. .. _class_InputEventMIDI:
  7. InputEventMIDI
  8. ==============
  9. **Inherits:** :ref:`InputEvent<class_InputEvent>` **<** :ref:`Resource<class_Resource>` **<** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
  10. Represents a MIDI message from a MIDI device, such as a musical keyboard.
  11. .. rst-class:: classref-introduction-group
  12. Description
  13. -----------
  14. InputEventMIDI stores information about messages from `MIDI <https://en.wikipedia.org/wiki/MIDI>`__ (Musical Instrument Digital Interface) devices. These may include musical keyboards, synthesizers, and drum machines.
  15. MIDI messages can be received 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 is using.
  16. By default, Godot does not detect MIDI devices. You need to call :ref:`OS.open_midi_inputs<class_OS_method_open_midi_inputs>`, first. You can check which devices are detected with :ref:`OS.get_connected_midi_inputs<class_OS_method_get_connected_midi_inputs>`, and close the connection with :ref:`OS.close_midi_inputs<class_OS_method_close_midi_inputs>`.
  17. .. tabs::
  18. .. code-tab:: gdscript
  19. func _ready():
  20. OS.open_midi_inputs()
  21. print(OS.get_connected_midi_inputs())
  22. func _input(input_event):
  23. if input_event is InputEventMIDI:
  24. _print_midi_info(input_event)
  25. func _print_midi_info(midi_event):
  26. print(midi_event)
  27. print("Channel ", midi_event.channel)
  28. print("Message ", midi_event.message)
  29. print("Pitch ", midi_event.pitch)
  30. print("Velocity ", midi_event.velocity)
  31. print("Instrument ", midi_event.instrument)
  32. print("Pressure ", midi_event.pressure)
  33. print("Controller number: ", midi_event.controller_number)
  34. print("Controller value: ", midi_event.controller_value)
  35. .. code-tab:: csharp
  36. public override void _Ready()
  37. {
  38. OS.OpenMidiInputs();
  39. GD.Print(OS.GetConnectedMidiInputs());
  40. }
  41. public override void _Input(InputEvent inputEvent)
  42. {
  43. if (inputEvent is InputEventMidi midiEvent)
  44. {
  45. PrintMIDIInfo(midiEvent);
  46. }
  47. }
  48. private void PrintMIDIInfo(InputEventMidi midiEvent)
  49. {
  50. GD.Print(midiEvent);
  51. GD.Print($"Channel {midiEvent.Channel}");
  52. GD.Print($"Message {midiEvent.Message}");
  53. GD.Print($"Pitch {midiEvent.Pitch}");
  54. GD.Print($"Velocity {midiEvent.Velocity}");
  55. GD.Print($"Instrument {midiEvent.Instrument}");
  56. GD.Print($"Pressure {midiEvent.Pressure}");
  57. GD.Print($"Controller number: {midiEvent.ControllerNumber}");
  58. GD.Print($"Controller value: {midiEvent.ControllerValue}");
  59. }
  60. \ **Note:** Godot does not support MIDI output, so there is no way to emit MIDI messages from Godot. Only MIDI input is supported.
  61. .. rst-class:: classref-introduction-group
  62. Tutorials
  63. ---------
  64. - `MIDI Message Status Byte List <https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-status-bytes>`__
  65. - `Wikipedia General MIDI Instrument List <https://en.wikipedia.org/wiki/General_MIDI#Program_change_events>`__
  66. - `Wikipedia Piano Key Frequencies List <https://en.wikipedia.org/wiki/Piano_key_frequencies#List>`__
  67. .. rst-class:: classref-reftable-group
  68. Properties
  69. ----------
  70. .. table::
  71. :widths: auto
  72. +---------------------------------------------------+---------------------------------------------------------------------------+-------+
  73. | :ref:`int<class_int>` | :ref:`channel<class_InputEventMIDI_property_channel>` | ``0`` |
  74. +---------------------------------------------------+---------------------------------------------------------------------------+-------+
  75. | :ref:`int<class_int>` | :ref:`controller_number<class_InputEventMIDI_property_controller_number>` | ``0`` |
  76. +---------------------------------------------------+---------------------------------------------------------------------------+-------+
  77. | :ref:`int<class_int>` | :ref:`controller_value<class_InputEventMIDI_property_controller_value>` | ``0`` |
  78. +---------------------------------------------------+---------------------------------------------------------------------------+-------+
  79. | :ref:`int<class_int>` | :ref:`instrument<class_InputEventMIDI_property_instrument>` | ``0`` |
  80. +---------------------------------------------------+---------------------------------------------------------------------------+-------+
  81. | :ref:`MIDIMessage<enum_@GlobalScope_MIDIMessage>` | :ref:`message<class_InputEventMIDI_property_message>` | ``0`` |
  82. +---------------------------------------------------+---------------------------------------------------------------------------+-------+
  83. | :ref:`int<class_int>` | :ref:`pitch<class_InputEventMIDI_property_pitch>` | ``0`` |
  84. +---------------------------------------------------+---------------------------------------------------------------------------+-------+
  85. | :ref:`int<class_int>` | :ref:`pressure<class_InputEventMIDI_property_pressure>` | ``0`` |
  86. +---------------------------------------------------+---------------------------------------------------------------------------+-------+
  87. | :ref:`int<class_int>` | :ref:`velocity<class_InputEventMIDI_property_velocity>` | ``0`` |
  88. +---------------------------------------------------+---------------------------------------------------------------------------+-------+
  89. .. rst-class:: classref-section-separator
  90. ----
  91. .. rst-class:: classref-descriptions-group
  92. Property Descriptions
  93. ---------------------
  94. .. _class_InputEventMIDI_property_channel:
  95. .. rst-class:: classref-property
  96. :ref:`int<class_int>` **channel** = ``0``
  97. .. rst-class:: classref-property-setget
  98. - void **set_channel** **(** :ref:`int<class_int>` value **)**
  99. - :ref:`int<class_int>` **get_channel** **(** **)**
  100. The MIDI channel of this message, ranging from ``0`` to ``15``. MIDI channel ``9`` is reserved for percussion instruments.
  101. .. rst-class:: classref-item-separator
  102. ----
  103. .. _class_InputEventMIDI_property_controller_number:
  104. .. rst-class:: classref-property
  105. :ref:`int<class_int>` **controller_number** = ``0``
  106. .. rst-class:: classref-property-setget
  107. - void **set_controller_number** **(** :ref:`int<class_int>` value **)**
  108. - :ref:`int<class_int>` **get_controller_number** **(** **)**
  109. The unique number of the controller, if :ref:`message<class_InputEventMIDI_property_message>` is :ref:`@GlobalScope.MIDI_MESSAGE_CONTROL_CHANGE<class_@GlobalScope_constant_MIDI_MESSAGE_CONTROL_CHANGE>`, otherwise this is ``0``. This value can be used to identify sliders for volume, balance, and panning, as well as switches and pedals on the MIDI device. See the `General MIDI specification <https://en.wikipedia.org/wiki/General_MIDI#Controller_events>`__ for a small list.
  110. .. rst-class:: classref-item-separator
  111. ----
  112. .. _class_InputEventMIDI_property_controller_value:
  113. .. rst-class:: classref-property
  114. :ref:`int<class_int>` **controller_value** = ``0``
  115. .. rst-class:: classref-property-setget
  116. - void **set_controller_value** **(** :ref:`int<class_int>` value **)**
  117. - :ref:`int<class_int>` **get_controller_value** **(** **)**
  118. The value applied to the controller. If :ref:`message<class_InputEventMIDI_property_message>` is :ref:`@GlobalScope.MIDI_MESSAGE_CONTROL_CHANGE<class_@GlobalScope_constant_MIDI_MESSAGE_CONTROL_CHANGE>`, this value ranges from ``0`` to ``127``, otherwise it is ``0``. See also :ref:`controller_value<class_InputEventMIDI_property_controller_value>`.
  119. .. rst-class:: classref-item-separator
  120. ----
  121. .. _class_InputEventMIDI_property_instrument:
  122. .. rst-class:: classref-property
  123. :ref:`int<class_int>` **instrument** = ``0``
  124. .. rst-class:: classref-property-setget
  125. - void **set_instrument** **(** :ref:`int<class_int>` value **)**
  126. - :ref:`int<class_int>` **get_instrument** **(** **)**
  127. The instrument (also called *program* or *preset*) used on this MIDI message. This value ranges from ``0`` to ``127``.
  128. To see what each value means, refer to the `General MIDI's instrument list <https://en.wikipedia.org/wiki/General_MIDI#Program_change_events>`__. Keep in mind that the list is off by 1 because it does not begin from 0. A value of ``0`` corresponds to the acoustic grand piano.
  129. .. rst-class:: classref-item-separator
  130. ----
  131. .. _class_InputEventMIDI_property_message:
  132. .. rst-class:: classref-property
  133. :ref:`MIDIMessage<enum_@GlobalScope_MIDIMessage>` **message** = ``0``
  134. .. rst-class:: classref-property-setget
  135. - void **set_message** **(** :ref:`MIDIMessage<enum_@GlobalScope_MIDIMessage>` value **)**
  136. - :ref:`MIDIMessage<enum_@GlobalScope_MIDIMessage>` **get_message** **(** **)**
  137. Represents the type of MIDI message (see the :ref:`MIDIMessage<enum_@GlobalScope_MIDIMessage>` enum).
  138. For more information, see the `MIDI message status byte list chart <https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-status-bytes>`__.
  139. .. rst-class:: classref-item-separator
  140. ----
  141. .. _class_InputEventMIDI_property_pitch:
  142. .. rst-class:: classref-property
  143. :ref:`int<class_int>` **pitch** = ``0``
  144. .. rst-class:: classref-property-setget
  145. - void **set_pitch** **(** :ref:`int<class_int>` value **)**
  146. - :ref:`int<class_int>` **get_pitch** **(** **)**
  147. The pitch index number of this MIDI message. This value ranges from ``0`` to ``127``.
  148. On a piano, the **middle C** is ``60``, followed by a **C-sharp** (``61``), then a **D** (``62``), and so on. Each octave is split in offsets of 12. See the "MIDI note number" column of the `piano key frequency chart <https://en.wikipedia.org/wiki/Piano_key_frequencies>`__ a full list.
  149. .. rst-class:: classref-item-separator
  150. ----
  151. .. _class_InputEventMIDI_property_pressure:
  152. .. rst-class:: classref-property
  153. :ref:`int<class_int>` **pressure** = ``0``
  154. .. rst-class:: classref-property-setget
  155. - void **set_pressure** **(** :ref:`int<class_int>` value **)**
  156. - :ref:`int<class_int>` **get_pressure** **(** **)**
  157. The strength of the key being pressed. This value ranges from ``0`` to ``127``.
  158. \ **Note:** For many devices, this value is always ``0``. Other devices such as musical keyboards may simulate pressure by changing the :ref:`velocity<class_InputEventMIDI_property_velocity>`, instead.
  159. .. rst-class:: classref-item-separator
  160. ----
  161. .. _class_InputEventMIDI_property_velocity:
  162. .. rst-class:: classref-property
  163. :ref:`int<class_int>` **velocity** = ``0``
  164. .. rst-class:: classref-property-setget
  165. - void **set_velocity** **(** :ref:`int<class_int>` value **)**
  166. - :ref:`int<class_int>` **get_velocity** **(** **)**
  167. The velocity of the MIDI message. This value ranges from ``0`` to ``127``. For a musical keyboard, this corresponds to how quickly the key was pressed, and is rarely above ``110`` in practice.
  168. \ **Note:** Some MIDI devices may send a :ref:`@GlobalScope.MIDI_MESSAGE_NOTE_ON<class_@GlobalScope_constant_MIDI_MESSAGE_NOTE_ON>` message with ``0`` velocity and expect it to be treated the same as a :ref:`@GlobalScope.MIDI_MESSAGE_NOTE_OFF<class_@GlobalScope_constant_MIDI_MESSAGE_NOTE_OFF>` message. If necessary, this can be handled with a few lines of code:
  169. ::
  170. func _input(event):
  171. if event is InputEventMIDI:
  172. if event.message == MIDI_MESSAGE_NOTE_ON and event.velocity > 0:
  173. print("Note pressed!")
  174. .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
  175. .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`
  176. .. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)`
  177. .. |constructor| replace:: :abbr:`constructor (This method is used to construct a type.)`
  178. .. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)`
  179. .. |operator| replace:: :abbr:`operator (This method describes a valid operator to use with this type as left-hand operand.)`
  180. .. |bitfield| replace:: :abbr:`BitField (This value is an integer composed as a bitmask of the following flags.)`