0

最近、作成したさまざまなアプリケーションでいくつかの問題が発生しています。これらのアプリケーションはすべて、Midi コントローラーを使用して MIDI ノートを照明デスクに送信します。この問題は、これらすべてのアプリケーションで同じです。

実行時にアプリケーションで作業しているときに、アプリケーション全体がフリーズすることがあります。警告メッセージは表示されず、デバッガーがポップアップして何が問題なのかを教えてくれません。MIDIノートを演奏したいときはいつも発生します。その時点で私にできる唯一のことは、マシン全体を再起動することですが、これはそれほど面白くありません。

アプリケーションがハングアップし、デバッグ情報が得られないため、Midi ノートの送信に使用する DLL に問題があること、または DLL の実装方法に問題があることは確かです。

以下のコードを投稿しました。誰かが私が間違っていることを教えていただければ幸いです。

これは、Midi を初期化するメインフォームのコードです。

MidiTools midi;

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

initMidi() は Form_Load 関数内から呼び出されます。

Midi ノートを再生するコードは次のとおりです。

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

過去に、この問題を解決するために複数の方法を試しました。より大きな遅延を挿入しようとしましたが、リスト内のメッセージをキューに入れ、それらを1つずつ処理して、別のノートがまだ送信されている間にミディノートが再生するように求められないようにしましたが、どれも役に立ちませんでした.

98% のケースで動作しますが、たまにフリーズすることがあります。M-Audio Midisport コントローラーを使用しています。(http://www.m-audio.com/products/view/midisport-4x4-anniversary-edition)が、他のコントローラーでも発生しています。

したがって、どんな助けも大歓迎です。

よろしく、ケネス

4

0 に答える 0