InputEventMIDI
Наследует: InputEvent < Resource < RefCounted < Object
Представляет MIDI-сообщение от MIDI-устройства, например музыкальной клавиатуры.
Описание
InputEventMIDI хранит информацию о сообщениях с MIDI (Musical Instrument Digital Interface) устройств. К ним могут относиться музыкальные клавиатуры, синтезаторы и драм-машины.
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)
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}");
}
Примечание: Godot не поддерживает вывод MIDI, поэтому нет способа отправлять сообщения MIDI из Godot. Поддерживается только ввод MIDI.
Примечание: На веб-платформе использование ввода MIDI требует предварительного предоставления разрешения браузеру. Этот запрос разрешения выполняется при вызове OS.open_midi_inputs(). Ввод MIDI не будет работать, пока пользователь не примет запрос разрешения.
Обучающие материалы
Свойства
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
Описания свойств
MIDI-канал этого сообщения, диапазон от 0 до 15. MIDI-канал 9 зарезервирован для ударных инструментов.
Уникальный номер контроллера, если message — @GlobalScope.MIDI_MESSAGE_CONTROL_CHANGE, в противном случае это 0. Это значение можно использовать для идентификации ползунков громкости, баланса и панорамирования, а также переключателей и педалей на MIDI-устройстве. Небольшой список см. в General MIDI specification.
Значение, применяемое к контроллеру. Если message — это @GlobalScope.MIDI_MESSAGE_CONTROL_CHANGE, это значение варьируется от 0 до 127, в противном случае это 0. См. также controller_value.
Инструмент (также называемый program или preset), используемый в этом MIDI-сообщении. Это значение варьируется от 0 до 127.
Чтобы узнать, что означает каждое значение, обратитесь к списку инструментов General MIDI. Имейте в виду, что список смещен на 1, поскольку он не начинается с 0. Значение 0 соответствует акустическому роялю (grand piano).
MIDIMessage message = 0 🔗
void set_message(value: MIDIMessage)
MIDIMessage get_message()
Представляет тип сообщения MIDI (см. перечисление MIDIMessage).
Для получения дополнительной информации см. таблицу байтов состояния сообщения MIDI.
Номер индекса высоты тона этого MIDI-сообщения. Это значение варьируется от 0 до 127.
На фортепиано middle C — это 60, за которым следует C-sharp (61), затем D (62) и т. д. Каждая октава разделена на смещения по 12. См. столбец «MIDI note number» в таблице частот клавиш фортепиано полный список.
Сила нажатия клавиши. Это значение варьируется от 0 до 127.
Примечание: Для многих устройств это значение всегда равно 0. Другие устройства, такие как музыкальные клавиатуры, могут имитировать давление, изменяя velocity вместо этого.
Скорость сообщения MIDI. Это значение находится в диапазоне от 0 до 127. Для музыкальной клавиатуры это соответствует тому, как быстро была нажата клавиша, и на практике редко превышает 110.
Примечание: Некоторые устройства MIDI могут отправлять сообщение @GlobalScope.MIDI_MESSAGE_NOTE_ON со скоростью 0 и ожидать, что оно будет обработано так же, как сообщение @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!")