Проблема с загруженной Midi.Net DLL
В последнее время у меня возникли проблемы в разных приложениях, которые я сделал. Все эти приложения используют Midi-контроллер для отправки midi-нот на стол освещения. Проблема одинакова для всех этих приложений.
Во время выполнения, когда я работаю над приложением, иногда случается, что мое полное приложение зависает. Я не получаю никаких предупреждающих сообщений, и отладчик не появляется, чтобы сказать мне, что случилось. Это всегда происходит, когда я хочу сыграть миди-ноту. Единственное, что я могу сделать на этом этапе, это перезагрузить всю машину, что не так уж смешно.
Поскольку приложение зависает, и я не получаю никакой отладочной информации, я уверен, что это связано с DLL, которую я использую для отправки Midi-примечаний, и что есть проблема там или в способе, которым я реализовал dll.
Я разместил код ниже, и я был бы признателен, если кто-то может сказать мне, что я делаю не так?
Это код де в основной форме, инициализирующий Midi
MidiTools midi;
private void initMidi()
{
midi = new MidiTools();
midi.Enabled = true;
}
InitMidi() вызывается из функции Form_Load.
Код для воспроизведения миди-ноты:
midi.playNote(22,0)
Ниже приведен код внутри файла класса MidiTools
using Midi;
namespace MidiTest
{
class MidiTools
{
public bool Enabled { get; set; }
OutputDevice outputDevice = OutputDevice.InstalledDevices[1];
Channel selectedChannel = Channel.Channel16;
int velocity = 127;
private void playNote(int noteNumber, int delay)
{
// CONVERT THE NOTE
Note selectedNote = (Note)noteNumber;
if (Enabled)
{
Thread.Sleep(delay);
Console.WriteLine(DateTime.Now.ToString("hh:mm:ss NOTE: ") + selectedNote.ToString());
outputDevice.Open();
outputDevice.SendNoteOn(selectedChannel, selectedNote, velocity);
outputDevice.Close();
}
}
}
}
Сама Midi-библиотека была загружена по этой ссылке: https://midi-dot-net.googlecode.com/files/midi-dot-net_src_1.0.5.zip
В прошлом я пробовал несколько способов решения этой проблемы. Я попытался вставить большую задержку, я попытался выстроить сообщения в списке и обработать их одно за другим, чтобы не дать мидиноту попросить воспроизвести, пока еще не отправляется другая нота, но ни одна из них не помогла.
В 98% случаев это работает, просто иногда он зависает на мне. Я использую контроллер M-Audio Midisport. ( http://www.m-audio.com/products/view/midisport-4x4-anniversary-edition), но это также произошло на других контроллерах.
Так что любая помощь очень ценится.
С наилучшими пожеланиями, Кеннет