NativeApi.cs

//**********************************************************

//* MidiOut exaple                                         *

//* Author: D. Zouchinski                                  *

//* http://zouchinski.co.uk                                *

//* Copyright @ 2011-2012                                  *

//**********************************************************

using System;

using System.Collections.Generic;

using System.Runtime.InteropServices;

 

namespace MidiOut

{

    internal class NativeApi

    {

        [DllImport("Winmm.dll")]

        public extern static uint midiOutGetNumDevs();

 

        [DllImport("Winmm.dll")]

        public extern static uint midiOutGetID(IntPtr hmo, out uint puDeviceID);

 

        [DllImport("Winmm.dll")]

        public extern static uint midiOutOpen(out IntPtr lphmo, IntPtr uDeviceID, IntPtr dwCallback, IntPtr dwCallbackInstance, uint dwFlags);

 

        [DllImport("Winmm.dll")]

        public extern static uint midiOutClose(IntPtr hmo);

 

        [DllImport("Winmm.dll")]

        public extern static uint midiOutGetVolume(IntPtr hmo, out uint lpdwVolume);

 

        [DllImport("Winmm.dll")]

        public extern static uint midiOutSetVolume(IntPtr hmo, uint dwVolume);

 

        [DllImport("Winmm.dll")]

        public extern static uint midiOutGetDevCaps(uint uDeviceID, ref MIDIOUTCAPS lpMidiOutCaps, uint cbMidiOutCaps);

 

        [DllImport("Winmm.dll")]

        public extern static uint midiOutShortMsg(IntPtr hmo, uint dwMsg);

 

        [DllImport("Winmm.dll")]

        public extern static uint midiOutMessage(IntPtr deviceID, uint msg, IntPtr dw1, IntPtr dw2);

 

        [DllImport("Winmm.dll")]

        public extern static uint midiOutLongMsg(IntPtr hmo, ref MIDIHDR lpMidiOutHdr, uint cbMidiOutHdr);

 

        [DllImport("Winmm.dll")]

        public extern static uint midiOutReset(IntPtr hmo);

 

        [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]

        public struct MIDIOUTCAPS

        {

            public ushort wMid;

            public ushort wPid;

            public uint vDriverVersion;

            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]

            public string szPname;

            public ushort wTechnology;

            public ushort wVoices;

            public ushort wNotes;

            public ushort wChannelMask;

            public uint dwSupport;

        }

 

        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]

        public struct MIDIHDR

        {

            [MarshalAs(UnmanagedType.LPStr)]

            public string lpData;

            public uint dwBufferLength;

            public uint dwBytesRecorded;

            public IntPtr dwUser;

            public uint dwFlags;

            public IntPtr lpNext;

            public IntPtr reserved;

            public uint dwOffset;

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]

            public IntPtr[] dwReserved;

        }

    }

}