Issue with loaded Midi.Net DLL

86 Views Asked by At

Lately I'm having some issues in different applications that I have made. All of these applications use a Midi-controller to send midi-notes to a lighting desk. The issue is the same for all of these applications.

In runtime, when I'm working on the application, it sometimes occurs that my complete application freezes. I don't get any warningmessages, nor is the debugger popping up to tell me what's wrong. It always occurs when I want to play a midi-note. The only thing I can do at that point, is to reboot the entire machine, which is not that funny.

Because the application hangs and I don't get any debugging information, I'm certain it has to do with the DLL I use to send Midi-notes and that there's an issue there or in the way I have implemented the dll.

I've posted the code below and I would appreciate it, if someone could tell me what I'm doing wrong?

This is de code in the mainform initializing the Midi

MidiTools midi;

private void initMidi()
{
   midi = new MidiTools();
   midi.Enabled = true;
}

The initMidi() is called from inside the Form_Load-function.

The code to play a Midi-note is:

midi.playNote(22,0)

Below is the code inside the MidiTools-class file

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();
            }
        }
    }
}

The Midi-library itself was downloaded from this link: https://midi-dot-net.googlecode.com/files/midi-dot-net_src_1.0.5.zip

In the past I've tried multiple ways of fixing this problem. I've tried inserting a bigger delay, I've tried cueing the messages in a list and processing them one by one to prevent a midinote from being asked to play wile another note is still being sent, but none of those helped.

In 98% of the cases it works, it's just occasionally that it freezes on me. I'm using the M-Audio Midisport controller. (http://www.m-audio.com/products/view/midisport-4x4-anniversary-edition) but it has also happened on other controllers.

So any help is greatly appreciated.

Best regards, Kenneth

0

There are 0 best solutions below