加载Midi.Net DLL的问题

时间:2015-10-10 08:31:19

标签: c# midi midi-interface

最近我在不同的应用程序中遇到了一些问题。所有这些应用程序都使用Midi控制器将midi-notes发送到照明台。所有这些应用程序的问题都是一样的。

在运行时,当我正在处理应用程序时,有时会发生我的完整应用程序冻结。我没有得到任何警告消息,也没有调试器弹出来告诉我什么是错的。它总是发生在我想演奏midi-note时。我唯一可以做的就是重启整个机器,这不是那么有趣。

因为应用程序挂起并且我没有得到任何调试信息,我确定它与我用来发送Midi-notes的DLL有关,并且那里存在问题或者我实现了dll的方式

我已经发布了下面的代码,我很感激,如果有人能告诉我我做错了什么?

这是初始化Midi的主窗体中的代码

MidiTools midi;

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

从Form_Load函数内部调用initMidi()。

播放Midi-note的代码是:

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-library本身是从以下链接下载的: https://midi-dot-net.googlecode.com/files/midi-dot-net_src_1.0.5.zip

过去我尝试过多种方法来解决这个问题。我已经尝试插入一个更大的延迟,我已经尝试提示列表中的消息并逐个处理它们以防止midinote被要求播放另一个音符仍然被发送,但这些都没有帮助。

在98%的案例中它起作用,偶尔它会冻结在我身上。 我正在使用M-Audio Midisport控制器。 (http://www.m-audio.com/products/view/midisport-4x4-anniversary-edition)但它也发生在其他控制器上。

所以非常感谢任何帮助。

祝你好运, 肯尼斯

0 个答案:

没有答案