Я хочу использовать мое пианино Midi для взаимодействия с моей Windows формой C# (DryWetMidi) - PullRequest
3 голосов
/ 03 мая 2020

Я работаю над небольшим программным обеспечением в Visual Studio (форма Windows. NET в C#). Я сделал просто пианино, которое меняет цвета клавиш при нажатии некоторых кнопок клавиатуры (QWERTY)

enter image description here

Теперь я хочу использовать мое MIDI-пианино вместо этого события. В моем собственном коде я использовал KeyDown (чтобы показать цветное изображение клавиши пианино поверх оригинала) и KeyUp (чтобы скрыть его), чтобы сделать это событие, и я знаю, что сделать это с пианино MIDI будет сложнее, чем this.

Я нашел DryWetMidi API (от Melanchall) здесь (и я скачал его с помощью NuGet и применил его в моем проекте), который может С помощью MIDI я делаю много огромных вещей, но я просто хочу сделать следующие простые вещи:

  1. Распознавание устройств MIDI, которые windows распознают.

  2. Позвольте пользователю выбрать свое MIDI-устройство в «форме настроек» (которая у меня уже есть в бланке)

  3. Может играть на пианино MIDI, чтобы активировать «событие изменения цвета "

  4. (не нужно распознавать скорость)

  5. (не нужно воспроизводить MIDI-файлы)

  6. (не нужно звучать, потому что я планирую использовать его одновременно с программным обеспечением виртуального инструмента)

DryWetM В документации idi сказано, что «настроить получение событий довольно просто», используя это:

using System;
using Melanchall.DryWetMidi.Devices;
using Melanchall.DryWetMidi.Core;

// ...

using (var inputDevice = InputDevice.GetByName("MIDI Device"))
{
    inputDevice.EventReceived += OnEventReceived;
    inputDevice.StartEventsListening();
}

// ...

private void OnEventReceived(object sender, MidiEventReceivedEventArgs e)
{
    MidiDevice midiDevice = (MidiDevice)sender;
    MidiEvent midiEvent = e.Event;
    Console.WriteLine($"Event received from '{midiDevice.Name}' at {DateTime.Now}: {midiEvent}");
}

... но у меня это не работает (как вы можете видеть здесь ): (да, я уже написал эти 3 строки в начало моего Form1.cs):

using System;

using Melanchall.DryWetMidi.Devices;

using Melanchall.DryWetMidi.Core;

Эти ошибки (которые подчеркнуты красным) не позволяют мне продолжить кодирование моего проекта, чтобы достичь конечной цели выполнения события изменения цвета ключа.

Я принципиалист и просто пишу простые коды (как вы можете видеть), поэтому, вероятно, я не знаю, нужно ли мне помещать эти коды в новый документ класса или форму, чтобы вызывать их или другую вещь, которая может быть очевидным для вас.

Я хочу уточнить, что я уже прочитал всю документацию библиотеки, которая относится к подключению устройства, но я не смог найти решение там.

Клянусь вам, я буду очень признателен за любую помощь, которую вы можете мне оказать.

1 Ответ

4 голосов
/ 03 мая 2020

Я - автор DryWetMIDI.

Вы получаете эти ошибки, потому что вы просто копируете / вставляете образец кода. Блок using может использоваться только в методах.

Если ваша задача «включить клавишу в вашем приложении при нажатии клавиши на устройстве MIDI» , ваш рабочий процесс должен быть:

  1. Заполните список устройств, используя InputDevice.GetAll
  2. Когда пользователь выбирает устройство из списка, сохраните выбранное устройство в varibale (например, _inputDevice )
  3. Установить обработчик события для EventReceived события IInputDevice, как в фрагменте из документов библиотеки, которые вы показали, и не забудьте вызов StartEventsListening метод
  4. Когда вы получаете NoteOnEvent, зажгите клавишу на пианино в вашем приложении
  5. Когда вы получаете NoteOffEvent, нажмите кнопку
  6. Когда пользователь выбирает другое устройство или приложение закрывается, вы должны утилизировать _inputDevice методом Dispose; также удалите обработчик событий, который вы установили на шаге 3

Пожалуйста, прочитайте Устройство ввода Статья из библиотеки документов.

...