Проблема с загруженной 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), но это также произошло на других контроллерах.

Так что любая помощь очень ценится.

С наилучшими пожеланиями, Кеннет

0 ответов

Другие вопросы по тегам