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